Browse Source

don't copy RouterInfos and LeaseSets

pull/93/head
orignal 10 years ago
parent
commit
f3c6dd4d3d
  1. 11
      LeaseSet.cpp
  2. 5
      LeaseSet.h
  3. 32
      NetDb.cpp
  4. 4
      NetDb.h
  5. 13
      RouterInfo.cpp
  6. 1
      RouterInfo.h

11
LeaseSet.cpp

@ -12,6 +12,17 @@ namespace data
{ {
LeaseSet::LeaseSet (const uint8_t * buf, int len) LeaseSet::LeaseSet (const uint8_t * buf, int len)
{
ReadFromBuffer (buf, len);
}
void LeaseSet::Update (const uint8_t * buf, int len)
{
m_Leases.clear ();
ReadFromBuffer (buf, len);
}
void LeaseSet::ReadFromBuffer (const uint8_t * buf, int len)
{ {
#pragma pack(1) #pragma pack(1)
struct H struct H

5
LeaseSet.h

@ -37,6 +37,7 @@ namespace data
LeaseSet (const uint8_t * buf, int len); LeaseSet (const uint8_t * buf, int len);
LeaseSet (const LeaseSet& ) = default; LeaseSet (const LeaseSet& ) = default;
LeaseSet& operator=(const LeaseSet& ) = default; LeaseSet& operator=(const LeaseSet& ) = default;
void Update (const uint8_t * buf, int len);
// implements RoutingDestination // implements RoutingDestination
const Identity& GetIdentity () const { return m_Identity; }; const Identity& GetIdentity () const { return m_Identity; };
@ -48,6 +49,10 @@ namespace data
const uint8_t * GetEncryptionPublicKey () const { return m_EncryptionKey; }; const uint8_t * GetEncryptionPublicKey () const { return m_EncryptionKey; };
bool IsDestination () const { return true; }; bool IsDestination () const { return true; };
private:
void ReadFromBuffer (const uint8_t * buf, int len);
private: private:
std::vector<Lease> m_Leases; std::vector<Lease> m_Leases;

32
NetDb.cpp

@ -155,44 +155,40 @@ namespace data
} }
} }
void NetDb::AddRouterInfo (uint8_t * buf, int len) void NetDb::AddRouterInfo (const IdentHash& ident, uint8_t * buf, int len)
{ {
RouterInfo * r = new RouterInfo (buf, len); DeleteRequestedDestination (ident);
DeleteRequestedDestination (r->GetIdentHash ()); auto it = m_RouterInfos.find(ident);
auto it = m_RouterInfos.find(r->GetIdentHash ());
if (it != m_RouterInfos.end ()) if (it != m_RouterInfos.end ())
{ {
if (r->GetTimestamp () > it->second->GetTimestamp ()) auto ts = it->second->GetTimestamp ();
{ it->second->Update (buf, len);
if (it->second->GetTimestamp () > ts)
LogPrint ("RouterInfo updated"); LogPrint ("RouterInfo updated");
*(it->second) = *r; // we can't replace pointer because it's used by tunnels
}
delete r;
} }
else else
{ {
LogPrint ("New RouterInfo added"); LogPrint ("New RouterInfo added");
RouterInfo * r = new RouterInfo (buf, len);
m_RouterInfos[r->GetIdentHash ()] = r; m_RouterInfos[r->GetIdentHash ()] = r;
if (r->IsFloodfill ()) if (r->IsFloodfill ())
m_Floodfills.push_back (r); m_Floodfills.push_back (r);
} }
} }
void NetDb::AddLeaseSet (uint8_t * buf, int len) void NetDb::AddLeaseSet (const IdentHash& ident, uint8_t * buf, int len)
{ {
LeaseSet * l = new LeaseSet (buf, len); DeleteRequestedDestination (ident);
DeleteRequestedDestination (l->GetIdentHash ()); auto it = m_LeaseSets.find(ident);
auto it = m_LeaseSets.find(l->GetIdentHash ());
if (it != m_LeaseSets.end ()) if (it != m_LeaseSets.end ())
{ {
it->second->Update (buf, len);
LogPrint ("LeaseSet updated"); LogPrint ("LeaseSet updated");
*(it->second) = *l; // we can't replace pointer because it's used by streams
delete l;
} }
else else
{ {
LogPrint ("New LeaseSet added"); LogPrint ("New LeaseSet added");
m_LeaseSets[l->GetIdentHash ()] = l; m_LeaseSets[ident] = new LeaseSet (buf, len);
} }
} }
@ -395,7 +391,7 @@ namespace data
if (msg->type) if (msg->type)
{ {
LogPrint ("LeaseSet"); LogPrint ("LeaseSet");
AddLeaseSet (buf + offset, len - offset); AddLeaseSet (msg->key, buf + offset, len - offset);
} }
else else
{ {
@ -413,7 +409,7 @@ namespace data
uint8_t uncompressed[2048]; uint8_t uncompressed[2048];
size_t uncomressedSize = decompressor.MaxRetrievable (); size_t uncomressedSize = decompressor.MaxRetrievable ();
decompressor.Get (uncompressed, uncomressedSize); decompressor.Get (uncompressed, uncomressedSize);
AddRouterInfo (uncompressed, uncomressedSize); AddRouterInfo (msg->key, uncompressed, uncomressedSize);
} }
} }

