remember last outgoing tunnel per stream rather than per client destination

This commit is contained in:
orignal 2014-11-26 13:20:35 -05:00
parent 77687a70a2
commit aca87b5fd1
5 changed files with 26 additions and 35 deletions

View file

@ -46,8 +46,9 @@ namespace datagram
void DatagramDestination::SendMsg (I2NPMessage * msg, const i2p::data::LeaseSet& remote)
{
auto outboundTunnel = m_Owner.GetTunnelPool ()->GetNextOutboundTunnel ();
auto leases = remote.GetNonExpiredLeases ();
if (!leases.empty ())
if (!leases.empty () && outboundTunnel)
{
std::vector<i2p::tunnel::TunnelMessageBlock> msgs;
uint32_t i = i2p::context.GetRandomNumberGenerator ().GenerateWord32 (0, leases.size () - 1);
@ -58,11 +59,14 @@ namespace datagram
leases[i].tunnelGateway, leases[i].tunnelID,
garlic
});
m_Owner.SendTunnelDataMsgs (msgs);
outboundTunnel->SendTunnelDataMsg (msgs);
}
else
{
LogPrint (eLogWarning, "Failed to send datagram. All leases expired");
if (outboundTunnel)
LogPrint (eLogWarning, "Failed to send datagram. All leases expired");
else
LogPrint (eLogWarning, "Failed to send datagram. No outbound tunnels");
DeleteI2NPMessage (msg);
}
}