mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 04:04:16 +00:00
handle peer tests
This commit is contained in:
parent
0a1e302e8a
commit
5aa2a8f60f
@ -977,8 +977,12 @@ namespace transport
|
||||
HandleRelayResponse (buf + offset, size);
|
||||
break;
|
||||
case eSSU2BlkRelayIntro:
|
||||
LogPrint (eLogDebug, "SSU2: RelayIntro");
|
||||
HandleRelayIntro (buf + offset, size);
|
||||
break;
|
||||
case eSSU2BlkPeerTest:
|
||||
LogPrint (eLogDebug, "SSU2: PeerTest");
|
||||
HandlePeerTest (buf + offset, size);
|
||||
break;
|
||||
case eSSU2BlkNextNonce:
|
||||
break;
|
||||
@ -1273,6 +1277,37 @@ namespace transport
|
||||
else
|
||||
LogPrint (eLogWarning, "SSU2: RelayResponse unknown nonce ", bufbe32toh (buf + 2));
|
||||
}
|
||||
|
||||
void SSU2Session::HandlePeerTest (const uint8_t * buf, size_t len)
|
||||
{
|
||||
uint32_t nonce = bufbe32toh (buf + 37);
|
||||
switch (buf[0]) // msg
|
||||
{
|
||||
case 1: // Bob for Alice
|
||||
break;
|
||||
case 2: // Charlie from Bob
|
||||
break;
|
||||
case 3: // Bob from Charlie
|
||||
{
|
||||
auto it = m_PeerTests.find (nonce);
|
||||
if (it != m_PeerTests.end () && it->second.first)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 4: // Alice from Bob
|
||||
break;
|
||||
case 5: // Alice from Chralie 1
|
||||
break;
|
||||
case 6: // Chralie from Alice
|
||||
break;
|
||||
case 7: // Alice from Charlie 2
|
||||
break;
|
||||
default:
|
||||
LogPrint (eLogWarning, "SSU2: PeerTest unexpected msg num ", buf[0]);
|
||||
}
|
||||
}
|
||||
|
||||
bool SSU2Session::ExtractEndpoint (const uint8_t * buf, size_t size, boost::asio::ip::udp::endpoint& ep)
|
||||
{
|
||||
@ -1590,12 +1625,22 @@ namespace transport
|
||||
{
|
||||
if (ts > it->second.second + SSU2_RELAY_NONCE_EXPIRATION_TIMEOUT)
|
||||
{
|
||||
LogPrint (eLogWarning, "SSU2: noce ", it->first, " was not responded in ", SSU2_RELAY_NONCE_EXPIRATION_TIMEOUT, " seconds, deleted");
|
||||
LogPrint (eLogWarning, "SSU2: Relay nonce ", it->first, " was not responded in ", SSU2_RELAY_NONCE_EXPIRATION_TIMEOUT, " seconds, deleted");
|
||||
it = m_RelaySessions.erase (it);
|
||||
}
|
||||
else
|
||||
++it;
|
||||
}
|
||||
for (auto it = m_PeerTests.begin (); it != m_PeerTests.end ();)
|
||||
{
|
||||
if (ts > it->second.second + SSU2_PEER_TEST_EXPIRATION_TIMEOUT)
|
||||
{
|
||||
LogPrint (eLogWarning, "SSU2: Peer test nonce ", it->first, " was not responded in ", SSU2_PEER_TEST_EXPIRATION_TIMEOUT, " seconds, deleted");
|
||||
it = m_PeerTests.erase (it);
|
||||
}
|
||||
else
|
||||
++it;
|
||||
}
|
||||
}
|
||||
|
||||
void SSU2Session::FlushData ()
|
||||
|
@ -28,6 +28,7 @@ namespace transport
|
||||
const int SSU2_TERMINATION_CHECK_TIMEOUT = 30; // 30 seconds
|
||||
const int SSU2_TOKEN_EXPIRATION_TIMEOUT = 9; // in seconds
|
||||
const int SSU2_RELAY_NONCE_EXPIRATION_TIMEOUT = 10; // in seconds
|
||||
const int SSU2_PEER_TEST_EXPIRATION_TIMEOUT = 60; // 60 seconds
|
||||
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;
|
||||
@ -134,7 +135,7 @@ namespace transport
|
||||
uint8_t payload[SSU2_MAX_PAYLOAD_SIZE];
|
||||
size_t payloadSize;
|
||||
};
|
||||
|
||||
|
||||
typedef std::function<void ()> OnEstablished;
|
||||
|
||||
public:
|
||||
@ -204,6 +205,7 @@ namespace transport
|
||||
void HandleRelayRequest (const uint8_t * buf, size_t len);
|
||||
void HandleRelayIntro (const uint8_t * buf, size_t len);
|
||||
void HandleRelayResponse (const uint8_t * buf, size_t len);
|
||||
void HandlePeerTest (const uint8_t * buf, size_t len);
|
||||
|
||||
size_t CreateAddressBlock (uint8_t * buf, size_t len, const boost::asio::ip::udp::endpoint& ep);
|
||||
size_t CreateRouterInfoBlock (uint8_t * buf, size_t len, std::shared_ptr<const i2p::data::RouterInfo> r);
|
||||
@ -231,6 +233,7 @@ namespace transport
|
||||
std::map<uint32_t, std::shared_ptr<SentPacket> > m_SentPackets; // packetNum -> packet
|
||||
std::map<uint32_t, std::shared_ptr<SSU2IncompleteMessage> > m_IncompleteMessages; // I2NP
|
||||
std::map<uint32_t, std::pair <std::shared_ptr<SSU2Session>, uint64_t > > m_RelaySessions; // nonce->(Alice, timestamp) for Bob or nonce->(Charlie, timestamp) for Alice
|
||||
std::map<uint32_t, std::pair <std::shared_ptr<SSU2Session>, uint64_t > > m_PeerTests; // same as for relay sessions
|
||||
std::list<std::shared_ptr<I2NPMessage> > m_SendQueue;
|
||||
i2p::I2NPMessagesHandler m_Handler;
|
||||
bool m_IsDataReceived;
|
||||
|
Loading…
x
Reference in New Issue
Block a user