mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 08:14:15 +00:00
handle peer tests
This commit is contained in:
parent
0a1e302e8a
commit
5aa2a8f60f
@ -977,8 +977,12 @@ namespace transport
|
|||||||
HandleRelayResponse (buf + offset, size);
|
HandleRelayResponse (buf + offset, size);
|
||||||
break;
|
break;
|
||||||
case eSSU2BlkRelayIntro:
|
case eSSU2BlkRelayIntro:
|
||||||
|
LogPrint (eLogDebug, "SSU2: RelayIntro");
|
||||||
|
HandleRelayIntro (buf + offset, size);
|
||||||
break;
|
break;
|
||||||
case eSSU2BlkPeerTest:
|
case eSSU2BlkPeerTest:
|
||||||
|
LogPrint (eLogDebug, "SSU2: PeerTest");
|
||||||
|
HandlePeerTest (buf + offset, size);
|
||||||
break;
|
break;
|
||||||
case eSSU2BlkNextNonce:
|
case eSSU2BlkNextNonce:
|
||||||
break;
|
break;
|
||||||
@ -1273,6 +1277,37 @@ namespace transport
|
|||||||
else
|
else
|
||||||
LogPrint (eLogWarning, "SSU2: RelayResponse unknown nonce ", bufbe32toh (buf + 2));
|
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)
|
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)
|
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);
|
it = m_RelaySessions.erase (it);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
++it;
|
++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 ()
|
void SSU2Session::FlushData ()
|
||||||
|
@ -28,6 +28,7 @@ namespace transport
|
|||||||
const int SSU2_TERMINATION_CHECK_TIMEOUT = 30; // 30 seconds
|
const int SSU2_TERMINATION_CHECK_TIMEOUT = 30; // 30 seconds
|
||||||
const int SSU2_TOKEN_EXPIRATION_TIMEOUT = 9; // in seconds
|
const int SSU2_TOKEN_EXPIRATION_TIMEOUT = 9; // in seconds
|
||||||
const int SSU2_RELAY_NONCE_EXPIRATION_TIMEOUT = 10; // 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_RECEIVE_BUFFER_SIZE = 0x1FFFF; // 128K
|
||||||
const size_t SSU2_SOCKET_SEND_BUFFER_SIZE = 0x1FFFF; // 128K
|
const size_t SSU2_SOCKET_SEND_BUFFER_SIZE = 0x1FFFF; // 128K
|
||||||
const size_t SSU2_MTU = 1488;
|
const size_t SSU2_MTU = 1488;
|
||||||
@ -134,7 +135,7 @@ namespace transport
|
|||||||
uint8_t payload[SSU2_MAX_PAYLOAD_SIZE];
|
uint8_t payload[SSU2_MAX_PAYLOAD_SIZE];
|
||||||
size_t payloadSize;
|
size_t payloadSize;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::function<void ()> OnEstablished;
|
typedef std::function<void ()> OnEstablished;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -204,6 +205,7 @@ namespace transport
|
|||||||
void HandleRelayRequest (const uint8_t * buf, size_t len);
|
void HandleRelayRequest (const uint8_t * buf, size_t len);
|
||||||
void HandleRelayIntro (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 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 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);
|
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<SentPacket> > m_SentPackets; // packetNum -> packet
|
||||||
std::map<uint32_t, std::shared_ptr<SSU2IncompleteMessage> > m_IncompleteMessages; // I2NP
|
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_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;
|
std::list<std::shared_ptr<I2NPMessage> > m_SendQueue;
|
||||||
i2p::I2NPMessagesHandler m_Handler;
|
i2p::I2NPMessagesHandler m_Handler;
|
||||||
bool m_IsDataReceived;
|
bool m_IsDataReceived;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user