Browse Source

check availability of particular address

pull/1634/head
orignal 3 years ago
parent
commit
89e8d99294
  1. 5
      libi2pd/RouterInfo.cpp
  2. 3
      libi2pd/RouterInfo.h
  3. 6
      libi2pd/Transports.cpp

5
libi2pd/RouterInfo.cpp

@ -837,6 +837,11 @@ namespace data @@ -837,6 +837,11 @@ namespace data
return m_SupportedTransports & (eNTCP2V4 | eNTCP2V6);
}
bool RouterInfo::IsNTCP2V6 () const
{
return m_SupportedTransports & eNTCP2V6;
}
bool RouterInfo::IsV6 () const
{
return m_SupportedTransports & (eSSUV6 | eNTCP2V6);

3
libi2pd/RouterInfo.h

@ -170,6 +170,7 @@ namespace data @@ -170,6 +170,7 @@ namespace data
bool IsSSU (bool v4only = true) const;
bool IsSSUV6 () const;
bool IsNTCP2 (bool v4only = true) const;
bool IsNTCP2V6 () const;
bool IsV6 () const;
bool IsV4 () const;
bool IsMesh () const;
@ -179,7 +180,7 @@ namespace data @@ -179,7 +180,7 @@ namespace data
void DisableV4 ();
void EnableMesh ();
void DisableMesh ();
bool IsCompatible (const RouterInfo& other) const { return m_SupportedTransports & other.m_SupportedTransports; };
bool IsCompatible (const RouterInfo& other) const { return m_SupportedTransports & other.m_SupportedTransports; };
bool HasValidAddresses () const { return m_SupportedTransports; };
bool UsesIntroducer () const;
bool IsIntroducer () const { return m_Caps & eSSUIntroducer; };

6
libi2pd/Transports.cpp

@ -397,7 +397,7 @@ namespace transport @@ -397,7 +397,7 @@ namespace transport
std::shared_ptr<const RouterInfo::Address> address;
if (!peer.numAttempts) // NTCP2 ipv6
{
if (context.SupportsV6 ())
if (context.GetRouterInfo ().IsNTCP2V6 () && peer.router->IsNTCP2V6 ())
{
address = peer.router->GetPublishedNTCP2V6Address ();
if (address && m_CheckReserved && i2p::util::net::IsInReservedRange(address->host))
@ -407,7 +407,7 @@ namespace transport @@ -407,7 +407,7 @@ namespace transport
}
if (!address && peer.numAttempts == 1) // NTCP2 ipv4
{
if (context.SupportsV4 () && !peer.router->IsUnreachable ())
if (context.GetRouterInfo ().IsNTCP2 (true) && peer.router->IsNTCP2 (true) && !peer.router->IsUnreachable ())
{
address = peer.router->GetPublishedNTCP2V4Address ();
if (address && m_CheckReserved && i2p::util::net::IsInReservedRange(address->host))
@ -453,7 +453,7 @@ namespace transport @@ -453,7 +453,7 @@ namespace transport
if (peer.numAttempts == 3) // Mesh
{
peer.numAttempts++;
if (context.SupportsMesh () && m_NTCP2Server)
if (m_NTCP2Server && context.GetRouterInfo ().IsMesh () && peer.router->IsMesh ())
{
auto address = peer.router->GetYggdrasilAddress ();
if (address)

Loading…
Cancel
Save