From ed692ffba3767c9f2701350af2cf021867e40d3b Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 13 Feb 2015 10:18:42 -0500 Subject: [PATCH] make sure only one I2P tunnel per local prot --- ClientContext.cpp | 15 +++++++++------ ClientContext.h | 4 ++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/ClientContext.cpp b/ClientContext.cpp index 70493c14..2764722e 100644 --- a/ClientContext.cpp +++ b/ClientContext.cpp @@ -54,9 +54,10 @@ namespace client std::string ircKeys = i2p::util::config::GetArg("-irckeys", ""); if (ircKeys.length () > 0) localDestination = LoadLocalDestination (ircKeys, false); - auto ircTunnel = new I2PClientTunnel (ircDestination, i2p::util::config::GetArg("-ircport", 6668), localDestination); + auto ircPort = i2p::util::config::GetArg("-ircport", 6668); + auto ircTunnel = new I2PClientTunnel (ircDestination, ircPort, localDestination); ircTunnel->Start (); - m_ClientTunnels.push_back (std::unique_ptr(ircTunnel)); + m_ClientTunnels.insert (std::make_pair(ircPort, std::unique_ptr(ircTunnel))); LogPrint("IRC tunnel started"); } std::string eepKeys = i2p::util::config::GetArg("-eepkeys", ""); @@ -112,8 +113,8 @@ namespace client LogPrint("SOCKS Proxy stopped"); for (auto& it: m_ClientTunnels) { - it->Stop (); - LogPrint("I2P client tunnel stopped"); + it.second->Stop (); + LogPrint("I2P client tunnel on port ", it.first, " stopped"); } m_ClientTunnels.clear (); if (m_ServerTunnel) @@ -287,8 +288,10 @@ namespace client if (keys[i].length () > 0) localDestination = LoadLocalDestination (keys[i], false); auto clientTunnel = new I2PClientTunnel (destinations[i], ports[i], localDestination); - clientTunnel->Start (); - m_ClientTunnels.push_back (std::unique_ptr(clientTunnel)); + if (m_ClientTunnels.insert (std::make_pair (ports[i], std::unique_ptr(clientTunnel))).second) + clientTunnel->Start (); + else + LogPrint (eLogError, "I2P client tunnel with port ", ports[i], " already exists"); } LogPrint (eLogInfo, numClientTunnels, " I2P client tunnels created"); } diff --git a/ClientContext.h b/ClientContext.h index 94a7fe0e..68a0ae64 100644 --- a/ClientContext.h +++ b/ClientContext.h @@ -1,7 +1,7 @@ #ifndef CLIENT_CONTEXT_H__ #define CLIENT_CONTEXT_H__ -#include +#include #include #include #include "Destination.h" @@ -58,7 +58,7 @@ namespace client i2p::proxy::HTTPProxy * m_HttpProxy; i2p::proxy::SOCKSProxy * m_SocksProxy; - std::list > m_ClientTunnels; + std::map > m_ClientTunnels; // port->tunnel I2PServerTunnel * m_ServerTunnel; SAMBridge * m_SamBridge; BOBCommandChannel * m_BOBCommandChannel;