mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-03-07 06:09:42 +00:00
Compare commits
1 Commits
ff8d462b62
...
13d9c6530c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
13d9c6530c |
@@ -12,6 +12,7 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <charconv>
|
#include <charconv>
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
#include <boost/algorithm/string.hpp> // for boost::to_lower
|
#include <boost/algorithm/string.hpp> // for boost::to_lower
|
||||||
#ifndef __cpp_lib_atomic_shared_ptr
|
#ifndef __cpp_lib_atomic_shared_ptr
|
||||||
#include <boost/atomic.hpp>
|
#include <boost/atomic.hpp>
|
||||||
@@ -262,17 +263,27 @@ namespace data
|
|||||||
}
|
}
|
||||||
else if (key == "port")
|
else if (key == "port")
|
||||||
{
|
{
|
||||||
auto res = std::from_chars(value.data(), value.data() + value.size(), address->port);
|
try
|
||||||
if (res.ec != std::errc())
|
{
|
||||||
LogPrint (eLogWarning, "RouterInfo: 'port' conversion error: ", std::make_error_code (res.ec).message ());
|
address->port = boost::lexical_cast<int>(value);
|
||||||
|
}
|
||||||
|
catch (std::exception& ex)
|
||||||
|
{
|
||||||
|
LogPrint (eLogWarning, "RouterInfo: 'port' exception ", ex.what ());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (key == "mtu")
|
else if (key == "mtu")
|
||||||
{
|
{
|
||||||
if (address->ssu)
|
if (address->ssu)
|
||||||
{
|
{
|
||||||
auto res = std::from_chars(value.data(), value.data() + value.size(), address->ssu->mtu);
|
try
|
||||||
if (res.ec != std::errc())
|
{
|
||||||
LogPrint (eLogWarning, "RouterInfo: 'mtu' conversion error: ", std::make_error_code (res.ec).message ());
|
address->ssu->mtu = boost::lexical_cast<int>(value);
|
||||||
|
}
|
||||||
|
catch (std::exception& ex)
|
||||||
|
{
|
||||||
|
LogPrint (eLogWarning, "RouterInfo: 'mtu' exception ", ex.what ());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
LogPrint (eLogWarning, "RouterInfo: Unexpected field 'mtu' for NTCP2");
|
LogPrint (eLogWarning, "RouterInfo: Unexpected field 'mtu' for NTCP2");
|
||||||
@@ -338,17 +349,27 @@ namespace data
|
|||||||
auto key1 = key.substr(0, key.length () - 1);
|
auto key1 = key.substr(0, key.length () - 1);
|
||||||
if (key1 == "itag")
|
if (key1 == "itag")
|
||||||
{
|
{
|
||||||
auto res = std::from_chars(value.data(), value.data() + value.size(), introducer.iTag);
|
try
|
||||||
if (res.ec != std::errc())
|
{
|
||||||
LogPrint (eLogWarning, "RouterInfo: 'itag' conversion error: ", std::make_error_code (res.ec).message ());
|
introducer.iTag = boost::lexical_cast<uint32_t>(value);
|
||||||
|
}
|
||||||
|
catch (std::exception& ex)
|
||||||
|
{
|
||||||
|
LogPrint (eLogWarning, "RouterInfo: 'itag' exception ", ex.what ());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (key1 == "ih")
|
else if (key1 == "ih")
|
||||||
Base64ToByteStream (value.data (), value.length (), introducer.iH, 32);
|
Base64ToByteStream (value.data (), value.length (), introducer.iH, 32);
|
||||||
else if (key1 == "iexp")
|
else if (key1 == "iexp")
|
||||||
{
|
{
|
||||||
auto res = std::from_chars(value.data(), value.data() + value.size(), introducer.iExp);
|
try
|
||||||
if (res.ec != std::errc())
|
{
|
||||||
LogPrint (eLogWarning, "RouterInfo: 'iexp' conversion error: ", std::make_error_code (res.ec).message ());
|
introducer.iExp = boost::lexical_cast<uint32_t>(value);
|
||||||
|
}
|
||||||
|
catch (std::exception& ex)
|
||||||
|
{
|
||||||
|
LogPrint (eLogWarning, "RouterInfo: 'iexp' exception ", ex.what ());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1381,9 +1402,9 @@ namespace data
|
|||||||
if (!introducer.iTag) continue;
|
if (!introducer.iTag) continue;
|
||||||
if (introducer.iExp) // expiration is specified
|
if (introducer.iExp) // expiration is specified
|
||||||
{
|
{
|
||||||
WriteString ("iexp" + std::to_string(i), properties);
|
WriteString ("iexp" + boost::lexical_cast<std::string>(i), properties);
|
||||||
properties << '=';
|
properties << '=';
|
||||||
WriteString (std::to_string(introducer.iExp), properties);
|
WriteString (boost::lexical_cast<std::string>(introducer.iExp), properties);
|
||||||
properties << ';';
|
properties << ';';
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
@@ -1392,7 +1413,7 @@ namespace data
|
|||||||
for (const auto& introducer: address.ssu->introducers)
|
for (const auto& introducer: address.ssu->introducers)
|
||||||
{
|
{
|
||||||
if (!introducer.iTag) continue;
|
if (!introducer.iTag) continue;
|
||||||
WriteString ("ih" + std::to_string(i), properties);
|
WriteString ("ih" + boost::lexical_cast<std::string>(i), properties);
|
||||||
properties << '=';
|
properties << '=';
|
||||||
char value[64];
|
char value[64];
|
||||||
size_t l = ByteStreamToBase64 (introducer.iH, 32, value, 64);
|
size_t l = ByteStreamToBase64 (introducer.iH, 32, value, 64);
|
||||||
@@ -1405,9 +1426,9 @@ namespace data
|
|||||||
for (const auto& introducer: address.ssu->introducers)
|
for (const auto& introducer: address.ssu->introducers)
|
||||||
{
|
{
|
||||||
if (!introducer.iTag) continue;
|
if (!introducer.iTag) continue;
|
||||||
WriteString ("itag" + std::to_string(i), properties);
|
WriteString ("itag" + boost::lexical_cast<std::string>(i), properties);
|
||||||
properties << '=';
|
properties << '=';
|
||||||
WriteString (std::to_string(introducer.iTag), properties);
|
WriteString (boost::lexical_cast<std::string>(introducer.iTag), properties);
|
||||||
properties << ';';
|
properties << ';';
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@@ -1421,7 +1442,7 @@ namespace data
|
|||||||
{
|
{
|
||||||
WriteString ("mtu", properties);
|
WriteString ("mtu", properties);
|
||||||
properties << '=';
|
properties << '=';
|
||||||
WriteString (std::to_string(address.ssu->mtu), properties);
|
WriteString (boost::lexical_cast<std::string>(address.ssu->mtu), properties);
|
||||||
properties << ';';
|
properties << ';';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1429,7 +1450,7 @@ namespace data
|
|||||||
{
|
{
|
||||||
WriteString ("port", properties);
|
WriteString ("port", properties);
|
||||||
properties << '=';
|
properties << '=';
|
||||||
WriteString (std::to_string(address.port), properties);
|
WriteString (boost::lexical_cast<std::string>(address.port), properties);
|
||||||
properties << ';';
|
properties << ';';
|
||||||
}
|
}
|
||||||
if (address.IsNTCP2 () || address.IsSSU2 ())
|
if (address.IsNTCP2 () || address.IsSSU2 ())
|
||||||
|
|||||||
@@ -2277,11 +2277,8 @@ namespace transport
|
|||||||
case 2: // Charlie from Bob
|
case 2: // Charlie from Bob
|
||||||
{
|
{
|
||||||
// sign with Charlie's key
|
// sign with Charlie's key
|
||||||
if (len < offset + 9) return;
|
|
||||||
uint8_t asz = buf[offset + 9];
|
uint8_t asz = buf[offset + 9];
|
||||||
size_t l = asz + 10 + i2p::context.GetIdentity ()->GetSignatureLen ();
|
std::vector<uint8_t> newSignedData (asz + 10 + i2p::context.GetIdentity ()->GetSignatureLen ());
|
||||||
if (len < offset + l) return;
|
|
||||||
std::vector<uint8_t> newSignedData (l);
|
|
||||||
memcpy (newSignedData.data (), buf + offset, asz + 10);
|
memcpy (newSignedData.data (), buf + offset, asz + 10);
|
||||||
SignedData<128> s;
|
SignedData<128> s;
|
||||||
s.Insert ((const uint8_t *)"PeerTestValidate", 16); // prologue
|
s.Insert ((const uint8_t *)"PeerTestValidate", 16); // prologue
|
||||||
@@ -2391,15 +2388,9 @@ namespace transport
|
|||||||
if (GetRouterStatus () == eRouterStatusUnknown)
|
if (GetRouterStatus () == eRouterStatusUnknown)
|
||||||
SetTestingState (true);
|
SetTestingState (true);
|
||||||
auto r = i2p::data::netdb.FindRouter (buf + 3); // find Charlie
|
auto r = i2p::data::netdb.FindRouter (buf + 3); // find Charlie
|
||||||
if (r && len >= offset + 9)
|
if (r)
|
||||||
{
|
{
|
||||||
uint8_t asz = buf[offset + 9];
|
uint8_t asz = buf[offset + 9];
|
||||||
if (len < offset + asz + 10 + r->GetIdentity ()->GetSignatureLen ())
|
|
||||||
{
|
|
||||||
LogPrint (eLogWarning, "Malformed PeerTest 4 len=", len);
|
|
||||||
session->Done ();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
SignedData<128> s;
|
SignedData<128> s;
|
||||||
s.Insert ((const uint8_t *)"PeerTestValidate", 16); // prologue
|
s.Insert ((const uint8_t *)"PeerTestValidate", 16); // prologue
|
||||||
s.Insert (GetRemoteIdentity ()->GetIdentHash (), 32); // bhash
|
s.Insert (GetRemoteIdentity ()->GetIdentHash (), 32); // bhash
|
||||||
|
|||||||
@@ -613,8 +613,10 @@ namespace stream
|
|||||||
if (wasInitial)
|
if (wasInitial)
|
||||||
ScheduleResend ();
|
ScheduleResend ();
|
||||||
}
|
}
|
||||||
if (m_IsClientChoked && ackThrough >= m_DropWindowDelaySequenceNumber)
|
if (m_IsClientChoked && ackThrough > m_DropWindowDelaySequenceNumber)
|
||||||
|
{
|
||||||
m_IsClientChoked = false;
|
m_IsClientChoked = false;
|
||||||
|
}
|
||||||
if (m_IsWinDropped && ackThrough > m_DropWindowDelaySequenceNumber)
|
if (m_IsWinDropped && ackThrough > m_DropWindowDelaySequenceNumber)
|
||||||
{
|
{
|
||||||
m_IsFirstRttSample = true;
|
m_IsFirstRttSample = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user