mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2026-08-28 03:04:30 +00:00
let few first tunnel build messages go through before drop
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user