diff --git a/TunnelPool.cpp b/TunnelPool.cpp index 82c66fe6..cc7b4eb0 100644 --- a/TunnelPool.cpp +++ b/TunnelPool.cpp @@ -66,8 +66,11 @@ namespace tunnel void TunnelPool::TunnelCreated (std::shared_ptr createdTunnel) { if (!m_IsActive) return; - std::unique_lock l(m_OutboundTunnelsMutex); - m_OutboundTunnels.insert (createdTunnel); + { + std::unique_lock l(m_OutboundTunnelsMutex); + m_OutboundTunnels.insert (createdTunnel); + } + CreatePairedInboundTunnel (createdTunnel); } void TunnelPool::TunnelExpired (std::shared_ptr expiredTunnel) @@ -389,6 +392,13 @@ namespace tunnel } else LogPrint ("Can't re-create outbound tunnel. No inbound tunnels found"); - } + } + + void TunnelPool::CreatePairedInboundTunnel (std::shared_ptr outboundTunnel) + { + LogPrint (eLogInfo, "Creating paired inbound tunnel..."); + auto tunnel = tunnels.CreateTunnel (outboundTunnel->GetTunnelConfig ()->Invert (), outboundTunnel); + tunnel->SetTunnelPool (shared_from_this ()); + } } } diff --git a/TunnelPool.h b/TunnelPool.h index 407558f7..5f2dd5ce 100644 --- a/TunnelPool.h +++ b/TunnelPool.h @@ -57,6 +57,7 @@ namespace tunnel void CreateInboundTunnel (); void CreateOutboundTunnel (); + void CreatePairedInboundTunnel (std::shared_ptr outboundTunnel); template typename TTunnels::value_type GetNextTunnel (TTunnels& tunnels, typename TTunnels::value_type excluded) const; std::shared_ptr SelectNextHop (std::shared_ptr prevHop) const;