mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 21:37:17 +01:00
doesn't send peer test to a reserved address
This commit is contained in:
parent
9e050d1a23
commit
3695aa924b
|
@ -273,7 +273,7 @@ namespace transport
|
||||||
s.Insert (payload, 8); // relayTag and signed on time
|
s.Insert (payload, 8); // relayTag and signed on time
|
||||||
m_RelayTag = bufbe32toh (payload);
|
m_RelayTag = bufbe32toh (payload);
|
||||||
payload += 4; // relayTag
|
payload += 4; // relayTag
|
||||||
if (i2p::context.GetStatus () == eRouterStatusTesting)
|
if (ourIP.is_v4 () && i2p::context.GetStatus () == eRouterStatusTesting)
|
||||||
{
|
{
|
||||||
auto ts = i2p::util::GetSecondsSinceEpoch ();
|
auto ts = i2p::util::GetSecondsSinceEpoch ();
|
||||||
uint32_t signedOnTime = bufbe32toh(payload);
|
uint32_t signedOnTime = bufbe32toh(payload);
|
||||||
|
@ -358,7 +358,9 @@ namespace transport
|
||||||
uint8_t * payload = buf + sizeof (SSUHeader);
|
uint8_t * payload = buf + sizeof (SSUHeader);
|
||||||
uint8_t flag = 0;
|
uint8_t flag = 0;
|
||||||
// fill extended options, 3 bytes extended options don't change message size
|
// fill extended options, 3 bytes extended options don't change message size
|
||||||
if (i2p::context.GetStatus () == eRouterStatusOK) // we don't need relays
|
bool isV4 = m_RemoteEndpoint.address ().is_v4 ();
|
||||||
|
if ((isV4 && i2p::context.GetStatus () == eRouterStatusOK) ||
|
||||||
|
(!isV4 && i2p::context.GetStatusV6 () == eRouterStatusOK)) // we don't need relays
|
||||||
{
|
{
|
||||||
// tell out peer to now assign relay tag
|
// tell out peer to now assign relay tag
|
||||||
flag = SSU_HEADER_EXTENDED_OPTIONS_INCLUDED;
|
flag = SSU_HEADER_EXTENDED_OPTIONS_INCLUDED;
|
||||||
|
@ -369,7 +371,6 @@ namespace transport
|
||||||
}
|
}
|
||||||
// fill payload
|
// fill payload
|
||||||
memcpy (payload, m_DHKeysPair->GetPublicKey (), 256); // x
|
memcpy (payload, m_DHKeysPair->GetPublicKey (), 256); // x
|
||||||
bool isV4 = m_RemoteEndpoint.address ().is_v4 ();
|
|
||||||
if (isV4)
|
if (isV4)
|
||||||
{
|
{
|
||||||
payload[256] = 4;
|
payload[256] = 4;
|
||||||
|
@ -657,13 +658,16 @@ namespace transport
|
||||||
buf += ourSize; len -= ourSize;
|
buf += ourSize; len -= ourSize;
|
||||||
LogPrint (eLogInfo, "SSU: Our external address is ", ourIP.to_string (), ":", ourPort);
|
LogPrint (eLogInfo, "SSU: Our external address is ", ourIP.to_string (), ":", ourPort);
|
||||||
i2p::context.UpdateAddress (ourIP);
|
i2p::context.UpdateAddress (ourIP);
|
||||||
if (ourPort != m_Server.GetPort ())
|
if (ourIP.is_v4 ())
|
||||||
{
|
{
|
||||||
if (i2p::context.GetStatus () == eRouterStatusTesting)
|
if (ourPort != m_Server.GetPort ())
|
||||||
i2p::context.SetError (eRouterErrorSymmetricNAT);
|
{
|
||||||
}
|
if (i2p::context.GetStatus () == eRouterStatusTesting)
|
||||||
else if (i2p::context.GetStatus () == eRouterStatusError && i2p::context.GetError () == eRouterErrorSymmetricNAT)
|
i2p::context.SetError (eRouterErrorSymmetricNAT);
|
||||||
i2p::context.SetStatus (eRouterStatusTesting);
|
}
|
||||||
|
else if (i2p::context.GetStatus () == eRouterStatusError && i2p::context.GetError () == eRouterErrorSymmetricNAT)
|
||||||
|
i2p::context.SetStatus (eRouterStatusTesting);
|
||||||
|
}
|
||||||
uint32_t nonce = bufbe32toh (buf);
|
uint32_t nonce = bufbe32toh (buf);
|
||||||
buf += 4; // nonce
|
buf += 4; // nonce
|
||||||
auto it = m_RelayRequests.find (nonce);
|
auto it = m_RelayRequests.find (nonce);
|
||||||
|
|
|
@ -593,12 +593,16 @@ namespace transport
|
||||||
auto router = i2p::data::netdb.GetRandomPeerTestRouter (true); // v4
|
auto router = i2p::data::netdb.GetRandomPeerTestRouter (true); // v4
|
||||||
if (router)
|
if (router)
|
||||||
{
|
{
|
||||||
if (!statusChanged)
|
auto addr = router->GetSSUAddress (true); // ipv4
|
||||||
|
if (addr && !i2p::util::net::IsInReservedRange(addr->host))
|
||||||
{
|
{
|
||||||
statusChanged = true;
|
if (!statusChanged)
|
||||||
i2p::context.SetStatus (eRouterStatusTesting); // first time only
|
{
|
||||||
}
|
statusChanged = true;
|
||||||
m_SSUServer->CreateSession (router, true, true); // peer test v4
|
i2p::context.SetStatus (eRouterStatusTesting); // first time only
|
||||||
|
}
|
||||||
|
m_SSUServer->CreateSession (router, addr, true); // peer test v4
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!statusChanged)
|
if (!statusChanged)
|
||||||
|
@ -614,7 +618,7 @@ namespace transport
|
||||||
if (router)
|
if (router)
|
||||||
{
|
{
|
||||||
auto addr = router->GetSSUV6Address ();
|
auto addr = router->GetSSUV6Address ();
|
||||||
if (addr)
|
if (addr && !i2p::util::net::IsInReservedRange(addr->host))
|
||||||
{
|
{
|
||||||
if (!statusChanged)
|
if (!statusChanged)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue