renew LeaseSet's I2NP message ID and timestamp before sending

This commit is contained in:
orignal 2014-03-20 12:48:03 -04:00
parent eeacc3e0f3
commit ac48e3b355
3 changed files with 19 additions and 7 deletions

View File

@ -31,17 +31,17 @@ namespace i2p
delete msg; delete msg;
} }
static uint32_t I2NPmsgID = 0; // TODO: create class
void FillI2NPMessageHeader (I2NPMessage * msg, I2NPMessageType msgType, uint32_t replyMsgID) void FillI2NPMessageHeader (I2NPMessage * msg, I2NPMessageType msgType, uint32_t replyMsgID)
{ {
static uint32_t msgID = 0;
I2NPHeader * header = msg->GetHeader (); I2NPHeader * header = msg->GetHeader ();
header->typeID = msgType; header->typeID = msgType;
if (replyMsgID) // for tunnel creation if (replyMsgID) // for tunnel creation
header->msgID = htobe32 (replyMsgID); header->msgID = htobe32 (replyMsgID);
else else
{ {
header->msgID = htobe32 (msgID); header->msgID = htobe32 (I2NPmsgID);
msgID++; I2NPmsgID++;
} }
header->expiration = htobe64 (i2p::util::GetMillisecondsSinceEpoch () + 5000); // TODO: 5 secs is a magic number header->expiration = htobe64 (i2p::util::GetMillisecondsSinceEpoch () + 5000); // TODO: 5 secs is a magic number
int len = msg->GetLength () - sizeof (I2NPHeader); int len = msg->GetLength () - sizeof (I2NPHeader);
@ -51,6 +51,17 @@ namespace i2p
header->chks = hash[0]; header->chks = hash[0];
} }
void RenewI2NPMessageHeader (I2NPMessage * msg)
{
if (msg)
{
I2NPHeader * header = msg->GetHeader ();
header->msgID = htobe32 (I2NPmsgID);
I2NPmsgID++;
header->expiration = htobe64 (i2p::util::GetMillisecondsSinceEpoch () + 5000);
}
}
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 ();

View File

@ -142,6 +142,7 @@ namespace tunnel
I2NPMessage * NewI2NPMessage (); I2NPMessage * NewI2NPMessage ();
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);
I2NPMessage * CreateI2NPMessage (I2NPMessageType msgType, const uint8_t * buf, int len, uint32_t replyMsgID = 0); I2NPMessage * CreateI2NPMessage (I2NPMessageType msgType, const uint8_t * buf, int len, uint32_t replyMsgID = 0);
I2NPMessage * CreateI2NPMessage (const uint8_t * buf, int len); I2NPMessage * CreateI2NPMessage (const uint8_t * buf, int len);

View File

@ -369,10 +369,10 @@ namespace stream
const I2NPMessage * StreamingDestination::GetLeaseSet () const I2NPMessage * StreamingDestination::GetLeaseSet ()
{ {
// TODO: LeaseSet is always re-created. ivestigate if (!m_LeaseSet)
if (m_LeaseSet)
DeleteI2NPMessage (m_LeaseSet);
m_LeaseSet = CreateLeaseSet (); m_LeaseSet = CreateLeaseSet ();
else
RenewI2NPMessageHeader (m_LeaseSet);
return m_LeaseSet; return m_LeaseSet;
} }