MCPcopy Create free account
hub / github.com/LUX-Core/lux / ThreadMapPort

Function ThreadMapPort

src/net.cpp:1195–1274  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1193
1194#ifdef USE_UPNP
1195void ThreadMapPort()
1196{
1197 std::string port = strprintf("%u", GetListenPort());
1198 const char* multicastif = 0;
1199 const char* minissdpdpath = 0;
1200 struct UPNPDev* devlist = 0;
1201 char lanaddr[64];
1202
1203#ifndef UPNPDISCOVER_SUCCESS
1204 /* miniupnpc 1.5 */
1205 devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0);
1206#elif MINIUPNPC_API_VERSION < 14
1207 /* miniupnpc 1.6 */
1208 int error = 0;
1209 devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0, 0, &error);
1210#else
1211 /* miniupnpc 1.9.20150730 */
1212 int error = 0;
1213 devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0, 0, 2, &error);
1214#endif
1215
1216 struct UPNPUrls urls;
1217 struct IGDdatas data;
1218 int r;
1219
1220 r = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
1221 if (r == 1) {
1222 if (fDiscover) {
1223 char externalIPAddress[40];
1224 r = UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIPAddress);
1225 if (r != UPNPCOMMAND_SUCCESS)
1226 LogPrintf("UPnP: GetExternalIPAddress() returned %d\n", r);
1227 else {
1228 if (externalIPAddress[0]) {
1229 LogPrintf("UPnP: ExternalIPAddress = %s\n", externalIPAddress);
1230 AddLocal(CNetAddr(externalIPAddress), LOCAL_UPNP);
1231 } else
1232 LogPrintf("UPnP: GetExternalIPAddress failed.\n");
1233 }
1234 }
1235
1236 string strDesc = "LUX " + FormatFullVersion();
1237
1238 try {
1239 while (true) {
1240#ifndef UPNPDISCOVER_SUCCESS
1241 /* miniupnpc 1.5 */
1242 r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype,
1243 port.c_str(), port.c_str(), lanaddr, strDesc.c_str(), "TCP", 0);
1244#else
1245 /* miniupnpc 1.6 */
1246 r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype,
1247 port.c_str(), port.c_str(), lanaddr, strDesc.c_str(), "TCP", 0, "0");
1248#endif
1249
1250 if (r != UPNPCOMMAND_SUCCESS)
1251 LogPrintf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n",
1252 port, port, lanaddr, r, strupnperror(r));

Callers

nothing calls this directly

Calls 5

GetListenPortFunction · 0.85
AddLocalFunction · 0.85
FormatFullVersionFunction · 0.85
MilliSleepFunction · 0.85
CNetAddrClass · 0.70

Tested by

no test coverage detected