From b47d7aceaad418c64e8ef5935804da8bfa9e1a98 Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 14 Mar 2014 20:51:51 -0400 Subject: [PATCH] manage tunnel pools --- HTTPServer.cpp | 13 ++----------- Tunnel.cpp | 18 +++++++++++++----- Tunnel.h | 3 ++- TunnelPool.cpp | 4 ++-- TunnelPool.h | 4 ---- 5 files changed, 19 insertions(+), 23 deletions(-) diff --git a/HTTPServer.cpp b/HTTPServer.cpp index b1f03e86..c7d1fcaf 100644 --- a/HTTPServer.cpp +++ b/HTTPServer.cpp @@ -145,19 +145,10 @@ namespace util for (auto it: i2p::tunnel::tunnels.GetInboundTunnels ()) { it.second->GetTunnelConfig ()->Print (s); + if (it.second->GetTunnelPool ()) + s << " " << "Pool"; s << " " << (int)it.second->GetNumReceivedBytes () << "
"; } - - s << "

Tunnel pools

"; - for (auto it: i2p::tunnel::tunnels.GetTunnelPools ()) - { - for (auto it1: it->GetInboundTunnels ()) - { - it1->GetTunnelConfig ()->Print (s); - s << " " << (int)it1->GetNumReceivedBytes () << "
"; - } - s << "
"; - } s << "

Transit tunnels

"; for (auto it: i2p::tunnel::tunnels.GetTransitTunnels ()) diff --git a/Tunnel.cpp b/Tunnel.cpp index 8c58f8ae..d0a2734f 100644 --- a/Tunnel.cpp +++ b/Tunnel.cpp @@ -273,9 +273,17 @@ namespace tunnel return tunnel;*/ } - void Tunnels::CreateTunnelPool (i2p::data::LocalDestination * localDestination) + TunnelPool * Tunnels::CreateTunnelPool (i2p::data::LocalDestination * localDestination) { - m_Pools.push_back (new TunnelPool (localDestination)); + auto pool = new TunnelPool (localDestination); + m_Pools.push_back (pool); + return pool; + } + + void Tunnels::DeleteTunnelPool (TunnelPool * pool) + { + m_Pools.remove (pool); + delete pool; } void Tunnels::AddTransitTunnel (TransitTunnel * tunnel) @@ -441,7 +449,7 @@ namespace tunnel return; } - if (m_InboundTunnels.size () < 10) + if (m_InboundTunnels.size () < 15) // TODO: store exploratory tunnels explicitly { // trying to create one more inbound tunnel if (m_OutboundTunnels.empty () || m_InboundTunnels.size () < 3) @@ -513,10 +521,10 @@ namespace tunnel void Tunnels::AddInboundTunnel (InboundTunnel * newTunnel) { + m_InboundTunnels[newTunnel->GetTunnelID ()] = newTunnel; auto pool = newTunnel->GetTunnelPool (); if (!pool) - { - m_InboundTunnels[newTunnel->GetTunnelID ()] = newTunnel; + { // build symmetric outbound tunnel CreateTunnel (newTunnel->GetTunnelConfig ()->Invert (), GetNextOutboundTunnel ()); } diff --git a/Tunnel.h b/Tunnel.h index 6a00aa0e..7d761453 100644 --- a/Tunnel.h +++ b/Tunnel.h @@ -120,7 +120,8 @@ namespace tunnel void PostTunnelData (I2NPMessage * msg); template TTunnel * CreateTunnel (TunnelConfig * config, OutboundTunnel * outboundTunnel = 0); - void CreateTunnelPool (i2p::data::LocalDestination * localDestination); + TunnelPool * CreateTunnelPool (i2p::data::LocalDestination * localDestination); + void DeleteTunnelPool (TunnelPool * pool); OutboundTunnel * CreateOneHopOutboundTestTunnel (InboundTunnel * replyTunnel); InboundTunnel * CreateOneHopInboundTestTunnel (OutboundTunnel * outboundTunnel = 0); diff --git a/TunnelPool.cpp b/TunnelPool.cpp index 8860c4b8..3bdb55ab 100644 --- a/TunnelPool.cpp +++ b/TunnelPool.cpp @@ -15,7 +15,7 @@ namespace tunnel TunnelPool::~TunnelPool () { for (auto it: m_InboundTunnels) - delete it; + it->SetTunnelPool (nullptr); } void TunnelPool::TunnelCreated (InboundTunnel * createdTunnel) @@ -55,7 +55,7 @@ namespace tunnel i2p::data::netdb.GetRandomRouter (firstHop) }), outboundTunnel); - tunnel->SetTunnelPool (this); + tunnel->SetTunnelPool (this); } void TunnelPool::ManageTunnels () diff --git a/TunnelPool.h b/TunnelPool.h index e6017e64..a6af0661 100644 --- a/TunnelPool.h +++ b/TunnelPool.h @@ -38,10 +38,6 @@ namespace tunnel int m_NumTunnels; std::set m_InboundTunnels; // recent tunnel appears first - public: - - // for HTTP only - const decltype(m_InboundTunnels)& GetInboundTunnels () const { return m_InboundTunnels; }; }; } }