mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 00:00:29 +03:00
move exploratory tunnels to separate pool
This commit is contained in:
parent
489266e7fc
commit
70bf83f127
@ -245,7 +245,7 @@ namespace util
|
|||||||
for (auto it: i2p::tunnel::tunnels.GetOutboundTunnels ())
|
for (auto it: i2p::tunnel::tunnels.GetOutboundTunnels ())
|
||||||
{
|
{
|
||||||
it->GetTunnelConfig ()->Print (s);
|
it->GetTunnelConfig ()->Print (s);
|
||||||
if (it->GetTunnelPool ())
|
if (it->GetTunnelPool () && !it->GetTunnelPool ()->IsExploratory ())
|
||||||
s << " " << "Pool";
|
s << " " << "Pool";
|
||||||
if (it->IsFailed ())
|
if (it->IsFailed ())
|
||||||
s << " " << "Failed";
|
s << " " << "Failed";
|
||||||
|
70
Tunnel.cpp
70
Tunnel.cpp
@ -384,35 +384,18 @@ namespace tunnel
|
|||||||
it++;
|
it++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_OutboundTunnels.size () < 15) // TODO: store exploratory tunnels explicitly
|
if (m_OutboundTunnels.size () < 5)
|
||||||
{
|
{
|
||||||
// trying to create one more oubound tunnel
|
// trying to create one more oubound tunnel
|
||||||
if (m_InboundTunnels.empty ()) return;
|
|
||||||
|
|
||||||
InboundTunnel * inboundTunnel = GetNextInboundTunnel ();
|
InboundTunnel * inboundTunnel = GetNextInboundTunnel ();
|
||||||
if (m_OutboundTunnels.empty () || m_OutboundTunnels.size () < 3)
|
if (!inboundTunnel) return;
|
||||||
{
|
LogPrint ("Creating one hop outbound tunnel...");
|
||||||
LogPrint ("Creating one hop outbound tunnel...");
|
CreateTunnel<OutboundTunnel> (
|
||||||
CreateTunnel<OutboundTunnel> (
|
new TunnelConfig (std::vector<const i2p::data::RouterInfo *>
|
||||||
new TunnelConfig (std::vector<const i2p::data::RouterInfo *>
|
{
|
||||||
{
|
i2p::data::netdb.GetRandomRouter ()
|
||||||
i2p::data::netdb.GetRandomRouter ()
|
},
|
||||||
},
|
inboundTunnel->GetTunnelConfig ()));
|
||||||
inboundTunnel->GetTunnelConfig ()));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
LogPrint ("Creating two hops outbound tunnel...");
|
|
||||||
auto firstHop = i2p::data::netdb.GetRandomRouter ();
|
|
||||||
CreateTunnel<OutboundTunnel> (
|
|
||||||
new TunnelConfig (std::vector<const i2p::data::RouterInfo *>
|
|
||||||
{
|
|
||||||
firstHop,
|
|
||||||
i2p::data::netdb.GetRandomRouter (firstHop)
|
|
||||||
},
|
|
||||||
inboundTunnel->GetTunnelConfig ()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -437,35 +420,20 @@ namespace tunnel
|
|||||||
{
|
{
|
||||||
LogPrint ("Creating zero hops inbound tunnel...");
|
LogPrint ("Creating zero hops inbound tunnel...");
|
||||||
CreateZeroHopsInboundTunnel ();
|
CreateZeroHopsInboundTunnel ();
|
||||||
|
if (!m_ExploratoryPool)
|
||||||
|
m_ExploratoryPool = CreateTunnelPool (i2p::context);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_InboundTunnels.size () < 15) // TODO: store exploratory tunnels explicitly
|
if (m_OutboundTunnels.empty () || m_InboundTunnels.size () < 5)
|
||||||
{
|
{
|
||||||
// trying to create one more inbound tunnel
|
// trying to create one more inbound tunnel
|
||||||
if (m_OutboundTunnels.empty () || m_InboundTunnels.size () < 3)
|
LogPrint ("Creating one hop inbound tunnel...");
|
||||||
{
|
CreateTunnel<InboundTunnel> (
|
||||||
LogPrint ("Creating one hop inbound tunnel...");
|
new TunnelConfig (std::vector<const i2p::data::RouterInfo *>
|
||||||
CreateTunnel<InboundTunnel> (
|
{
|
||||||
new TunnelConfig (std::vector<const i2p::data::RouterInfo *>
|
i2p::data::netdb.GetRandomRouter ()
|
||||||
{
|
}));
|
||||||
i2p::data::netdb.GetRandomRouter ()
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
OutboundTunnel * outboundTunnel = GetNextOutboundTunnel ();
|
|
||||||
LogPrint ("Creating two hops inbound tunnel...");
|
|
||||||
auto router = outboundTunnel->GetTunnelConfig ()->GetFirstHop ()->router;
|
|
||||||
auto firstHop = i2p::data::netdb.GetRandomRouter (outboundTunnel->GetEndpointRouter ());
|
|
||||||
CreateTunnel<InboundTunnel> (
|
|
||||||
new TunnelConfig (std::vector<const i2p::data::RouterInfo *>
|
|
||||||
{
|
|
||||||
firstHop,
|
|
||||||
router != &i2p::context.GetRouterInfo () ? router : i2p::data::netdb.GetRandomRouter (firstHop)
|
|
||||||
}),
|
|
||||||
outboundTunnel);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ namespace tunnel
|
|||||||
|
|
||||||
const uint8_t * GetEncryptionPrivateKey () const { return m_LocalDestination.GetEncryptionPrivateKey (); };
|
const uint8_t * GetEncryptionPrivateKey () const { return m_LocalDestination.GetEncryptionPrivateKey (); };
|
||||||
const uint8_t * GetEncryptionPublicKey () const { return m_LocalDestination.GetEncryptionPublicKey (); };
|
const uint8_t * GetEncryptionPublicKey () const { return m_LocalDestination.GetEncryptionPublicKey (); };
|
||||||
bool IsExploratory () const { return &m_LocalDestination == &i2p::context; };
|
bool IsExploratory () const { return m_LocalDestination.GetIdentHash () == i2p::context.GetIdentHash (); };
|
||||||
|
|
||||||
void CreateTunnels ();
|
void CreateTunnels ();
|
||||||
void TunnelCreated (InboundTunnel * createdTunnel);
|
void TunnelCreated (InboundTunnel * createdTunnel);
|
||||||
|
Loading…
Reference in New Issue
Block a user