send I2NP messages

This commit is contained in:
orignal 2022-03-30 18:04:12 -04:00
parent f9925c7374
commit 2024e790ca
2 changed files with 99 additions and 14 deletions

View file

@ -29,6 +29,9 @@ namespace transport
const size_t SSU2_SOCKET_RECEIVE_BUFFER_SIZE = 0x1FFFF; // 128K
const size_t SSU2_SOCKET_SEND_BUFFER_SIZE = 0x1FFFF; // 128K
const size_t SSU2_MTU = 1488;
const size_t SSU2_MAX_PAYLOAD_SIZE = SSU2_MTU - 32;
const int SSU2_RESEND_INTERVAL = 3; // in seconds
const int SSU2_MAX_NUM_RESENDS = 5;
enum SSU2MessageType
{
@ -97,9 +100,10 @@ namespace transport
struct SentPacket
{
Header h;
Header header;
uint8_t payload[SSU2_MTU];
size_t payloadLen;
size_t payloadLen;
uint32_t packetNum;
uint32_t nextResendTime; // in seconds
int numResends;
};
@ -116,8 +120,8 @@ namespace transport
void Connect ();
void Terminate ();
void TerminateByTimeout ();
void Done () override {};
void SendI2NPMessages (const std::vector<std::shared_ptr<I2NPMessage> >& msgs) override {};
void Done () override;
void SendI2NPMessages (const std::vector<std::shared_ptr<I2NPMessage> >& msgs) override;
bool IsEstablished () const { return m_State == eSSU2SessionStateEstablished; };
uint64_t GetConnID () const { return m_SourceConnID; };
@ -130,6 +134,8 @@ namespace transport
private:
void Established ();
void PostI2NPMessages (std::vector<std::shared_ptr<I2NPMessage> > msgs);
void SendQueue ();
void ProcessSessionRequest (Header& header, uint8_t * buf, size_t len);
void ProcessTokenRequest (Header& header, uint8_t * buf, size_t len);
@ -140,7 +146,7 @@ namespace transport
void KDFDataPhase (uint8_t * keydata_ab, uint8_t * keydata_ba);
void SendTokenRequest ();
void SendRetry ();
void SendData (const uint8_t * buf, size_t len);
std::shared_ptr<SentPacket> SendData (const uint8_t * buf, size_t len);
void SendQuickAck ();
void SendTermination ();
@ -154,6 +160,7 @@ namespace transport
size_t CreateAddressBlock (const boost::asio::ip::udp::endpoint& ep, uint8_t * buf, size_t len);
size_t CreateAckBlock (uint8_t * buf, size_t len);
size_t CreatePaddingBlock (uint8_t * buf, size_t len, size_t minSize = 0);
size_t CreateI2NPBlock (uint8_t * buf, size_t len, std::shared_ptr<I2NPMessage>&& msg);
private:
@ -168,6 +175,7 @@ namespace transport
uint32_t m_SendPacketNum, m_ReceivePacketNum;
std::set<uint32_t> m_OutOfSequencePackets; // packet nums > receive packet num
std::map<uint32_t, std::shared_ptr<SentPacket> > m_SentPackets; // packetNum -> packet
std::list<std::shared_ptr<I2NPMessage> > m_SendQueue;
i2p::I2NPMessagesHandler m_Handler;
};