| 84 | } |
| 85 | |
| 86 | void UPnP::Discover () |
| 87 | { |
| 88 | bool isError; |
| 89 | int err; |
| 90 | |
| 91 | #if ((MINIUPNPC_API_VERSION >= 8) || defined (UPNPDISCOVER_SUCCESS)) |
| 92 | err = UPNPDISCOVER_SUCCESS; |
| 93 | |
| 94 | #if (MINIUPNPC_API_VERSION >= 14) |
| 95 | m_Devlist = upnpDiscover (UPNP_RESPONSE_TIMEOUT, NULL, NULL, 0, 0, 2, &err); |
| 96 | #else |
| 97 | m_Devlist = upnpDiscover (UPNP_RESPONSE_TIMEOUT, NULL, NULL, 0, 0, &err); |
| 98 | #endif |
| 99 | |
| 100 | isError = err != UPNPDISCOVER_SUCCESS; |
| 101 | #else // MINIUPNPC_API_VERSION >= 8 |
| 102 | err = 0; |
| 103 | m_Devlist = upnpDiscover (UPNP_RESPONSE_TIMEOUT, NULL, NULL, 0); |
| 104 | isError = m_Devlist == NULL; |
| 105 | #endif // MINIUPNPC_API_VERSION >= 8 |
| 106 | { |
| 107 | // notify starting thread |
| 108 | std::unique_lock<std::mutex> l(m_StartedMutex); |
| 109 | m_Started.notify_all (); |
| 110 | } |
| 111 | |
| 112 | if (isError) |
| 113 | { |
| 114 | LogPrint (eLogError, "UPnP: Unable to discover Internet Gateway Devices: error ", err); |
| 115 | return; |
| 116 | } |
| 117 | |
| 118 | #if (MINIUPNPC_API_VERSION >= 18) |
| 119 | err = UPNP_GetValidIGD (m_Devlist, &m_upnpUrls, &m_upnpData, m_NetworkAddr, sizeof (m_NetworkAddr), |
| 120 | m_externalIPAddress, sizeof (m_externalIPAddress)); |
| 121 | #else |
| 122 | err = UPNP_GetValidIGD (m_Devlist, &m_upnpUrls, &m_upnpData, m_NetworkAddr, sizeof (m_NetworkAddr)); |
| 123 | #endif |
| 124 | m_upnpUrlsInitialized=err!=0; |
| 125 | if (err == UPNP_IGD_VALID_CONNECTED) |
| 126 | { |
| 127 | #if (MINIUPNPC_API_VERSION < 18) |
| 128 | err = UPNP_GetExternalIPAddress (m_upnpUrls.controlURL, m_upnpData.first.servicetype, m_externalIPAddress); |
| 129 | if(err != UPNPCOMMAND_SUCCESS) |
| 130 | { |
| 131 | LogPrint (eLogError, "UPnP: Unable to get external address: error ", err); |
| 132 | return; |
| 133 | } |
| 134 | else |
| 135 | #endif |
| 136 | { |
| 137 | LogPrint (eLogError, "UPnP: Found Internet Gateway Device ", m_upnpUrls.controlURL); |
| 138 | if (!m_externalIPAddress[0]) |
| 139 | { |
| 140 | LogPrint (eLogError, "UPnP: Found Internet Gateway Device doesn't know our external address"); |
| 141 | return; |
| 142 | } |
| 143 | } |
nothing calls this directly
no test coverage detected