2525
2626static CThreadInterrupt g_mapport_interrupt;
2727static std::thread g_mapport_thread;
28- static std::atomic_uint g_mapport_enabled_protos{MapPortProtoFlag::NONE };
29- static std::atomic<MapPortProtoFlag> g_mapport_current_proto{MapPortProtoFlag::NONE };
28+ static std::atomic_bool g_mapport_enabled{ false };
29+ static std::atomic_bool g_mapport_current{ false };
3030
3131using namespace std ::chrono_literals;
3232static constexpr auto PORT_MAPPING_REANNOUNCE_PERIOD{20min};
@@ -129,14 +129,14 @@ static void ThreadMapPort()
129129 do {
130130 ok = false ;
131131
132- if (g_mapport_enabled_protos & MapPortProtoFlag::PCP ) {
133- g_mapport_current_proto = MapPortProtoFlag::PCP ;
132+ if (g_mapport_enabled ) {
133+ g_mapport_current = true ;
134134 ok = ProcessPCP ();
135135 if (ok) continue ;
136136 }
137137
138- g_mapport_current_proto = MapPortProtoFlag::NONE ;
139- if (g_mapport_enabled_protos == MapPortProtoFlag::NONE ) {
138+ g_mapport_current = false ;
139+ if (!g_mapport_enabled ) {
140140 return ;
141141 }
142142
@@ -153,44 +153,28 @@ void StartThreadMapPort()
153153
154154static void DispatchMapPort ()
155155{
156- if (g_mapport_current_proto == MapPortProtoFlag::NONE && g_mapport_enabled_protos == MapPortProtoFlag::NONE) {
157- return ;
158- }
159-
160- if (g_mapport_current_proto == MapPortProtoFlag::NONE && g_mapport_enabled_protos != MapPortProtoFlag::NONE) {
156+ if (!g_mapport_current && g_mapport_enabled) {
161157 StartThreadMapPort ();
162- return ;
163- }
164-
165- if (g_mapport_current_proto != MapPortProtoFlag::NONE && g_mapport_enabled_protos == MapPortProtoFlag::NONE) {
158+ } else if (g_mapport_current && !g_mapport_enabled) {
166159 InterruptMapPort ();
167160 StopMapPort ();
168- return ;
169- }
170-
171- if (g_mapport_enabled_protos & g_mapport_current_proto) {
172- return ;
173161 }
174162}
175163
176- static void MapPortProtoSetEnabled (MapPortProtoFlag proto, bool enabled)
164+ static void MapPortProtoSetEnabled (bool enabled)
177165{
178- if (enabled) {
179- g_mapport_enabled_protos |= proto;
180- } else {
181- g_mapport_enabled_protos &= ~proto;
182- }
166+ g_mapport_enabled = enabled;
183167}
184168
185169void StartMapPort (bool use_pcp)
186170{
187- MapPortProtoSetEnabled (MapPortProtoFlag::PCP, use_pcp);
171+ MapPortProtoSetEnabled (use_pcp);
188172 DispatchMapPort ();
189173}
190174
191175void InterruptMapPort ()
192176{
193- g_mapport_enabled_protos = MapPortProtoFlag::NONE ;
177+ g_mapport_enabled = false ;
194178 if (g_mapport_thread.joinable ()) {
195179 g_mapport_interrupt ();
196180 }
0 commit comments