From afe60bfe30aa4a426f524ebe44e0c23779817390 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 21 Oct 2018 19:27:55 -0700 Subject: [PATCH] Fix handling of IGD returning empty IP address and success status --- mist/mist.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/mist/mist.cpp b/mist/mist.cpp index 155c526..76d3231 100644 --- a/mist/mist.cpp +++ b/mist/mist.cpp @@ -557,10 +557,13 @@ bool CheckWANAccess(PSOCKADDR_IN wanAddr, bool* foundPortForwardingRules) // Connected or disconnected IGD if (ret == 1 || ret == 2) { ret = UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, wanAddrStr); - if (ret == UPNPCOMMAND_SUCCESS) { + if (ret == UPNPCOMMAND_SUCCESS && strlen(wanAddrStr) > 0) { wanAddr->sin_addr.S_un.S_addr = inet_addr(wanAddrStr); printf("%s (UPnP)\n", wanAddrStr); - gotWanAddress = true; + + if (wanAddr->sin_addr.S_un.S_addr != 0) { + gotWanAddress = true; + } } char conflictMessage[512]; @@ -601,7 +604,9 @@ bool CheckWANAccess(PSOCKADDR_IN wanAddr, bool* foundPortForwardingRules) wanAddr->sin_addr = response.pnu.publicaddress.addr; inet_ntop(AF_INET, &response.pnu.publicaddress.addr, addrStr, sizeof(addrStr)); printf("%s (NAT-PMP)\n", addrStr); - gotWanAddress = true; + if (wanAddr->sin_addr.S_un.S_addr != 0) { + gotWanAddress = true; + } } }