Add a portMappingEnabled flag to local.conf to allow uPnP/NAT-PMP to be disabled.

This commit is contained in:
Adam Ierymenko 2017-01-19 15:57:50 -08:00
parent 56e5b34934
commit 89d74cd293

View File

@ -344,6 +344,7 @@ public:
Mutex _termReason_m; Mutex _termReason_m;
// uPnP/NAT-PMP port mapper if enabled // uPnP/NAT-PMP port mapper if enabled
bool _portMappingEnabled; // local.conf settings
#ifdef ZT_USE_MINIUPNPC #ifdef ZT_USE_MINIUPNPC
PortMapper *_portMapper; PortMapper *_portMapper;
#endif #endif
@ -379,6 +380,7 @@ public:
,_nextBackgroundTaskDeadline(0) ,_nextBackgroundTaskDeadline(0)
,_tcpFallbackTunnel((TcpConnection *)0) ,_tcpFallbackTunnel((TcpConnection *)0)
,_termReason(ONE_STILL_RUNNING) ,_termReason(ONE_STILL_RUNNING)
,_portMappingEnabled(true)
#ifdef ZT_USE_MINIUPNPC #ifdef ZT_USE_MINIUPNPC
,_portMapper((PortMapper *)0) ,_portMapper((PortMapper *)0)
#endif #endif
@ -598,6 +600,7 @@ public:
} }
#ifdef ZT_USE_MINIUPNPC #ifdef ZT_USE_MINIUPNPC
if (_portMappingEnabled) {
// If we're running uPnP/NAT-PMP, bind a *third* port for that. We can't // If we're running uPnP/NAT-PMP, bind a *third* port for that. We can't
// use the other two ports for that because some NATs do really funky // use the other two ports for that because some NATs do really funky
// stuff with ports that are explicitly mapped that breaks things. // stuff with ports that are explicitly mapped that breaks things.
@ -619,6 +622,7 @@ public:
_portMapper = new PortMapper(_ports[2],uniqueName); _portMapper = new PortMapper(_ports[2],uniqueName);
} }
} }
}
#endif #endif
// Populate ports in big-endian format for quick compare // Populate ports in big-endian format for quick compare
@ -983,6 +987,8 @@ public:
_interfacePrefixBlacklist.clear(); _interfacePrefixBlacklist.clear();
json &settings = _localConfig["settings"]; json &settings = _localConfig["settings"];
if (settings.is_object()) { if (settings.is_object()) {
_portMappingEnabled = OSUtils::jsonBool(settings["portMappingEnabled"],true);
const std::string rp(OSUtils::jsonString(settings["relayPolicy"],"")); const std::string rp(OSUtils::jsonString(settings["relayPolicy"],""));
if ((rp == "always")||(rp == "ALWAYS")) if ((rp == "always")||(rp == "ALWAYS"))
_node->setRelayPolicy(ZT_RELAY_POLICY_ALWAYS); _node->setRelayPolicy(ZT_RELAY_POLICY_ALWAYS);