diff options
author | Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> | 2020-02-23 00:10:48 +0200 |
---|---|---|
committer | Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> | 2021-01-07 18:07:08 +0200 |
commit | 4e91b1e24d96e0cdccdd2a3ed034413f3ba6bae6 (patch) | |
tree | 01f7e01ff0f66e58d98b5f3805780f571570476c /src/mapport.cpp | |
parent | 8b50d1b5bb29b7d1ea0245ba75a8df3144e312dc (diff) | |
download | bitcoin-4e91b1e24d96e0cdccdd2a3ed034413f3ba6bae6.tar.xz |
net: Add flags for port mapping protocols
Diffstat (limited to 'src/mapport.cpp')
-rw-r--r-- | src/mapport.cpp | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/mapport.cpp b/src/mapport.cpp index ced2b773f3..5091e9f44d 100644 --- a/src/mapport.cpp +++ b/src/mapport.cpp @@ -25,6 +25,7 @@ static_assert(MINIUPNPC_API_VERSION >= 10, "miniUPnPc API version >= 10 assumed"); #endif +#include <atomic> #include <cassert> #include <chrono> #include <functional> @@ -34,6 +35,7 @@ static_assert(MINIUPNPC_API_VERSION >= 10, "miniUPnPc API version >= 10 assumed" #ifdef USE_UPNP static CThreadInterrupt g_upnp_interrupt; static std::thread g_upnp_thread; +static std::atomic_uint g_mapport_target_proto{MapPortProtoFlag::NONE}; using namespace std::chrono_literals; static constexpr auto PORT_MAPPING_REANNOUNCE_PERIOD{20min}; @@ -117,7 +119,7 @@ static void ThreadMapPort() } while (g_upnp_interrupt.sleep_for(PORT_MAPPING_RETRY_PERIOD)); } -void StartMapPort() +void StartThreadMapPort() { if (!g_upnp_thread.joinable()) { assert(!g_upnp_interrupt); @@ -125,6 +127,31 @@ void StartMapPort() } } +static void DispatchMapPort() +{ + if (g_mapport_target_proto == MapPortProtoFlag::UPNP) { + StartThreadMapPort(); + } else { + InterruptMapPort(); + StopMapPort(); + } +} + +static void MapPortProtoSetEnabled(MapPortProtoFlag proto, bool enabled) +{ + if (enabled) { + g_mapport_target_proto |= proto; + } else { + g_mapport_target_proto &= ~proto; + } +} + +void StartMapPort(bool use_upnp) +{ + MapPortProtoSetEnabled(MapPortProtoFlag::UPNP, use_upnp); + DispatchMapPort(); +} + void InterruptMapPort() { if(g_upnp_thread.joinable()) { @@ -141,7 +168,7 @@ void StopMapPort() } #else -void StartMapPort() +void StartMapPort(bool use_upnp) { // Intentionally left blank. } |