Fix handling of IGD returning empty IP address and success status

This commit is contained in:
Cameron Gutman
2018-10-21 19:27:55 -07:00
parent ac4e0101f2
commit afe60bfe30
+6 -1
View File
@@ -557,11 +557,14 @@ bool CheckWANAccess(PSOCKADDR_IN wanAddr, bool* foundPortForwardingRules)
// Connected or disconnected IGD // Connected or disconnected IGD
if (ret == 1 || ret == 2) { if (ret == 1 || ret == 2) {
ret = UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, wanAddrStr); 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); wanAddr->sin_addr.S_un.S_addr = inet_addr(wanAddrStr);
printf("%s (UPnP)\n", wanAddrStr); printf("%s (UPnP)\n", wanAddrStr);
if (wanAddr->sin_addr.S_un.S_addr != 0) {
gotWanAddress = true; gotWanAddress = true;
} }
}
char conflictMessage[512]; char conflictMessage[512];
*foundPortForwardingRules = true; *foundPortForwardingRules = true;
@@ -601,9 +604,11 @@ bool CheckWANAccess(PSOCKADDR_IN wanAddr, bool* foundPortForwardingRules)
wanAddr->sin_addr = response.pnu.publicaddress.addr; wanAddr->sin_addr = response.pnu.publicaddress.addr;
inet_ntop(AF_INET, &response.pnu.publicaddress.addr, addrStr, sizeof(addrStr)); inet_ntop(AF_INET, &response.pnu.publicaddress.addr, addrStr, sizeof(addrStr));
printf("%s (NAT-PMP)\n", addrStr); printf("%s (NAT-PMP)\n", addrStr);
if (wanAddr->sin_addr.S_un.S_addr != 0) {
gotWanAddress = true; gotWanAddress = true;
} }
} }
}
if (!gotWanAddress) { if (!gotWanAddress) {
if (!STUNFindWanAddress(wanAddr)) { if (!STUNFindWanAddress(wanAddr)) {