Browse Source

drop expired leasesand renew leaseset

pull/373/head
orignal 9 years ago
parent
commit
e056c9c135
  1. 4
      Destination.cpp
  2. 13
      LeaseSet.cpp
  3. 1
      LeaseSet.h
  4. 4
      Streaming.cpp

4
Destination.cpp

@ -303,7 +303,7 @@ namespace client
} }
else else
{ {
LogPrint (eLogError, "New remote LeaseSet verification failed"); LogPrint (eLogError, "New remote LeaseSet failed");
leaseSet = nullptr; leaseSet = nullptr;
} }
} }
@ -678,7 +678,7 @@ namespace client
auto ts = i2p::util::GetMillisecondsSinceEpoch (); auto ts = i2p::util::GetMillisecondsSinceEpoch ();
for (auto it = m_RemoteLeaseSets.begin (); it != m_RemoteLeaseSets.end ();) for (auto it = m_RemoteLeaseSets.begin (); it != m_RemoteLeaseSets.end ();)
{ {
if (ts > it->second->GetExpirationTime ()) // leaseset expired if (it->second->IsEmpty () || ts > it->second->GetExpirationTime ()) // leaseset expired
{ {
LogPrint (eLogWarning, "Destination: Remote LeaseSet ", it->second->GetIdentHash ().ToBase64 (), " expired"); LogPrint (eLogWarning, "Destination: Remote LeaseSet ", it->second->GetIdentHash ().ToBase64 (), " expired");
it = m_RemoteLeaseSets.erase (it); it = m_RemoteLeaseSets.erase (it);

13
LeaseSet.cpp

@ -119,6 +119,7 @@ namespace data
// process leases // process leases
m_ExpirationTime = 0; m_ExpirationTime = 0;
auto ts = i2p::util::GetMillisecondsSinceEpoch ();
const uint8_t * leases = m_Buffer + size; const uint8_t * leases = m_Buffer + size;
for (int i = 0; i < num; i++) for (int i = 0; i < num; i++)
{ {
@ -129,6 +130,8 @@ namespace data
leases += 4; // tunnel ID leases += 4; // tunnel ID
lease.endDate = bufbe64toh (leases); lease.endDate = bufbe64toh (leases);
leases += 8; // end date leases += 8; // end date
if (ts < lease.endDate)
{
if (lease.endDate > m_ExpirationTime) if (lease.endDate > m_ExpirationTime)
m_ExpirationTime = lease.endDate; m_ExpirationTime = lease.endDate;
if (m_StoreLeases) if (m_StoreLeases)
@ -145,6 +148,15 @@ namespace data
} }
} }
} }
else
LogPrint (eLogWarning, "LeaseSet: Lease is expired already ");
}
if (!m_ExpirationTime)
{
LogPrint (eLogWarning, "LeaseSet: all leases are expired. Dropped");
m_IsValid = false;
return;
}
// delete old leases // delete old leases
if (m_StoreLeases) if (m_StoreLeases)
{ {
@ -193,6 +205,7 @@ namespace data
bool LeaseSet::IsExpired () const bool LeaseSet::IsExpired () const
{ {
if (IsEmpty ()) return true;
auto ts = i2p::util::GetMillisecondsSinceEpoch (); auto ts = i2p::util::GetMillisecondsSinceEpoch ();
return ts > m_ExpirationTime; return ts > m_ExpirationTime;
} }

1
LeaseSet.h

@ -55,6 +55,7 @@ namespace data
const std::vector<std::shared_ptr<Lease> > GetNonExpiredLeases (bool withThreshold = true) const; const std::vector<std::shared_ptr<Lease> > GetNonExpiredLeases (bool withThreshold = true) const;
bool HasExpiredLeases () const; bool HasExpiredLeases () const;
bool IsExpired () const; bool IsExpired () const;
bool IsEmpty () const { return m_Leases.empty (); };
uint64_t GetExpirationTime () const { return m_ExpirationTime; }; uint64_t GetExpirationTime () const { return m_ExpirationTime; };
// implements RoutingDestination // implements RoutingDestination

4
Streaming.cpp

@ -704,11 +704,11 @@ namespace stream
void Stream::UpdateCurrentRemoteLease (bool expired) void Stream::UpdateCurrentRemoteLease (bool expired)
{ {
if (!m_RemoteLeaseSet) if (!m_RemoteLeaseSet || m_RemoteLeaseSet->IsExpired ())
{ {
m_RemoteLeaseSet = m_LocalDestination.GetOwner ()->FindLeaseSet (m_RemoteIdentity->GetIdentHash ()); m_RemoteLeaseSet = m_LocalDestination.GetOwner ()->FindLeaseSet (m_RemoteIdentity->GetIdentHash ());
if (!m_RemoteLeaseSet) if (!m_RemoteLeaseSet)
LogPrint (eLogError, "Streaming: LeaseSet ", m_RemoteIdentity->GetIdentHash ().ToBase64 (), " not found"); LogPrint (eLogWarning, "Streaming: LeaseSet ", m_RemoteIdentity->GetIdentHash ().ToBase64 (), " not found");
} }
if (m_RemoteLeaseSet) if (m_RemoteLeaseSet)
{ {

Loading…
Cancel
Save