void TunnelPool::CreateOutboundTunnel () { InboundTunnel * inboundTunnel = m_InboundTunnels.size () > 0 ? *m_InboundTunnels.begin () : tunnels.GetNextInboundTunnel (); if (inboundTunnel) { LogPrint ("Creating destination outbound tunnel..."); auto firstHop = i2p::data::netdb.GetRandomRouter (&i2p::context.GetRouterInfo ()); auto secondHop = i2p::data::netdb.GetRandomRouter (firstHop); auto * tunnel = tunnels.CreateTunnel<OutboundTunnel> ( new TunnelConfig (std::vector<const i2p::data::RouterInfo *> { firstHop, secondHop }, inboundTunnel->GetTunnelConfig ())); tunnel->SetTunnelPool (this); } }
void TunnelPool::CreateOutboundTunnel () { InboundTunnel * inboundTunnel = m_InboundTunnels.size () > 0 ? *m_InboundTunnels.begin () : tunnels.GetNextInboundTunnel (); if (inboundTunnel) { LogPrint ("Creating destination outbound tunnel..."); const i2p::data::RouterInfo * prevHop = &i2p::context.GetRouterInfo (); std::vector<const i2p::data::RouterInfo *> hops; for (int i = 0; i < m_NumHops; i++) { auto hop = i2p::data::netdb.GetRandomRouter (prevHop); prevHop = hop; hops.push_back (hop); } auto * tunnel = tunnels.CreateTunnel<OutboundTunnel> ( new TunnelConfig (hops, inboundTunnel->GetTunnelConfig ())); tunnel->SetTunnelPool (this); } }