wait for 10 seconds before delete a pending tunnel

pull/93/head
orignal 10 years ago
parent 9655891e4b
commit fb15c72be2

@ -310,13 +310,11 @@ namespace i2p
if (tunnel->HandleTunnelBuildResponse (buf, len))
{
LogPrint ("Inbound tunnel ", tunnel->GetTunnelID (), " has been created");
tunnel->SetState (i2p::tunnel::eTunnelStateEstablished);
i2p::tunnel::tunnels.AddInboundTunnel (static_cast<i2p::tunnel::InboundTunnel *>(tunnel));
}
else
{
LogPrint ("Inbound tunnel ", tunnel->GetTunnelID (), " has been declined");
delete tunnel;
}
}
else
{
@ -368,14 +366,11 @@ namespace i2p
if (tunnel->HandleTunnelBuildResponse (buf, len))
{
LogPrint ("Outbound tunnel ", tunnel->GetTunnelID (), " has been created");
tunnel->SetState (i2p::tunnel::eTunnelStateEstablished);
i2p::tunnel::tunnels.AddOutboundTunnel (static_cast<i2p::tunnel::OutboundTunnel *>(tunnel));
}
else
{
LogPrint ("Outbound tunnel ", tunnel->GetTunnelID (), " has been declined");
i2p::transports.CloseSession (tunnel->GetTunnelConfig ()->GetFirstHop ()->router);
delete tunnel;
}
}
else
LogPrint ("Pending tunnel for message ", replyMsgID, " not found");

@ -217,9 +217,9 @@ namespace tunnel
delete it.second;
m_TransitTunnels.clear ();
for (auto& it : m_PendingTunnels)
/*for (auto& it : m_PendingTunnels)
delete it.second;
m_PendingTunnels.clear ();
m_PendingTunnels.clear ();*/
for (auto& it: m_Pools)
delete it.second;
@ -246,11 +246,7 @@ namespace tunnel
{
auto it = m_PendingTunnels.find(replyMsgID);
if (it != m_PendingTunnels.end ())
{
Tunnel * t = it->second;
m_PendingTunnels.erase (it);
return t;
}
return it->second;
return nullptr;
}
@ -372,33 +368,29 @@ namespace tunnel
void Tunnels::ManageTunnels ()
{
// check pending tunnel. if something is still there, wipe it out
// because it wouldn't be responded anyway
for (auto& it : m_PendingTunnels)
// check pending tunnel. delete non-successive
uint64_t ts = i2p::util::GetSecondsSinceEpoch ();
for (auto it = m_PendingTunnels.begin (); it != m_PendingTunnels.end ();)
{
LogPrint ("Pending tunnel build request ", it.first, " has not been responded. Deleted");
if (it.second->GetTunnelConfig ()->GetFirstHop ()->isGateway) // outbound
i2p::transports.CloseSession (it.second->GetTunnelConfig ()->GetFirstHop ()->router);
delete it.second;
if (it->second->GetState () == eTunnelStatePending)
{
if (ts > it->second->GetCreationTime () + TUNNEL_CREATION_TIMEOUT)
{
LogPrint ("Pending tunnel build request ", it->first, " was not successive. Deleted");
delete it->second;
it = m_PendingTunnels.erase (it);
}
else
it++;
}
else
it = m_PendingTunnels.erase (it);
}
m_PendingTunnels.clear ();
ManageInboundTunnels ();
ManageOutboundTunnels ();
ManageTransitTunnels ();
ManageTunnelPools ();
/* if (!m_IsTunnelCreated)
{
InboundTunnel * inboundTunnel = CreateOneHopInboundTestTunnel ();
if (inboundTunnel)
CreateOneHopOutboundTestTunnel (inboundTunnel);
inboundTunnel = CreateTwoHopsInboundTestTunnel ();
if (inboundTunnel)
CreateTwoHopsOutboundTestTunnel (inboundTunnel);
m_IsTunnelCreated = true;
}*/
}
void Tunnels::ManageOutboundTunnels ()

@ -22,6 +22,7 @@ namespace i2p
namespace tunnel
{
const int TUNNEL_EXPIRATION_TIMEOUT = 660; // 11 minutes
const int TUNNEL_CREATION_TIMEOUT = 10; // 10 seconds
const int STANDARD_NUM_RECORDS = 5; // in VariableTunnelBuild message
enum TunnelState

Loading…
Cancel
Save