mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 04:04:16 +00:00
use short I2NP messages
This commit is contained in:
parent
816c415f22
commit
0a5d4741af
@ -26,6 +26,11 @@ namespace i2p
|
|||||||
return new I2NPMessageBuffer<I2NP_MAX_SHORT_MESSAGE_SIZE>();
|
return new I2NPMessageBuffer<I2NP_MAX_SHORT_MESSAGE_SIZE>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
I2NPMessage * NewI2NPMessage (size_t len)
|
||||||
|
{
|
||||||
|
return (len < I2NP_MAX_SHORT_MESSAGE_SIZE/2) ? NewI2NPShortMessage () : NewI2NPMessage ();
|
||||||
|
}
|
||||||
|
|
||||||
void DeleteI2NPMessage (I2NPMessage * msg)
|
void DeleteI2NPMessage (I2NPMessage * msg)
|
||||||
{
|
{
|
||||||
delete msg;
|
delete msg;
|
||||||
@ -64,7 +69,7 @@ namespace i2p
|
|||||||
|
|
||||||
I2NPMessage * CreateI2NPMessage (I2NPMessageType msgType, const uint8_t * buf, int len, uint32_t replyMsgID)
|
I2NPMessage * CreateI2NPMessage (I2NPMessageType msgType, const uint8_t * buf, int len, uint32_t replyMsgID)
|
||||||
{
|
{
|
||||||
I2NPMessage * msg = NewI2NPMessage ();
|
I2NPMessage * msg = NewI2NPMessage (len);
|
||||||
memcpy (msg->GetPayload (), buf, len);
|
memcpy (msg->GetPayload (), buf, len);
|
||||||
msg->len += len;
|
msg->len += len;
|
||||||
FillI2NPMessageHeader (msg, msgType, replyMsgID);
|
FillI2NPMessageHeader (msg, msgType, replyMsgID);
|
||||||
@ -164,7 +169,7 @@ namespace i2p
|
|||||||
I2NPMessage * CreateDatabaseSearchReply (const i2p::data::IdentHash& ident,
|
I2NPMessage * CreateDatabaseSearchReply (const i2p::data::IdentHash& ident,
|
||||||
const i2p::data::RouterInfo * floodfill)
|
const i2p::data::RouterInfo * floodfill)
|
||||||
{
|
{
|
||||||
I2NPMessage * m = NewI2NPMessage ();
|
I2NPMessage * m = NewI2NPShortMessage ();
|
||||||
uint8_t * buf = m->GetPayload ();
|
uint8_t * buf = m->GetPayload ();
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
memcpy (buf, ident, 32);
|
memcpy (buf, ident, 32);
|
||||||
@ -188,7 +193,7 @@ namespace i2p
|
|||||||
if (!router) // we send own RouterInfo
|
if (!router) // we send own RouterInfo
|
||||||
router = &context.GetRouterInfo ();
|
router = &context.GetRouterInfo ();
|
||||||
|
|
||||||
I2NPMessage * m = NewI2NPMessage ();
|
I2NPMessage * m = NewI2NPShortMessage ();
|
||||||
I2NPDatabaseStoreMsg * msg = (I2NPDatabaseStoreMsg *)m->GetPayload ();
|
I2NPDatabaseStoreMsg * msg = (I2NPDatabaseStoreMsg *)m->GetPayload ();
|
||||||
|
|
||||||
memcpy (msg->key, router->GetIdentHash (), 32);
|
memcpy (msg->key, router->GetIdentHash (), 32);
|
||||||
@ -213,7 +218,7 @@ namespace i2p
|
|||||||
I2NPMessage * CreateDatabaseStoreMsg (const i2p::data::LeaseSet * leaseSet)
|
I2NPMessage * CreateDatabaseStoreMsg (const i2p::data::LeaseSet * leaseSet)
|
||||||
{
|
{
|
||||||
if (!leaseSet) return nullptr;
|
if (!leaseSet) return nullptr;
|
||||||
I2NPMessage * m = NewI2NPMessage ();
|
I2NPMessage * m = NewI2NPShortMessage ();
|
||||||
I2NPDatabaseStoreMsg * msg = (I2NPDatabaseStoreMsg *)m->GetPayload ();
|
I2NPDatabaseStoreMsg * msg = (I2NPDatabaseStoreMsg *)m->GetPayload ();
|
||||||
memcpy (msg->key, leaseSet->GetIdentHash (), 32);
|
memcpy (msg->key, leaseSet->GetIdentHash (), 32);
|
||||||
msg->type = 1; // LeaseSet
|
msg->type = 1; // LeaseSet
|
||||||
@ -398,7 +403,7 @@ namespace i2p
|
|||||||
|
|
||||||
I2NPMessage * CreateTunnelGatewayMsg (uint32_t tunnelID, const uint8_t * buf, size_t len)
|
I2NPMessage * CreateTunnelGatewayMsg (uint32_t tunnelID, const uint8_t * buf, size_t len)
|
||||||
{
|
{
|
||||||
I2NPMessage * msg = NewI2NPMessage ();
|
I2NPMessage * msg = NewI2NPMessage (len);
|
||||||
TunnelGatewayHeader * header = (TunnelGatewayHeader *)msg->GetPayload ();
|
TunnelGatewayHeader * header = (TunnelGatewayHeader *)msg->GetPayload ();
|
||||||
header->tunnelID = htobe32 (tunnelID);
|
header->tunnelID = htobe32 (tunnelID);
|
||||||
header->length = htobe16 (len);
|
header->length = htobe16 (len);
|
||||||
@ -433,7 +438,7 @@ namespace i2p
|
|||||||
I2NPMessage * CreateTunnelGatewayMsg (uint32_t tunnelID, I2NPMessageType msgType,
|
I2NPMessage * CreateTunnelGatewayMsg (uint32_t tunnelID, I2NPMessageType msgType,
|
||||||
const uint8_t * buf, size_t len, uint32_t replyMsgID)
|
const uint8_t * buf, size_t len, uint32_t replyMsgID)
|
||||||
{
|
{
|
||||||
I2NPMessage * msg = NewI2NPMessage ();
|
I2NPMessage * msg = NewI2NPMessage (len);
|
||||||
size_t gatewayMsgOffset = sizeof (I2NPHeader) + sizeof (TunnelGatewayHeader);
|
size_t gatewayMsgOffset = sizeof (I2NPHeader) + sizeof (TunnelGatewayHeader);
|
||||||
msg->offset += gatewayMsgOffset;
|
msg->offset += gatewayMsgOffset;
|
||||||
msg->len += gatewayMsgOffset;
|
msg->len += gatewayMsgOffset;
|
||||||
|
@ -106,10 +106,11 @@ namespace tunnel
|
|||||||
struct I2NPMessage
|
struct I2NPMessage
|
||||||
{
|
{
|
||||||
uint8_t * buf;
|
uint8_t * buf;
|
||||||
size_t len, offset;
|
size_t len, offset, maxLen;
|
||||||
i2p::tunnel::InboundTunnel * from;
|
i2p::tunnel::InboundTunnel * from;
|
||||||
|
|
||||||
I2NPMessage (): buf (nullptr),len (sizeof (I2NPHeader) + 2), offset(2), from (nullptr) {};
|
I2NPMessage (): buf (nullptr),len (sizeof (I2NPHeader) + 2),
|
||||||
|
offset(2), maxLen (0), from (nullptr) {};
|
||||||
// reserve 2 bytes for NTCP header
|
// reserve 2 bytes for NTCP header
|
||||||
I2NPHeader * GetHeader () { return (I2NPHeader *)GetBuffer (); };
|
I2NPHeader * GetHeader () { return (I2NPHeader *)GetBuffer (); };
|
||||||
uint8_t * GetPayload () { return GetBuffer () + sizeof(I2NPHeader); };
|
uint8_t * GetPayload () { return GetBuffer () + sizeof(I2NPHeader); };
|
||||||
@ -151,12 +152,13 @@ namespace tunnel
|
|||||||
template<int sz>
|
template<int sz>
|
||||||
struct I2NPMessageBuffer: public I2NPMessage
|
struct I2NPMessageBuffer: public I2NPMessage
|
||||||
{
|
{
|
||||||
I2NPMessageBuffer () { buf = m_Buffer; };
|
I2NPMessageBuffer () { buf = m_Buffer; maxLen = sz; };
|
||||||
uint8_t m_Buffer[sz];
|
uint8_t m_Buffer[sz];
|
||||||
};
|
};
|
||||||
|
|
||||||
I2NPMessage * NewI2NPMessage ();
|
I2NPMessage * NewI2NPMessage ();
|
||||||
I2NPMessage * NewI2NPShortMessage ();
|
I2NPMessage * NewI2NPShortMessage ();
|
||||||
|
I2NPMessage * NewI2NPMessage (size_t len);
|
||||||
void DeleteI2NPMessage (I2NPMessage * msg);
|
void DeleteI2NPMessage (I2NPMessage * msg);
|
||||||
void FillI2NPMessageHeader (I2NPMessage * msg, I2NPMessageType msgType, uint32_t replyMsgID = 0);
|
void FillI2NPMessageHeader (I2NPMessage * msg, I2NPMessageType msgType, uint32_t replyMsgID = 0);
|
||||||
void RenewI2NPMessageHeader (I2NPMessage * msg);
|
void RenewI2NPMessageHeader (I2NPMessage * msg);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user