mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 00:00:29 +03:00
resubmit non-confirmed LeaseSet
This commit is contained in:
parent
4ee9b4524d
commit
c74db4b81c
1
Garlic.h
1
Garlic.h
@ -106,6 +106,7 @@ namespace garlic
|
||||
};
|
||||
bool IsLeaseSetNonConfirmed () const { return m_LeaseSetUpdateStatus == eLeaseSetSubmitted; };
|
||||
bool IsLeaseSetUpdated () const { return m_LeaseSetUpdateStatus == eLeaseSetUpdated; };
|
||||
uint64_t GetLeaseSetSubmissionTime () const { return m_LeaseSetSubmissionTime; }
|
||||
|
||||
std::shared_ptr<GarlicRoutingPath> GetSharedRoutingPath ();
|
||||
void SetSharedRoutingPath (std::shared_ptr<GarlicRoutingPath> path);
|
||||
|
@ -661,33 +661,25 @@ namespace stream
|
||||
|
||||
void Stream::SendUpdatedLeaseSet ()
|
||||
{
|
||||
if (m_RoutingSession && m_RemoteLeaseSet &&
|
||||
(m_RoutingSession->IsLeaseSetUpdated () || m_RoutingSession->IsLeaseSetNonConfirmed ()))
|
||||
{
|
||||
auto leases = m_RemoteLeaseSet->GetNonExpiredLeases (true); // with threshold
|
||||
if (!leases.empty ())
|
||||
{
|
||||
auto outboundTunnel = m_LocalDestination.GetOwner ()->GetTunnelPool ()->GetNextOutboundTunnel ();
|
||||
if (outboundTunnel)
|
||||
{
|
||||
auto lease = leases[rand () % leases.size ()];
|
||||
auto msg = m_RoutingSession->WrapSingleMessage (nullptr);
|
||||
outboundTunnel->SendTunnelDataMsg (
|
||||
{
|
||||
i2p::tunnel::TunnelMessageBlock
|
||||
{
|
||||
i2p::tunnel::eDeliveryTypeTunnel,
|
||||
lease->tunnelGateway, lease->tunnelID,
|
||||
msg
|
||||
}
|
||||
});
|
||||
LogPrint (eLogDebug, "Streaming: Updated LeaseSet sent. sSID=", m_SendStreamID);
|
||||
if (m_RoutingSession)
|
||||
{
|
||||
if (m_RoutingSession->IsLeaseSetNonConfirmed ())
|
||||
{
|
||||
auto ts = i2p::util::GetMillisecondsSinceEpoch ();
|
||||
if (ts > m_RoutingSession->GetLeaseSetSubmissionTime () + i2p::garlic::LEASET_CONFIRMATION_TIMEOUT)
|
||||
{
|
||||
// LeaseSet was not confirmed, should try other tunnels
|
||||
LogPrint (eLogWarning, "Streaming: LeaseSet was not confrimed in ", i2p::garlic::LEASET_CONFIRMATION_TIMEOUT, " milliseconds. Trying to resubmit");
|
||||
m_RoutingSession->SetSharedRoutingPath (nullptr);
|
||||
m_CurrentOutboundTunnel = nullptr;
|
||||
m_CurrentRemoteLease = nullptr;
|
||||
SendQuickAck ();
|
||||
}
|
||||
}
|
||||
else
|
||||
}
|
||||
else if (m_RoutingSession->IsLeaseSetUpdated ())
|
||||
{
|
||||
LogPrint (eLogWarning, "Streaming: Can't sent updated LeaseSet. Remote LeaseSet expired. sSID=", m_SendStreamID);
|
||||
m_LocalDestination.GetOwner ()->RequestDestination (m_RemoteIdentity->GetIdentHash ());
|
||||
LogPrint (eLogDebug, "Streaming: sending updated LeaseSet");
|
||||
SendQuickAck ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user