mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 08:14:15 +00:00
published field for SSU addresses
This commit is contained in:
parent
ff89edf127
commit
5c9b478e46
@ -250,7 +250,7 @@ namespace i2p
|
|||||||
bool updated = false;
|
bool updated = false;
|
||||||
for (auto& address : m_RouterInfo.GetAddresses ())
|
for (auto& address : m_RouterInfo.GetAddresses ())
|
||||||
{
|
{
|
||||||
if (address->IsNTCP2 () && (address->port != port || address->ntcp2->isPublished != publish))
|
if (address->IsNTCP2 () && (address->port != port || address->published != publish))
|
||||||
{
|
{
|
||||||
bool isAddr = v4 && address->IsV4 ();
|
bool isAddr = v4 && address->IsV4 ();
|
||||||
if (!isAddr && (v6 || ygg))
|
if (!isAddr && (v6 || ygg))
|
||||||
@ -270,7 +270,7 @@ namespace i2p
|
|||||||
}
|
}
|
||||||
if (port) address->port = port;
|
if (port) address->port = port;
|
||||||
address->cost = publish ? i2p::data::COST_NTCP2_PUBLISHED : i2p::data::COST_NTCP2_NON_PUBLISHED;
|
address->cost = publish ? i2p::data::COST_NTCP2_PUBLISHED : i2p::data::COST_NTCP2_NON_PUBLISHED;
|
||||||
address->ntcp2->isPublished = publish;
|
address->published = publish;
|
||||||
address->ntcp2->iv = m_NTCP2Keys->iv;
|
address->ntcp2->iv = m_NTCP2Keys->iv;
|
||||||
updated = true;
|
updated = true;
|
||||||
}
|
}
|
||||||
@ -483,6 +483,7 @@ namespace i2p
|
|||||||
if (addr->ssu && ((v4 && addr->IsV4 ()) || (v6 && addr->IsV6 ())))
|
if (addr->ssu && ((v4 && addr->IsV4 ()) || (v6 && addr->IsV6 ())))
|
||||||
{
|
{
|
||||||
addr->cost = i2p::data::COST_SSU_THROUGH_INTRODUCERS;
|
addr->cost = i2p::data::COST_SSU_THROUGH_INTRODUCERS;
|
||||||
|
addr->published = false;
|
||||||
addr->caps &= ~i2p::data::RouterInfo::eSSUIntroducer; // can't be introducer
|
addr->caps &= ~i2p::data::RouterInfo::eSSUIntroducer; // can't be introducer
|
||||||
addr->ssu->introducers.clear ();
|
addr->ssu->introducers.clear ();
|
||||||
port = addr->port;
|
port = addr->port;
|
||||||
@ -514,6 +515,7 @@ namespace i2p
|
|||||||
if (addr->ssu && ((v4 && addr->IsV4 ()) || (v6 && addr->IsV6 ())))
|
if (addr->ssu && ((v4 && addr->IsV4 ()) || (v6 && addr->IsV6 ())))
|
||||||
{
|
{
|
||||||
addr->cost = i2p::data::COST_SSU_DIRECT;
|
addr->cost = i2p::data::COST_SSU_DIRECT;
|
||||||
|
addr->published = true;
|
||||||
addr->caps |= i2p::data::RouterInfo::eSSUIntroducer;
|
addr->caps |= i2p::data::RouterInfo::eSSUIntroducer;
|
||||||
addr->ssu->introducers.clear ();
|
addr->ssu->introducers.clear ();
|
||||||
port = addr->port;
|
port = addr->port;
|
||||||
|
@ -260,7 +260,7 @@ namespace data
|
|||||||
else if (!strcmp (key, "i")) // ntcp2 iv
|
else if (!strcmp (key, "i")) // ntcp2 iv
|
||||||
{
|
{
|
||||||
Base64ToByteStream (value, strlen (value), address->ntcp2->iv, 16);
|
Base64ToByteStream (value, strlen (value), address->ntcp2->iv, 16);
|
||||||
address->ntcp2->isPublished = true; // presence if "i" means "published"
|
address->published = true; // presence if "i" means "published"
|
||||||
}
|
}
|
||||||
else if (key[0] == 'i')
|
else if (key[0] == 'i')
|
||||||
{
|
{
|
||||||
@ -308,7 +308,7 @@ namespace data
|
|||||||
else
|
else
|
||||||
supportedTransports |= eNTCP2V4;
|
supportedTransports |= eNTCP2V4;
|
||||||
}
|
}
|
||||||
else if (!address->ntcp2->isPublished)
|
else if (!address->published)
|
||||||
{
|
{
|
||||||
if (address->caps)
|
if (address->caps)
|
||||||
{
|
{
|
||||||
@ -348,6 +348,8 @@ namespace data
|
|||||||
}
|
}
|
||||||
if (!numValid) address->ssu->introducers.resize (0);
|
if (!numValid) address->ssu->introducers.resize (0);
|
||||||
}
|
}
|
||||||
|
else if (isHost && address->port)
|
||||||
|
address->published = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (supportedTransports)
|
if (supportedTransports)
|
||||||
@ -564,7 +566,7 @@ namespace data
|
|||||||
if (address.IsPeerTesting ()) caps += CAPS_FLAG_SSU_TESTING;
|
if (address.IsPeerTesting ()) caps += CAPS_FLAG_SSU_TESTING;
|
||||||
if (address.host.is_v4 ())
|
if (address.host.is_v4 ())
|
||||||
{
|
{
|
||||||
if (IsReachable ())
|
if (address.published)
|
||||||
{
|
{
|
||||||
isPublished = true;
|
isPublished = true;
|
||||||
if (address.IsIntroducer ()) caps += CAPS_FLAG_SSU_INTRODUCER;
|
if (address.IsIntroducer ()) caps += CAPS_FLAG_SSU_INTRODUCER;
|
||||||
@ -574,8 +576,13 @@ namespace data
|
|||||||
}
|
}
|
||||||
else if (address.host.is_v6 ())
|
else if (address.host.is_v6 ())
|
||||||
{
|
{
|
||||||
isPublished = true;
|
if (address.published)
|
||||||
if (address.IsIntroducer ()) caps += CAPS_FLAG_SSU_INTRODUCER;
|
{
|
||||||
|
isPublished = true;
|
||||||
|
if (address.IsIntroducer ()) caps += CAPS_FLAG_SSU_INTRODUCER;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
caps += CAPS_FLAG_V6;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -807,6 +814,7 @@ namespace data
|
|||||||
addr->port = port;
|
addr->port = port;
|
||||||
addr->transportStyle = eTransportSSU;
|
addr->transportStyle = eTransportSSU;
|
||||||
addr->cost = COST_SSU_DIRECT; // NTCP2 should have priority over SSU
|
addr->cost = COST_SSU_DIRECT; // NTCP2 should have priority over SSU
|
||||||
|
addr->published = true;
|
||||||
addr->caps = i2p::data::RouterInfo::eSSUTesting | i2p::data::RouterInfo::eSSUIntroducer; // BC;
|
addr->caps = i2p::data::RouterInfo::eSSUTesting | i2p::data::RouterInfo::eSSUIntroducer; // BC;
|
||||||
addr->date = 0;
|
addr->date = 0;
|
||||||
addr->ssu.reset (new SSUExt ());
|
addr->ssu.reset (new SSUExt ());
|
||||||
@ -831,7 +839,7 @@ namespace data
|
|||||||
addr->caps = 0;
|
addr->caps = 0;
|
||||||
addr->date = 0;
|
addr->date = 0;
|
||||||
addr->ntcp2.reset (new NTCP2Ext ());
|
addr->ntcp2.reset (new NTCP2Ext ());
|
||||||
if (port) addr->ntcp2->isPublished = true;
|
if (port) addr->published = true;
|
||||||
memcpy (addr->ntcp2->staticKey, staticKey, 32);
|
memcpy (addr->ntcp2->staticKey, staticKey, 32);
|
||||||
memcpy (addr->ntcp2->iv, iv, 16);
|
memcpy (addr->ntcp2->iv, iv, 16);
|
||||||
m_Addresses->push_back(std::move(addr));
|
m_Addresses->push_back(std::move(addr));
|
||||||
|
@ -115,7 +115,6 @@ namespace data
|
|||||||
{
|
{
|
||||||
Tag<32> staticKey;
|
Tag<32> staticKey;
|
||||||
Tag<16> iv;
|
Tag<16> iv;
|
||||||
bool isPublished = false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Address
|
struct Address
|
||||||
@ -125,6 +124,7 @@ namespace data
|
|||||||
int port;
|
int port;
|
||||||
uint64_t date;
|
uint64_t date;
|
||||||
uint8_t cost, caps;
|
uint8_t cost, caps;
|
||||||
|
bool published = false;
|
||||||
std::unique_ptr<SSUExt> ssu; // not null for SSU
|
std::unique_ptr<SSUExt> ssu; // not null for SSU
|
||||||
std::unique_ptr<NTCP2Ext> ntcp2; // not null for NTCP2
|
std::unique_ptr<NTCP2Ext> ntcp2; // not null for NTCP2
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ namespace data
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool IsNTCP2 () const { return (bool)ntcp2; };
|
bool IsNTCP2 () const { return (bool)ntcp2; };
|
||||||
bool IsPublishedNTCP2 () const { return IsNTCP2 () && ntcp2->isPublished; };
|
bool IsPublishedNTCP2 () const { return IsNTCP2 () && published; };
|
||||||
bool IsReachableSSU () const { return (bool)ssu && (!host.is_unspecified () || !ssu->introducers.empty ()); };
|
bool IsReachableSSU () const { return (bool)ssu && (!host.is_unspecified () || !ssu->introducers.empty ()); };
|
||||||
bool UsesIntroducer () const { return (bool)ssu && !ssu->introducers.empty (); };
|
bool UsesIntroducer () const { return (bool)ssu && !ssu->introducers.empty (); };
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user