diff --git a/SSU.cpp b/SSU.cpp index d83ec7ad..137a2f99 100644 --- a/SSU.cpp +++ b/SSU.cpp @@ -23,7 +23,8 @@ namespace ssu m_NumSentBytes (0), m_NumReceivedBytes (0) { m_DHKeysPair = i2p::transports.GetNextDHKeysPair (); - ScheduleTermination (); + if (!router) // incoming session + ScheduleConnectTimer (); } SSUSession::~SSUSession () @@ -584,13 +585,19 @@ namespace ssu if (m_State == eSessionStateUnknown) { // set connect timer - m_Timer.expires_from_now (boost::posix_time::seconds(SSU_CONNECT_TIMEOUT)); - m_Timer.async_wait (boost::bind (&SSUSession::HandleConnectTimer, - this, boost::asio::placeholders::error)); + ScheduleConnectTimer (); SendSessionRequest (); } } + void SSUSession::ScheduleConnectTimer () + { + m_Timer.cancel (); + m_Timer.expires_from_now (boost::posix_time::seconds(SSU_CONNECT_TIMEOUT)); + m_Timer.async_wait (boost::bind (&SSUSession::HandleConnectTimer, + this, boost::asio::placeholders::error)); +} + void SSUSession::HandleConnectTimer (const boost::system::error_code& ecode) { if (!ecode) diff --git a/SSU.h b/SSU.h index d1e56c72..aacbde8b 100644 --- a/SSU.h +++ b/SSU.h @@ -97,6 +97,7 @@ namespace ssu void ProcessRelayIntro (uint8_t * buf, size_t len); void Established (); void Failed (); + void ScheduleConnectTimer (); void HandleConnectTimer (const boost::system::error_code& ecode); void ProcessPeerTest (uint8_t * buf, size_t len, const boost::asio::ip::udp::endpoint& senderEndpoint); void SendPeerTest (uint32_t nonce, uint32_t address, uint16_t port, uint8_t * introKey, bool toAddress = true);