diff --git a/I2NPProtocol.cpp b/I2NPProtocol.cpp index 939c087d..8909e556 100644 --- a/I2NPProtocol.cpp +++ b/I2NPProtocol.cpp @@ -209,6 +209,19 @@ namespace i2p return m; } + I2NPMessage * CreateDatabaseStoreMsg (const i2p::data::LeaseSet * leaseSet) + { + if (!leaseSet) return nullptr; + I2NPMessage * m = NewI2NPMessage (); + I2NPDatabaseStoreMsg * msg = (I2NPDatabaseStoreMsg *)m->GetPayload (); + memcpy (msg->key, leaseSet->GetIdentHash (), 32); + msg->type = 1; // LeaseSet + msg->replyToken = 0; + memcpy (m->GetPayload () + sizeof (I2NPDatabaseStoreMsg), leaseSet->GetBuffer (), leaseSet->GetBufferLen ()); + m->len += leaseSet->GetBufferLen () + sizeof (I2NPDatabaseStoreMsg); + FillI2NPMessageHeader (m, eI2NPDatabaseStore); + return m; + } I2NPBuildRequestRecordClearText CreateBuildRequestRecord ( const uint8_t * ourIdent, uint32_t receiveTunnelID, diff --git a/I2NPProtocol.h b/I2NPProtocol.h index e3f8316e..07bebc94 100644 --- a/I2NPProtocol.h +++ b/I2NPProtocol.h @@ -6,6 +6,7 @@ #include #include "I2PEndian.h" #include "RouterInfo.h" +#include "LeaseSet.h" namespace i2p { @@ -157,7 +158,8 @@ namespace tunnel I2NPMessage * CreateDatabaseSearchReply (const i2p::data::IdentHash& ident, const i2p::data::RouterInfo * floodfill); I2NPMessage * CreateDatabaseStoreMsg (const i2p::data::RouterInfo * router = nullptr); - + I2NPMessage * CreateDatabaseStoreMsg (const i2p::data::LeaseSet * leaseSet); + I2NPBuildRequestRecordClearText CreateBuildRequestRecord ( const uint8_t * ourIdent, uint32_t receiveTunnelID, const uint8_t * nextIdent, uint32_t nextTunnelID, diff --git a/LeaseSet.h b/LeaseSet.h index 027c0157..fb1a9f17 100644 --- a/LeaseSet.h +++ b/LeaseSet.h @@ -55,6 +55,9 @@ namespace data LeaseSet& operator=(const LeaseSet& ) = default; void Update (const uint8_t * buf, int len); + const uint8_t * GetBuffer () const { return m_Buffer; }; + size_t GetBufferLen () const { return m_BufferLen; }; + // implements RoutingDestination const Identity& GetIdentity () const { return m_Identity; }; const IdentHash& GetIdentHash () const { return m_IdentHash; };