4
NetDb.h

@ -58,8 +58,8 @@ namespace data
void Start (); void Start ();
void Stop (); void Stop ();
void AddRouterInfo (uint8_t * buf, int len); void AddRouterInfo (const IdentHash& ident, uint8_t * buf, int len);
void AddLeaseSet (uint8_t * buf, int len); void AddLeaseSet (const IdentHash& ident, uint8_t * buf, int len);
RouterInfo * FindRouter (const IdentHash& ident) const; RouterInfo * FindRouter (const IdentHash& ident) const;
LeaseSet * FindLeaseSet (const IdentHash& destination) const; LeaseSet * FindLeaseSet (const IdentHash& destination) const;
const IdentHash * FindAddress (const std::string& address) { return m_AddressBook.FindAddress (address); }; // TODO: move AddressBook away from NetDb const IdentHash * FindAddress (const std::string& address) { return m_AddressBook.FindAddress (address); }; // TODO: move AddressBook away from NetDb

13
RouterInfo.cpp

@ -31,6 +31,19 @@ namespace data
ReadFromBuffer (); ReadFromBuffer ();
} }
void RouterInfo::Update (const uint8_t * buf, int len)
{
m_IsUpdated = true;
m_IsUnreachable = false;
m_SupportedTransports = 0;
m_Caps = 0;
m_Addresses.clear ();
m_Properties.clear ();
memcpy (m_Buffer, buf, len);
m_BufferLen = len;
ReadFromBuffer ();
}
void RouterInfo::SetRouterIdentity (const Identity& identity) void RouterInfo::SetRouterIdentity (const Identity& identity)
{ {
m_RouterIdentity = identity; m_RouterIdentity = identity;

1
RouterInfo.h

@ -68,6 +68,7 @@ namespace data
RouterInfo (const RouterInfo& ) = default; RouterInfo (const RouterInfo& ) = default;
RouterInfo& operator=(const RouterInfo& ) = default; RouterInfo& operator=(const RouterInfo& ) = default;
RouterInfo (const uint8_t * buf, int len); RouterInfo (const uint8_t * buf, int len);
void Update (const uint8_t * buf, int len);
const Identity& GetRouterIdentity () const { return m_RouterIdentity; }; const Identity& GetRouterIdentity () const { return m_RouterIdentity; };
void SetRouterIdentity (const Identity& identity); void SetRouterIdentity (const Identity& identity);

Loading…
Cancel
Save