Browse Source

fixed crash if no routers available

pull/177/head
orignal 9 years ago
parent
commit
321dd252ea
  1. 20
      Tunnel.cpp
  2. 12
      TunnelPool.cpp

20
Tunnel.cpp

@ -555,14 +555,13 @@ namespace tunnel @@ -555,14 +555,13 @@ namespace tunnel
{
// trying to create one more oubound tunnel
auto inboundTunnel = GetNextInboundTunnel ();
if (!inboundTunnel) return;
auto router = i2p::data::netdb.GetRandomRouter ();
if (!inboundTunnel || !router) return;
LogPrint ("Creating one hop outbound tunnel...");
CreateTunnel<OutboundTunnel> (
new TunnelConfig (std::vector<std::shared_ptr<const i2p::data::RouterInfo> >
{
i2p::data::netdb.GetRandomRouter ()
},
inboundTunnel->GetTunnelConfig ()));
new TunnelConfig (std::vector<std::shared_ptr<const i2p::data::RouterInfo> > { router },
inboundTunnel->GetTunnelConfig ())
);
}
}
@ -603,13 +602,12 @@ namespace tunnel @@ -603,13 +602,12 @@ namespace tunnel
if (m_OutboundTunnels.empty () || m_InboundTunnels.size () < 5)
{
// trying to create one more inbound tunnel
// trying to create one more inbound tunnel
auto router = i2p::data::netdb.GetRandomRouter ();
LogPrint ("Creating one hop inbound tunnel...");
CreateTunnel<InboundTunnel> (
new TunnelConfig (std::vector<std::shared_ptr<const i2p::data::RouterInfo> >
{
i2p::data::netdb.GetRandomRouter ()
}));
new TunnelConfig (std::vector<std::shared_ptr<const i2p::data::RouterInfo> > { router })
);
}
}

12
TunnelPool.cpp

@ -297,6 +297,11 @@ namespace tunnel @@ -297,6 +297,11 @@ namespace tunnel
for (int i = 0; i < numHops; i++)
{
auto hop = SelectNextHop (prevHop);
if (!hop)
{
LogPrint (eLogError, "Can't select next hop for inbound tunnel");
return;
}
prevHop = hop;
hops.push_back (hop);
}
@ -329,6 +334,11 @@ namespace tunnel @@ -329,6 +334,11 @@ namespace tunnel
for (int i = 0; i < m_NumOutboundHops; i++)
{
auto hop = SelectNextHop (prevHop);
if (!hop)
{
LogPrint (eLogError, "Can't select next hop for outbound tunnel");
return;
}
prevHop = hop;
hops.push_back (hop);
}
@ -338,7 +348,7 @@ namespace tunnel @@ -338,7 +348,7 @@ namespace tunnel
tunnel->SetTunnelPool (shared_from_this ());
}
else
LogPrint ("Can't create outbound tunnel. No inbound tunnels found");
LogPrint (eLogError, "Can't create outbound tunnel. No inbound tunnels found");
}
void TunnelPool::RecreateOutboundTunnel (std::shared_ptr<OutboundTunnel> tunnel)

Loading…
Cancel
Save