mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 08:14:15 +00:00
delete invalid router after update
This commit is contained in:
parent
7bde4de1f5
commit
d15581d95e
@ -276,7 +276,22 @@ namespace data
|
||||
bool wasFloodfill = r->IsFloodfill ();
|
||||
{
|
||||
std::unique_lock<std::mutex> l(m_RouterInfosMutex);
|
||||
r->Update (buf, len);
|
||||
if (!r->Update (buf, len))
|
||||
{
|
||||
updated = false;
|
||||
return r;
|
||||
}
|
||||
if (r->IsUnreachable ())
|
||||
{
|
||||
// delete router as invalid after update
|
||||
m_RouterInfos.erase (ident);
|
||||
if (wasFloodfill)
|
||||
{
|
||||
std::unique_lock<std::mutex> l(m_FloodfillsMutex);
|
||||
m_Floodfills.remove (r);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
LogPrint (eLogInfo, "NetDb: RouterInfo updated: ", ident.ToBase64());
|
||||
if (wasFloodfill != r->IsFloodfill ()) // if floodfill status updated
|
||||
|
@ -79,13 +79,12 @@ namespace data
|
||||
{
|
||||
}
|
||||
|
||||
void RouterInfo::Update (const uint8_t * buf, size_t len)
|
||||
bool RouterInfo::Update (const uint8_t * buf, size_t len)
|
||||
{
|
||||
if (len > MAX_RI_BUFFER_SIZE)
|
||||
{
|
||||
LogPrint (eLogError, "RouterInfo: Buffer is too long ", len);
|
||||
m_IsUnreachable = true;
|
||||
return;
|
||||
LogPrint (eLogWarning, "RouterInfo: Updated buffer is too long ", len, ". Not changed");
|
||||
return false;
|
||||
}
|
||||
// verify signature since we have identity already
|
||||
int l = len - m_RouterIdentity->GetSignatureLen ();
|
||||
@ -109,10 +108,11 @@ namespace data
|
||||
// don't delete buffer until saved to the file
|
||||
}
|
||||
else
|
||||
{
|
||||
LogPrint (eLogError, "RouterInfo: Signature verification failed");
|
||||
m_IsUnreachable = true;
|
||||
}
|
||||
{
|
||||
LogPrint (eLogWarning, "RouterInfo: Updated signature verification failed. Not changed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void RouterInfo::SetRouterIdentity (std::shared_ptr<const IdentityEx> identity)
|
||||
|
@ -253,7 +253,7 @@ namespace data
|
||||
std::shared_ptr<RouterProfile> GetProfile () const;
|
||||
void DropProfile () { m_Profile = nullptr; };
|
||||
|
||||
void Update (const uint8_t * buf, size_t len);
|
||||
bool Update (const uint8_t * buf, size_t len);
|
||||
void DeleteBuffer () { m_Buffer = nullptr; };
|
||||
bool IsNewer (const uint8_t * buf, size_t len) const;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user