Changeset View
Changeset View
Standalone View
Standalone View
src/mapport.cpp
Show All 30 Lines | |||||
#include <chrono> | #include <chrono> | ||||
#include <functional> | #include <functional> | ||||
#include <string> | #include <string> | ||||
#include <thread> | #include <thread> | ||||
#ifdef USE_UPNP | #ifdef USE_UPNP | ||||
static CThreadInterrupt g_upnp_interrupt; | static CThreadInterrupt g_upnp_interrupt; | ||||
static std::thread g_upnp_thread; | static std::thread g_upnp_thread; | ||||
using namespace std::chrono_literals; | |||||
static constexpr auto PORT_MAPPING_REANNOUNCE_PERIOD{20min}; | |||||
static void ThreadMapPort() { | static void ThreadMapPort() { | ||||
std::string port = strprintf("%u", GetListenPort()); | std::string port = strprintf("%u", GetListenPort()); | ||||
const char *multicastif = nullptr; | const char *multicastif = nullptr; | ||||
const char *minissdpdpath = nullptr; | const char *minissdpdpath = nullptr; | ||||
struct UPNPDev *devlist = nullptr; | struct UPNPDev *devlist = nullptr; | ||||
char lanaddr[64]; | char lanaddr[64]; | ||||
int error = 0; | int error = 0; | ||||
Show All 38 Lines | if (r == 1) { | ||||
if (r != UPNPCOMMAND_SUCCESS) { | if (r != UPNPCOMMAND_SUCCESS) { | ||||
LogPrintf( | LogPrintf( | ||||
"AddPortMapping(%s, %s, %s) failed with code %d (%s)\n", | "AddPortMapping(%s, %s, %s) failed with code %d (%s)\n", | ||||
port, port, lanaddr, r, strupnperror(r)); | port, port, lanaddr, r, strupnperror(r)); | ||||
} else { | } else { | ||||
LogPrintf("UPnP Port Mapping successful.\n"); | LogPrintf("UPnP Port Mapping successful.\n"); | ||||
} | } | ||||
} while (g_upnp_interrupt.sleep_for(std::chrono::minutes(20))); | } while (g_upnp_interrupt.sleep_for(PORT_MAPPING_REANNOUNCE_PERIOD)); | ||||
r = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, | r = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, | ||||
port.c_str(), "TCP", 0); | port.c_str(), "TCP", 0); | ||||
LogPrintf("UPNP_DeletePortMapping() returned: %d\n", r); | LogPrintf("UPNP_DeletePortMapping() returned: %d\n", r); | ||||
freeUPNPDevlist(devlist); | freeUPNPDevlist(devlist); | ||||
devlist = nullptr; | devlist = nullptr; | ||||
FreeUPNPUrls(&urls); | FreeUPNPUrls(&urls); | ||||
} else { | } else { | ||||
Show All 40 Lines |