Browse Source

fixed zero-hops tunnels

pull/551/head
orignal 9 years ago
parent
commit
c50105493a
  1. 4
      Destination.cpp
  2. 1
      Tunnel.cpp
  3. 27
      TunnelPool.cpp

4
Destination.cpp

@ -31,7 +31,7 @@ namespace client @@ -31,7 +31,7 @@ namespace client
{
int len = i2p::util::lexical_cast<int>(it->second, inboundTunnelLen);
if (len > 0)
if (len >= 0)
{
inboundTunnelLen = len;
}
@ -42,7 +42,7 @@ namespace client @@ -42,7 +42,7 @@ namespace client
{
int len = i2p::util::lexical_cast<int>(it->second, outboundTunnelLen);
if (len > 0)
if (len >= 0)
{
outboundTunnelLen = len;
}

1
Tunnel.cpp

@ -217,6 +217,7 @@ namespace tunnel @@ -217,6 +217,7 @@ namespace tunnel
if (msg)
{
m_NumReceivedBytes += msg->GetLength ();
msg->from = shared_from_this ();
HandleI2NPMessage (msg);
}
}

27
TunnelPool.cpp

@ -389,9 +389,16 @@ namespace tunnel @@ -389,9 +389,16 @@ namespace tunnel
LogPrint (eLogDebug, "Tunnels: Creating destination inbound tunnel...");
std::vector<std::shared_ptr<const i2p::data::IdentityEx> > peers;
if (SelectPeers (peers, true))
{
std::shared_ptr<TunnelConfig> config;
if (m_NumInboundHops > 0)
{
std::reverse (peers.begin (), peers.end ());
auto tunnel = tunnels.CreateInboundTunnel (std::make_shared<TunnelConfig> (peers), outboundTunnel);
config = std::make_shared<TunnelConfig> (peers);
}
else
config = std::make_shared<ZeroHopsTunnelConfig> ();
auto tunnel = tunnels.CreateInboundTunnel (config, outboundTunnel);
tunnel->SetTunnelPool (shared_from_this ());
if (tunnel->IsEstablished ()) // zero hops
TunnelCreated (tunnel);
@ -406,7 +413,9 @@ namespace tunnel @@ -406,7 +413,9 @@ namespace tunnel
if (!outboundTunnel)
outboundTunnel = tunnels.GetNextOutboundTunnel ();
LogPrint (eLogDebug, "Tunnels: Re-creating destination inbound tunnel...");
auto newTunnel = tunnels.CreateInboundTunnel (std::make_shared<TunnelConfig>(tunnel->GetPeers ()), outboundTunnel);
std::shared_ptr<TunnelConfig> config = m_NumInboundHops > 0 ?
std::make_shared<TunnelConfig>(tunnel->GetPeers ()) : std::make_shared<ZeroHopsTunnelConfig> ();
auto newTunnel = tunnels.CreateInboundTunnel (config, outboundTunnel);
newTunnel->SetTunnelPool (shared_from_this());
if (newTunnel->IsEstablished ()) // zero hops
TunnelCreated (newTunnel);
@ -423,8 +432,11 @@ namespace tunnel @@ -423,8 +432,11 @@ namespace tunnel
std::vector<std::shared_ptr<const i2p::data::IdentityEx> > peers;
if (SelectPeers (peers, false))
{
auto tunnel = tunnels.CreateOutboundTunnel (
std::make_shared<TunnelConfig> (peers, inboundTunnel->GetNextTunnelID (), inboundTunnel->GetNextIdentHash ()));
std::shared_ptr<TunnelConfig> config = m_NumOutboundHops > 0 ?
std::make_shared<TunnelConfig>(peers, inboundTunnel->GetNextTunnelID (), inboundTunnel->GetNextIdentHash ()) :
std::make_shared<ZeroHopsTunnelConfig> ();
auto tunnel = tunnels.CreateOutboundTunnel (config);
tunnel->SetTunnelPool (shared_from_this ());
if (tunnel->IsEstablished ()) // zero hops
TunnelCreated (tunnel);
@ -444,9 +456,10 @@ namespace tunnel @@ -444,9 +456,10 @@ namespace tunnel
if (inboundTunnel)
{
LogPrint (eLogDebug, "Tunnels: Re-creating destination outbound tunnel...");
auto newTunnel = tunnels.CreateOutboundTunnel (
std::make_shared<TunnelConfig> (tunnel->GetPeers (),
inboundTunnel->GetNextTunnelID (), inboundTunnel->GetNextIdentHash ()));
std::shared_ptr<TunnelConfig> config = m_NumOutboundHops > 0 ?
std::make_shared<TunnelConfig>(tunnel->GetPeers (), inboundTunnel->GetNextTunnelID (), inboundTunnel->GetNextIdentHash ()) :
std::make_shared<ZeroHopsTunnelConfig> ();
auto newTunnel = tunnels.CreateOutboundTunnel (config);
newTunnel->SetTunnelPool (shared_from_this ());
if (newTunnel->IsEstablished ()) // zero hops
TunnelCreated (newTunnel);

Loading…
Cancel
Save