From ca51567eba5657a235d007115456f04f8a1cee0d Mon Sep 17 00:00:00 2001 From: orignal Date: Wed, 25 Dec 2013 12:19:46 -0500 Subject: [PATCH] better exploratory --- NetDb.cpp | 20 ++++++++++++-------- NetDb.h | 3 +++ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/NetDb.cpp b/NetDb.cpp index 79cd903a..3f05dd7d 100644 --- a/NetDb.cpp +++ b/NetDb.cpp @@ -270,8 +270,8 @@ namespace data if (num > 0) { bool isExploratory = !memcmp (m_Exploratory, buf, 32) && m_LastFloodfill; - i2p::tunnel::OutboundTunnel * outbound = i2p::tunnel::tunnels.GetNextOutboundTunnel (); - i2p::tunnel::InboundTunnel * inbound = i2p::tunnel::tunnels.GetNextInboundTunnel (); + i2p::tunnel::OutboundTunnel * outbound = isExploratory ? m_LastOutboundTunnel : i2p::tunnel::tunnels.GetNextOutboundTunnel (); + i2p::tunnel::InboundTunnel * inbound = isExploratory ? m_LastInboundTunnel : i2p::tunnel::tunnels.GetNextInboundTunnel (); for (int i = 0; i < num; i++) { @@ -327,9 +327,9 @@ namespace data void NetDb::Explore () { - i2p::tunnel::OutboundTunnel * outbound = i2p::tunnel::tunnels.GetNextOutboundTunnel (); - i2p::tunnel::InboundTunnel * inbound = i2p::tunnel::tunnels.GetNextInboundTunnel (); - if (outbound && inbound) + m_LastOutboundTunnel = i2p::tunnel::tunnels.GetNextOutboundTunnel (); + m_LastInboundTunnel = i2p::tunnel::tunnels.GetNextInboundTunnel (); + if (m_LastOutboundTunnel && m_LastInboundTunnel) { m_LastFloodfill = GetRandomNTCPRouter (true); if (m_LastFloodfill) @@ -337,9 +337,13 @@ namespace data LogPrint ("Exploring new routers ..."); CryptoPP::RandomNumberGenerator& rnd = i2p::context.GetRandomNumberGenerator (); rnd.GenerateBlock (m_Exploratory, 32); - I2NPMessage * msg = i2p::CreateDatabaseLookupMsg (m_Exploratory, inbound->GetNextIdentHash (), - inbound->GetNextTunnelID (), true); - outbound->SendTunnelDataMsg (m_LastFloodfill->GetIdentHash (), 0, msg); + + m_LastOutboundTunnel->GetTunnelGateway ().PutTunnelDataMsg (m_LastFloodfill->GetIdentHash (), 0, + CreateDatabaseStoreMsg ()); // tell floodfill about us + m_LastOutboundTunnel->GetTunnelGateway ().PutTunnelDataMsg (m_LastFloodfill->GetIdentHash (), 0, + i2p::CreateDatabaseLookupMsg (m_Exploratory, m_LastInboundTunnel->GetNextIdentHash (), + m_LastInboundTunnel->GetNextTunnelID (), true)); // explore + m_LastOutboundTunnel->GetTunnelGateway ().SendBuffer (); } } } diff --git a/NetDb.h b/NetDb.h index 4d9ebbb1..3f644c7d 100644 --- a/NetDb.h +++ b/NetDb.h @@ -9,6 +9,7 @@ #include "I2NPProtocol.h" #include "RouterInfo.h" #include "LeaseSet.h" +#include "Tunnel.h" namespace i2p { @@ -57,6 +58,8 @@ namespace data std::thread * m_Thread; uint8_t m_Exploratory[32]; const RouterInfo * m_LastFloodfill; + i2p::tunnel::OutboundTunnel * m_LastOutboundTunnel; + i2p::tunnel::InboundTunnel * m_LastInboundTunnel; i2p::util::Queue m_Queue; // of I2NPDatabaseStoreMsg };