1
0
mirror of https://github.com/PurpleI2P/i2pd.git synced 2025-02-02 06:54:15 +00:00

return relay tag for ipv6 introducer

This commit is contained in:
orignal 2021-03-30 11:31:11 -04:00
parent 5cca5472e6
commit 25eae3c116
4 changed files with 10 additions and 11 deletions

View File

@ -1172,7 +1172,7 @@ namespace data
return GetRandomRouter (
[](std::shared_ptr<const RouterInfo> router)->bool
{
return router->IsIntroducer () && !router->IsHidden () && !router->IsFloodfill (); // floodfills don't send relay tag
return router->IsIntroducer (true) && !router->IsHidden () && !router->IsFloodfill (); // floodfills don't send relay tag
});
}

View File

@ -1105,8 +1105,7 @@ namespace data
bool RouterInfo::IsPeerTesting (bool v4) const
{
auto supportedTransports = m_SupportedTransports & (v4 ? eSSUV4 : eSSUV6);
if (!supportedTransports) return false;
if (!(m_SupportedTransports & (v4 ? eSSUV4 : eSSUV6))) return false;
return (bool)GetAddress (
[v4](std::shared_ptr<const RouterInfo::Address> address)->bool
{
@ -1115,14 +1114,14 @@ namespace data
});
}
bool RouterInfo::IsIntroducer () const
bool RouterInfo::IsIntroducer (bool v4) const
{
// TODO: support ipv6
if (!(m_SupportedTransports & eSSUV4)) return false;
if (!(m_SupportedTransports & (v4 ? eSSUV4 : eSSUV6))) return false;
return (bool)GetAddress (
[](std::shared_ptr<const RouterInfo::Address> address)->bool
[v4](std::shared_ptr<const RouterInfo::Address> address)->bool
{
return (address->transportStyle == eTransportSSU) && address->IsIntroducer ();
return (address->transportStyle == eTransportSSU) && address->IsIntroducer () &&
((v4 && address->IsV4 ()) || (!v4 && address->IsV6 ()));
});
}

View File

@ -210,7 +210,7 @@ namespace data
bool IsExtraBandwidth () const { return m_Caps & RouterInfo::eExtraBandwidth; };
bool IsEligibleFloodfill () const;
bool IsPeerTesting (bool v4) const;
bool IsIntroducer () const;
bool IsIntroducer (bool v4) const;
uint8_t GetCaps () const { return m_Caps; };
void SetCaps (uint8_t caps);

View File

@ -212,7 +212,7 @@ namespace transport
{
uint8_t extendedOptionsLen = buf[headerSize];
headerSize++;
if (extendedOptionsLen >= 3) // options are presented
if (extendedOptionsLen >= 2) // options are presented
{
uint16_t flags = bufbe16toh (buf + headerSize);
sendRelayTag = flags & EXTENDED_OPTIONS_FLAG_REQUEST_RELAY_TAG;
@ -464,7 +464,7 @@ namespace transport
else
s.Insert (address->host.to_v6 ().to_bytes ().data (), 16); // our IP V6
s.Insert<uint16_t> (htobe16 (address->port)); // our port
if (sendRelayTag && i2p::context.GetRouterInfo ().IsIntroducer () && !IsV6 ())
if (sendRelayTag && i2p::context.GetRouterInfo ().IsIntroducer (!IsV6 ()))
{
RAND_bytes((uint8_t *)&m_SentRelayTag, 4);
if (!m_SentRelayTag) m_SentRelayTag = 1;