let few first tunnel build messages go through before drop

This commit is contained in:
orignal
2026-02-04 14:36:46 -05:00
parent ca08b5848f
commit b0543dfe32
2 changed files with 22 additions and 5 deletions
+16 -3
View File
@@ -557,9 +557,13 @@ namespace i2p
case eI2NPShortTunnelBuild:
{
auto ts = i2p::util::GetMonotonicMilliseconds ();
if (!m_LastTunnelBuildMessageTimestamp || ts > m_LastTunnelBuildMessageTimestamp + TUNNEL_BUILD_MESSAGES_MIN_INTERVAL)
if (!m_LastTunnelBuildMessageTimestamp ||
ts > m_LastTunnelBuildMessageTimestamp + TUNNEL_BUILD_MESSAGES_MAX_INTERVAL ||
ts > m_LastTunnelBuildMessageTimestamp + TUNNEL_BUILD_MESSAGES_MIN_INTERVAL +
m_NumThrottledTunnelBuildMessages*TUNNEL_BUILD_MESSAGES_EXTRA_INTERVAL_PER_MESSAGE)
{
m_LastTunnelBuildMessageTimestamp = ts;
m_NumThrottledTunnelBuildMessages = 0;
if (m_NumDroppedTunnelBuildMessages > 0)
{
LogPrint (eLogWarning, "I2NP: ", m_NumDroppedTunnelBuildMessages, " tunnel build messages dropped");
@@ -567,8 +571,17 @@ namespace i2p
}
HandleI2NPMessage (msg);
}
else // drop TBM
m_NumDroppedTunnelBuildMessages++;
else
{
if (m_NumThrottledTunnelBuildMessages < MAX_NUM_THROTTLED_TUNNEL_BUILD_MESSAGES)
{
// let TBM go through
m_NumThrottledTunnelBuildMessages++;
HandleI2NPMessage (msg);
}
else // drop TBM
m_NumDroppedTunnelBuildMessages++;
}
break;
}
default:
+6 -2
View File
@@ -320,11 +320,15 @@ namespace tunnel
void HandleI2NPMessage (std::shared_ptr<I2NPMessage> msg);
const uint64_t TUNNEL_BUILD_MESSAGES_MIN_INTERVAL = 200; // in milliseconds
const uint64_t TUNNEL_BUILD_MESSAGES_MAX_INTERVAL = 3000; // in milliseconds
const uint64_t TUNNEL_BUILD_MESSAGES_EXTRA_INTERVAL_PER_MESSAGE = 50; // in milliseconds
const int MAX_NUM_THROTTLED_TUNNEL_BUILD_MESSAGES = 5;
class I2NPMessagesHandler
{
public:
I2NPMessagesHandler (): m_LastTunnelBuildMessageTimestamp (0), m_NumDroppedTunnelBuildMessages (0) {};
I2NPMessagesHandler (): m_LastTunnelBuildMessageTimestamp (0),
m_NumThrottledTunnelBuildMessages (0), m_NumDroppedTunnelBuildMessages (0) {};
~I2NPMessagesHandler ();
void PutNextMessage (std::shared_ptr<I2NPMessage>&& msg);
void Flush ();
@@ -333,7 +337,7 @@ namespace tunnel
std::list<std::shared_ptr<I2NPMessage> > m_TunnelMsgs, m_TunnelGatewayMsgs;
uint64_t m_LastTunnelBuildMessageTimestamp; // in milliseconds
int m_NumDroppedTunnelBuildMessages;
int m_NumThrottledTunnelBuildMessages, m_NumDroppedTunnelBuildMessages;
};
}