mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-03-07 06:09:42 +00:00
cleanup expired peer tests
This commit is contained in:
32
SSU.cpp
32
SSU.cpp
@@ -13,7 +13,7 @@ namespace transport
|
|||||||
m_Work (m_Service), m_WorkV6 (m_ServiceV6), m_ReceiversWork (m_ReceiversService),
|
m_Work (m_Service), m_WorkV6 (m_ServiceV6), m_ReceiversWork (m_ReceiversService),
|
||||||
m_Endpoint (boost::asio::ip::udp::v4 (), port), m_EndpointV6 (boost::asio::ip::udp::v6 (), port),
|
m_Endpoint (boost::asio::ip::udp::v4 (), port), m_EndpointV6 (boost::asio::ip::udp::v6 (), port),
|
||||||
m_Socket (m_ReceiversService, m_Endpoint), m_SocketV6 (m_ReceiversService),
|
m_Socket (m_ReceiversService, m_Endpoint), m_SocketV6 (m_ReceiversService),
|
||||||
m_IntroducersUpdateTimer (m_Service)
|
m_IntroducersUpdateTimer (m_Service), m_PeerTestsCleanupTimer (m_Service)
|
||||||
{
|
{
|
||||||
m_Socket.set_option (boost::asio::socket_base::receive_buffer_size (65535));
|
m_Socket.set_option (boost::asio::socket_base::receive_buffer_size (65535));
|
||||||
m_Socket.set_option (boost::asio::socket_base::send_buffer_size (65535));
|
m_Socket.set_option (boost::asio::socket_base::send_buffer_size (65535));
|
||||||
@@ -44,6 +44,7 @@ namespace transport
|
|||||||
}
|
}
|
||||||
if (i2p::context.IsUnreachable ())
|
if (i2p::context.IsUnreachable ())
|
||||||
ScheduleIntroducersUpdateTimer ();
|
ScheduleIntroducersUpdateTimer ();
|
||||||
|
SchedulePeerTestsCleanupTimer ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSUServer::Stop ()
|
void SSUServer::Stop ()
|
||||||
@@ -488,6 +489,35 @@ namespace transport
|
|||||||
{
|
{
|
||||||
m_PeerTests.erase (nonce);
|
m_PeerTests.erase (nonce);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SSUServer::SchedulePeerTestsCleanupTimer ()
|
||||||
|
{
|
||||||
|
m_PeerTestsCleanupTimer.expires_from_now (boost::posix_time::seconds(SSU_PEER_TEST_TIMEOUT));
|
||||||
|
m_PeerTestsCleanupTimer.async_wait (std::bind (&SSUServer::HandlePeerTestsCleanupTimer,
|
||||||
|
this, std::placeholders::_1));
|
||||||
|
}
|
||||||
|
|
||||||
|
void SSUServer::HandlePeerTestsCleanupTimer (const boost::system::error_code& ecode)
|
||||||
|
{
|
||||||
|
if (ecode != boost::asio::error::operation_aborted)
|
||||||
|
{
|
||||||
|
int numDeleted = 0;
|
||||||
|
uint64_t ts = i2p::util::GetMillisecondsSinceEpoch ();
|
||||||
|
for (auto it = m_PeerTests.begin (); it != m_PeerTests.end ();)
|
||||||
|
{
|
||||||
|
if (ts > it->second.creationTime + SSU_PEER_TEST_TIMEOUT*1000LL)
|
||||||
|
{
|
||||||
|
numDeleted++;
|
||||||
|
it = m_PeerTests.erase (it);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
it++;
|
||||||
|
}
|
||||||
|
if (numDeleted > 0)
|
||||||
|
LogPrint (eLogInfo, numDeleted, " peer tests have been expired");
|
||||||
|
SchedulePeerTestsCleanupTimer ();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
6
SSU.h
6
SSU.h
@@ -21,6 +21,7 @@ namespace i2p
|
|||||||
namespace transport
|
namespace transport
|
||||||
{
|
{
|
||||||
const int SSU_KEEP_ALIVE_INTERVAL = 30; // 30 seconds
|
const int SSU_KEEP_ALIVE_INTERVAL = 30; // 30 seconds
|
||||||
|
const int SSU_PEER_TEST_TIMEOUT = 60; // 60 seconds
|
||||||
const int SSU_TO_INTRODUCER_SESSION_DURATION = 3600; // 1 hour
|
const int SSU_TO_INTRODUCER_SESSION_DURATION = 3600; // 1 hour
|
||||||
const size_t SSU_MAX_NUM_INTRODUCERS = 3;
|
const size_t SSU_MAX_NUM_INTRODUCERS = 3;
|
||||||
|
|
||||||
@@ -76,6 +77,9 @@ namespace transport
|
|||||||
void ScheduleIntroducersUpdateTimer ();
|
void ScheduleIntroducersUpdateTimer ();
|
||||||
void HandleIntroducersUpdateTimer (const boost::system::error_code& ecode);
|
void HandleIntroducersUpdateTimer (const boost::system::error_code& ecode);
|
||||||
|
|
||||||
|
void SchedulePeerTestsCleanupTimer ();
|
||||||
|
void HandlePeerTestsCleanupTimer (const boost::system::error_code& ecode);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
struct PeerTest
|
struct PeerTest
|
||||||
@@ -90,7 +94,7 @@ namespace transport
|
|||||||
boost::asio::io_service::work m_Work, m_WorkV6, m_ReceiversWork;
|
boost::asio::io_service::work m_Work, m_WorkV6, m_ReceiversWork;
|
||||||
boost::asio::ip::udp::endpoint m_Endpoint, m_EndpointV6;
|
boost::asio::ip::udp::endpoint m_Endpoint, m_EndpointV6;
|
||||||
boost::asio::ip::udp::socket m_Socket, m_SocketV6;
|
boost::asio::ip::udp::socket m_Socket, m_SocketV6;
|
||||||
boost::asio::deadline_timer m_IntroducersUpdateTimer;
|
boost::asio::deadline_timer m_IntroducersUpdateTimer, m_PeerTestsCleanupTimer;
|
||||||
std::list<boost::asio::ip::udp::endpoint> m_Introducers; // introducers we are connected to
|
std::list<boost::asio::ip::udp::endpoint> m_Introducers; // introducers we are connected to
|
||||||
std::mutex m_SessionsMutex;
|
std::mutex m_SessionsMutex;
|
||||||
std::map<boost::asio::ip::udp::endpoint, std::shared_ptr<SSUSession> > m_Sessions;
|
std::map<boost::asio::ip::udp::endpoint, std::shared_ptr<SSUSession> > m_Sessions;
|
||||||
|
|||||||
Reference in New Issue
Block a user