mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 21:37:17 +01: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 IsLeaseSetNonConfirmed () const { return m_LeaseSetUpdateStatus == eLeaseSetSubmitted; };
|
||||||
bool IsLeaseSetUpdated () const { return m_LeaseSetUpdateStatus == eLeaseSetUpdated; };
|
bool IsLeaseSetUpdated () const { return m_LeaseSetUpdateStatus == eLeaseSetUpdated; };
|
||||||
|
uint64_t GetLeaseSetSubmissionTime () const { return m_LeaseSetSubmissionTime; }
|
||||||
|
|
||||||
std::shared_ptr<GarlicRoutingPath> GetSharedRoutingPath ();
|
std::shared_ptr<GarlicRoutingPath> GetSharedRoutingPath ();
|
||||||
void SetSharedRoutingPath (std::shared_ptr<GarlicRoutingPath> path);
|
void SetSharedRoutingPath (std::shared_ptr<GarlicRoutingPath> path);
|
||||||
|
|
|
@ -661,33 +661,25 @@ namespace stream
|
||||||
|
|
||||||
void Stream::SendUpdatedLeaseSet ()
|
void Stream::SendUpdatedLeaseSet ()
|
||||||
{
|
{
|
||||||
if (m_RoutingSession && m_RemoteLeaseSet &&
|
if (m_RoutingSession)
|
||||||
(m_RoutingSession->IsLeaseSetUpdated () || m_RoutingSession->IsLeaseSetNonConfirmed ()))
|
|
||||||
{
|
{
|
||||||
auto leases = m_RemoteLeaseSet->GetNonExpiredLeases (true); // with threshold
|
if (m_RoutingSession->IsLeaseSetNonConfirmed ())
|
||||||
if (!leases.empty ())
|
|
||||||
{
|
{
|
||||||
auto outboundTunnel = m_LocalDestination.GetOwner ()->GetTunnelPool ()->GetNextOutboundTunnel ();
|
auto ts = i2p::util::GetMillisecondsSinceEpoch ();
|
||||||
if (outboundTunnel)
|
if (ts > m_RoutingSession->GetLeaseSetSubmissionTime () + i2p::garlic::LEASET_CONFIRMATION_TIMEOUT)
|
||||||
{
|
{
|
||||||
auto lease = leases[rand () % leases.size ()];
|
// LeaseSet was not confirmed, should try other tunnels
|
||||||
auto msg = m_RoutingSession->WrapSingleMessage (nullptr);
|
LogPrint (eLogWarning, "Streaming: LeaseSet was not confrimed in ", i2p::garlic::LEASET_CONFIRMATION_TIMEOUT, " milliseconds. Trying to resubmit");
|
||||||
outboundTunnel->SendTunnelDataMsg (
|
m_RoutingSession->SetSharedRoutingPath (nullptr);
|
||||||
{
|
m_CurrentOutboundTunnel = nullptr;
|
||||||
i2p::tunnel::TunnelMessageBlock
|
m_CurrentRemoteLease = nullptr;
|
||||||
{
|
SendQuickAck ();
|
||||||
i2p::tunnel::eDeliveryTypeTunnel,
|
|
||||||
lease->tunnelGateway, lease->tunnelID,
|
|
||||||
msg
|
|
||||||
}
|
|
||||||
});
|
|
||||||
LogPrint (eLogDebug, "Streaming: Updated LeaseSet sent. sSID=", m_SendStreamID);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if (m_RoutingSession->IsLeaseSetUpdated ())
|
||||||
{
|
{
|
||||||
LogPrint (eLogWarning, "Streaming: Can't sent updated LeaseSet. Remote LeaseSet expired. sSID=", m_SendStreamID);
|
LogPrint (eLogDebug, "Streaming: sending updated LeaseSet");
|
||||||
m_LocalDestination.GetOwner ()->RequestDestination (m_RemoteIdentity->GetIdentHash ());
|
SendQuickAck ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue