MCPcopy Create free account
hub / github.com/PurpleI2P/i2pd / Discover

Method Discover

daemon/UPnP.cpp:86–156  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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 }

Callers

nothing calls this directly

Calls 2

LogPrintFunction · 0.85
UpdateAddressMethod · 0.80

Tested by

no test coverage detected