mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-04-28 11:47:48 +02:00
send I2NP messages
This commit is contained in:
parent
f9925c7374
commit
2024e790ca
2 changed files with 99 additions and 14 deletions
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue