From 0b97b4294ca015195dce4297a44259f08131bf5e Mon Sep 17 00:00:00 2001 From: orignal Date: Sat, 8 Jun 2024 19:28:05 -0400 Subject: [PATCH] don't request relay tag for every session if we have enough introducers --- libi2pd/SSU2.h | 1 + libi2pd/SSU2Session.cpp | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/libi2pd/SSU2.h b/libi2pd/SSU2.h index 5a9eba44..aacdc076 100644 --- a/libi2pd/SSU2.h +++ b/libi2pd/SSU2.h @@ -72,6 +72,7 @@ namespace transport bool IsSupported (const boost::asio::ip::address& addr) const; uint16_t GetPort (bool v4) const; std::mt19937& GetRng () { return m_Rng; } + bool IsMaxNumIntroducers (bool v4) const { return (v4 ? m_Introducers.size () : m_IntroducersV6.size ()) >= SSU2_MAX_NUM_INTRODUCERS; } bool IsSyncClockFromPeers () const { return m_IsSyncClockFromPeers; }; void AdjustTimeOffset (int64_t offset, std::shared_ptr from); diff --git a/libi2pd/SSU2Session.cpp b/libi2pd/SSU2Session.cpp index 2c490e9b..2684b940 100644 --- a/libi2pd/SSU2Session.cpp +++ b/libi2pd/SSU2Session.cpp @@ -680,10 +680,14 @@ namespace transport size_t payloadSize = 7; if (GetRouterStatus () == eRouterStatusFirewalled && m_Address->IsIntroducer ()) { - // relay tag request - payload[payloadSize] = eSSU2BlkRelayTagRequest; - memset (payload + payloadSize + 1, 0, 2); // size = 0 - payloadSize += 3; + if (!m_Server.IsMaxNumIntroducers (m_RemoteEndpoint.address ().is_v4 ()) || + m_Server.GetRng ()() & 0x01) // request tag with probability 1/2 if we have enough introducers + { + // relay tag request + payload[payloadSize] = eSSU2BlkRelayTagRequest; + memset (payload + payloadSize + 1, 0, 2); // size = 0 + payloadSize += 3; + } } payloadSize += CreatePaddingBlock (payload + payloadSize, 40 - payloadSize, 1); // KDF for session request