From f43e86099826e447d763f21366e19ad39e58a1eb Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 5 Aug 2022 21:23:23 -0400 Subject: [PATCH] cleanup introducers if router is not longer firewalled --- libi2pd/RouterContext.cpp | 15 +++++++++++++++ libi2pd/RouterContext.h | 1 + libi2pd/SSU2.cpp | 2 ++ 3 files changed, 18 insertions(+) diff --git a/libi2pd/RouterContext.cpp b/libi2pd/RouterContext.cpp index 2095a465..0a7b8342 100644 --- a/libi2pd/RouterContext.cpp +++ b/libi2pd/RouterContext.cpp @@ -481,6 +481,21 @@ namespace i2p UpdateRouterInfo (); } + void RouterContext::ClearSSU2Introducers (bool v4) + { + bool updated = false; + auto& addresses = m_RouterInfo.GetAddresses (); + for (auto& addr : addresses) + if (addr->IsSSU2 () && ((v4 && addr->IsV4 ()) || (!v4 && addr->IsV6 ())) && + addr->ssu && !addr->ssu->introducers.empty ()) + { + addr->ssu->introducers.clear (); + updated = true; + } + if (updated) + UpdateRouterInfo (); + } + void RouterContext::SetFloodfill (bool floodfill) { m_IsFloodfill = floodfill; diff --git a/libi2pd/RouterContext.h b/libi2pd/RouterContext.h index 9e02b5d5..0c1acc7b 100644 --- a/libi2pd/RouterContext.h +++ b/libi2pd/RouterContext.h @@ -127,6 +127,7 @@ namespace garlic void RemoveIntroducer (const boost::asio::ip::udp::endpoint& e); bool AddSSU2Introducer (const i2p::data::RouterInfo::Introducer& introducer, bool v4); void RemoveSSU2Introducer (const i2p::data::IdentHash& h, bool v4); + void ClearSSU2Introducers (bool v4); bool IsUnreachable () const; void SetUnreachable (bool v4, bool v6); void SetUnreachableSSU2 (bool v4, bool v6); diff --git a/libi2pd/SSU2.cpp b/libi2pd/SSU2.cpp index 680cde63..ef076447 100644 --- a/libi2pd/SSU2.cpp +++ b/libi2pd/SSU2.cpp @@ -981,6 +981,7 @@ namespace transport if (i2p::context.GetStatus () != eRouterStatusFirewalled) { // we don't need introducers + i2p::context.ClearSSU2Introducers (true); m_Introducers.clear (); return; } @@ -1003,6 +1004,7 @@ namespace transport if (i2p::context.GetStatusV6 () != eRouterStatusFirewalled) { // we don't need introducers + i2p::context.ClearSSU2Introducers (false); m_IntroducersV6.clear (); return; }