1
0
mirror of https://github.com/PurpleI2P/i2pd.git synced 2025-01-24 22:44:15 +00:00

limit received SSU2 packets queue

This commit is contained in:
orignal 2024-11-10 11:32:46 -05:00
parent 0a08383471
commit e574354896
2 changed files with 12 additions and 4 deletions

View File

@ -457,13 +457,20 @@ namespace transport
void SSU2Server::InsertToReceivedPacketsQueue (std::list<Packet *>& packets) void SSU2Server::InsertToReceivedPacketsQueue (std::list<Packet *>& packets)
{ {
if (packets.empty ()) return; if (packets.empty ()) return;
bool empty = false; size_t queueSize = 0;
{ {
std::lock_guard<std::mutex> l(m_ReceivedPacketsQueueMutex); std::lock_guard<std::mutex> l(m_ReceivedPacketsQueueMutex);
empty = m_ReceivedPacketsQueue.empty (); queueSize = m_ReceivedPacketsQueue.size ();
m_ReceivedPacketsQueue.splice (m_ReceivedPacketsQueue.end (), packets); if (queueSize < SSU2_MAX_RECEIVED_QUEUE_SIZE)
m_ReceivedPacketsQueue.splice (m_ReceivedPacketsQueue.end (), packets);
else
{
LogPrint (eLogError, "SSU2: Received queue size ", queueSize, " exceeds max size", SSU2_MAX_RECEIVED_QUEUE_SIZE);
m_PacketsPool.ReleaseMt (packets);
queueSize = 0; // invoke processing just in case
}
} }
if (empty) if (!queueSize)
GetService ().post([this]() { HandleReceivedPacketsQueue (); }); GetService ().post([this]() { HandleReceivedPacketsQueue (); });
} }

View File

@ -37,6 +37,7 @@ namespace transport
const uint64_t SSU2_SOCKET_MAX_BUFFER_SIZE = 4 * 1024 * 1024; const uint64_t SSU2_SOCKET_MAX_BUFFER_SIZE = 4 * 1024 * 1024;
const size_t SSU2_MAX_NUM_INTRODUCERS = 3; const size_t SSU2_MAX_NUM_INTRODUCERS = 3;
const size_t SSU2_MIN_RECEIVED_PACKET_SIZE = 40; // 16 byte short header + 8 byte minimum payload + 16 byte MAC const size_t SSU2_MIN_RECEIVED_PACKET_SIZE = 40; // 16 byte short header + 8 byte minimum payload + 16 byte MAC
const size_t SSU2_MAX_RECEIVED_QUEUE_SIZE = 2500; // in packets
const int SSU2_TO_INTRODUCER_SESSION_DURATION = 3600; // 1 hour const int SSU2_TO_INTRODUCER_SESSION_DURATION = 3600; // 1 hour
const int SSU2_TO_INTRODUCER_SESSION_EXPIRATION = 4800; // 80 minutes const int SSU2_TO_INTRODUCER_SESSION_EXPIRATION = 4800; // 80 minutes
const int SSU2_KEEP_ALIVE_INTERVAL = 15; // in seconds const int SSU2_KEEP_ALIVE_INTERVAL = 15; // in seconds