Browse Source

update LeaseSet if a tunnel was deleted

pull/1082/head
orignal 7 years ago
parent
commit
e1527dc137
  1. 7
      libi2pd/LeaseSet.cpp
  2. 2
      libi2pd/LeaseSet.h

7
libi2pd/LeaseSet.cpp

@ -135,7 +135,7 @@ namespace data @@ -135,7 +135,7 @@ namespace data
}
}
uint64_t LeaseSet::ExtractTimestamp (const uint8_t * buf, size_t len) const
uint64_t LeaseSet::ExtractTimestamp (const uint8_t * buf, size_t len, uint8_t& num) const
{
if (!m_Identity) return 0;
size_t size = m_Identity->GetFullLen ();
@ -143,7 +143,7 @@ namespace data @@ -143,7 +143,7 @@ namespace data
size += 256; // encryption key
size += m_Identity->GetSigningPublicKeyLen (); // unused signing key
if (size > len) return 0;
uint8_t num = buf[size];
num = buf[size];
size++; // num
if (size + num*LEASE_SIZE > len) return 0;
uint64_t timestamp= 0 ;
@ -160,7 +160,8 @@ namespace data @@ -160,7 +160,8 @@ namespace data
bool LeaseSet::IsNewer (const uint8_t * buf, size_t len) const
{
return ExtractTimestamp (buf, len) > ExtractTimestamp (m_Buffer, m_BufferLen);
uint8_t num1, num2;
return ExtractTimestamp (buf, len, num2) > ExtractTimestamp (m_Buffer, m_BufferLen, num1) || num2 < num1; // some lease might be deleted
}
bool LeaseSet::ExpiresSoon(const uint64_t dlt, const uint64_t fudge) const

2
libi2pd/LeaseSet.h

@ -82,7 +82,7 @@ namespace data @@ -82,7 +82,7 @@ namespace data
private:
void ReadFromBuffer (bool readIdentity = true, bool verifySignature = true);
uint64_t ExtractTimestamp (const uint8_t * buf, size_t len) const; // min expiration time
uint64_t ExtractTimestamp (const uint8_t * buf, size_t len, uint8_t& num) const; // returns max expiration time, num is number of leases
private:

Loading…
Cancel
Save