diff --git a/LeaseSet.cpp b/LeaseSet.cpp index 677f19ca..561dc28c 100644 --- a/LeaseSet.cpp +++ b/LeaseSet.cpp @@ -130,7 +130,7 @@ namespace data leases += 4; // tunnel ID lease.endDate = bufbe64toh (leases); leases += 8; // end date - if (ts < lease.endDate) + if (ts < lease.endDate + LEASE_ENDDATE_THRESHOLD) { if (lease.endDate > m_ExpirationTime) m_ExpirationTime = lease.endDate; @@ -151,7 +151,7 @@ namespace data else LogPrint (eLogWarning, "LeaseSet: Lease is expired already "); } - if (!m_ExpirationTime) + if (!m_ExpirationTime && m_Leases.empty ()) { LogPrint (eLogWarning, "LeaseSet: all leases are expired. Dropped"); m_IsValid = false; @@ -192,6 +192,12 @@ namespace data if (ts < endDate) leases.push_back (it); } + if (leases.empty () && withThreshold) + { + for (auto it: m_Leases) + if (ts < it->endDate + LEASE_ENDDATE_THRESHOLD) + leases.push_back (it); + } return leases; } diff --git a/LeaseSet.h b/LeaseSet.h index 6a0da922..b9ec2d0b 100644 --- a/LeaseSet.h +++ b/LeaseSet.h @@ -17,6 +17,7 @@ namespace tunnel namespace data { + const int LEASE_ENDDATE_THRESHOLD = 9500; // in milliseconds struct Lease { IdentHash tunnelGateway;