From e898e6bf825f8d94320f2012b6c7807cc3424a73 Mon Sep 17 00:00:00 2001 From: orignal Date: Wed, 14 Jan 2015 16:37:03 -0500 Subject: [PATCH] use RouterInfo request callback instead timeout --- Transports.cpp | 19 +++++++++---------- Transports.h | 4 ++-- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/Transports.cpp b/Transports.cpp index 7414bc1d..99d9808f 100644 --- a/Transports.cpp +++ b/Transports.cpp @@ -242,22 +242,22 @@ namespace transport else // otherwise request RI { LogPrint ("Router not found. Requested"); - i2p::data::netdb.RequestDestination (ident); - auto resendTimer = new boost::asio::deadline_timer (m_Service); - resendTimer->expires_from_now (boost::posix_time::seconds(5)); // 5 seconds - resendTimer->async_wait (boost::bind (&Transports::HandleResendTimer, - this, boost::asio::placeholders::error, resendTimer, ident)); + i2p::data::netdb.RequestDestination (ident, std::bind ( + &Transports::RequestComplete, this, std::placeholders::_1, ident)); } return true; } - - void Transports::HandleResendTimer (const boost::system::error_code& ecode, - boost::asio::deadline_timer * timer, const i2p::data::IdentHash& ident) + + void Transports::RequestComplete (std::shared_ptr r, const i2p::data::IdentHash& ident) + { + m_Service.post (std::bind (&Transports::HandleRequestComplete, this, r, ident)); + } + + void Transports::HandleRequestComplete (std::shared_ptr r, const i2p::data::IdentHash& ident) { auto it = m_Peers.find (ident); if (it != m_Peers.end ()) { - auto r = netdb.FindRouter (ident); if (r) { LogPrint ("Router found. Trying to connect"); @@ -270,7 +270,6 @@ namespace transport m_Peers.erase (it); } } - delete timer; } void Transports::CloseSession (std::shared_ptr router) diff --git a/Transports.h b/Transports.h index 5aa225f2..6bed164b 100644 --- a/Transports.h +++ b/Transports.h @@ -88,8 +88,8 @@ namespace transport private: void Run (); - void HandleResendTimer (const boost::system::error_code& ecode, boost::asio::deadline_timer * timer, - const i2p::data::IdentHash& ident); + void RequestComplete (std::shared_ptr r, const i2p::data::IdentHash& ident); + void HandleRequestComplete (std::shared_ptr r, const i2p::data::IdentHash& ident); void PostMessage (const i2p::data::IdentHash& ident, i2p::I2NPMessage * msg); void PostCloseSession (std::shared_ptr router); bool ConnectToPeer (const i2p::data::IdentHash& ident, Peer& peer);