MCPcopy Create free account
hub / github.com/PurpleI2P/i2pd / SendRouterInfo

Method SendRouterInfo

libi2pd/NTCP2.cpp:1594–1615  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1592 }
1593
1594 void NTCP2Session::SendRouterInfo ()
1595 {
1596 if (!IsEstablished ()) return;
1597 auto riBuffer = i2p::context.CopyRouterInfoBuffer ();
1598 auto riLen = riBuffer->GetBufferLen ();
1599 size_t payloadLen = riLen + 3 + 1 + 7; // 3 bytes block header + 1 byte RI flag + 7 bytes DateTime
1600 m_NextSendBuffer = new uint8_t[payloadLen + 16 + 2 + 64]; // up to 64 bytes padding
1601 // DateTime block
1602 m_NextSendBuffer[2] = eNTCP2BlkDateTime;
1603 htobe16buf (m_NextSendBuffer + 3, 4);
1604 htobe32buf (m_NextSendBuffer + 5, (i2p::util::GetMillisecondsSinceEpoch () + 500)/1000);
1605 // RouterInfo block
1606 m_NextSendBuffer[9] = eNTCP2BlkRouterInfo;
1607 htobe16buf (m_NextSendBuffer + 10, riLen + 1); // size
1608 m_NextSendBuffer[12] = 0; // flag
1609 memcpy (m_NextSendBuffer + 13, riBuffer->data (), riLen); // TODO: eliminate extra copy
1610 // padding block
1611 auto paddingSize = CreatePaddingBlock (payloadLen, m_NextSendBuffer + 2 + payloadLen, 64);
1612 payloadLen += paddingSize;
1613 // encrypt and send
1614 EncryptAndSendNextBuffer (payloadLen);
1615 }
1616
1617 void NTCP2Session::SendTermination (NTCP2TerminationReason reason)
1618 {

Callers

nothing calls this directly

Calls 5

htobe16bufFunction · 0.85
htobe32bufFunction · 0.85
CopyRouterInfoBufferMethod · 0.80
GetBufferLenMethod · 0.45

Tested by

no test coverage detected