Browse Source

select introducers randomly. More logging for RelayIntro

pull/1786/head
orignal 2 years ago
parent
commit
71766ecd16
  1. 22
      libi2pd/SSU2.cpp
  2. 6
      libi2pd/SSU2Session.cpp

22
libi2pd/SSU2.cpp

@ -6,6 +6,7 @@
* See full license text in LICENSE file at top of project tree * See full license text in LICENSE file at top of project tree
*/ */
#include <random>
#include "Log.h" #include "Log.h"
#include "RouterContext.h" #include "RouterContext.h"
#include "Transports.h" #include "Transports.h"
@ -576,15 +577,24 @@ namespace transport
auto ts = i2p::util::GetSecondsSinceEpoch (); auto ts = i2p::util::GetSecondsSinceEpoch ();
std::shared_ptr<i2p::data::RouterInfo> r; std::shared_ptr<i2p::data::RouterInfo> r;
uint32_t relayTag = 0; uint32_t relayTag = 0;
for (auto& it: address->ssu->introducers) if (!address->ssu->introducers.empty ())
{ {
if (it.iTag && ts < it.iExp) std::vector<int> indicies;
for (int i = 0; i < (int)address->ssu->introducers.size (); i++) indicies.push_back(i);
if (indicies.size () > 1)
std::shuffle (indicies.begin(), indicies.end(), std::mt19937(std::random_device()()));
for (auto i: indicies)
{ {
r = i2p::data::netdb.FindRouter (it.iKey); const auto& introducer = address->ssu->introducers[indicies[i]];
if (r && r->IsReachableFrom (i2p::context.GetRouterInfo ())) if (introducer.iTag && ts < introducer.iExp)
{ {
relayTag = it.iTag; r = i2p::data::netdb.FindRouter (introducer.iKey);
if (relayTag) break; if (r && r->IsReachableFrom (i2p::context.GetRouterInfo ()))
{
relayTag = introducer.iTag;
if (relayTag) break;
}
} }
} }
} }

6
libi2pd/SSU2Session.cpp

@ -1070,6 +1070,7 @@ namespace transport
const uint8_t * introKey, uint64_t token) const uint8_t * introKey, uint64_t token)
{ {
// we are Charlie // we are Charlie
LogPrint (eLogDebug, "SSU2: Sending HolePunch to ", ep);
Header header; Header header;
uint8_t h[32], payload[SSU2_MAX_PACKET_SIZE]; uint8_t h[32], payload[SSU2_MAX_PACKET_SIZE];
// fill packet // fill packet
@ -1641,11 +1642,14 @@ namespace transport
SendHolePunch (bufbe32toh (buf + 33), ep, addr->i, token); SendHolePunch (bufbe32toh (buf + 33), ep, addr->i, token);
} }
else else
{
LogPrint (eLogWarning, "SSU2: RelayIntro unsupported address");
code = eSSU2RelayResponseCodeCharlieUnsupportedAddress; code = eSSU2RelayResponseCodeCharlieUnsupportedAddress;
}
} }
else else
{ {
LogPrint (eLogWarning, "SSU2: RelayInfo unknown address"); LogPrint (eLogWarning, "SSU2: RelayIntro unknown address");
code = eSSU2RelayResponseCodeCharlieAliceIsUnknown; code = eSSU2RelayResponseCodeCharlieAliceIsUnknown;
} }
} }

Loading…
Cancel
Save