Browse Source

correct check of ipv4/ipv6 address

pull/1662/head
orignal 4 years ago
parent
commit
bce6685d0c
  1. 4
      libi2pd/RouterContext.cpp
  2. 22
      libi2pd/RouterInfo.cpp

4
libi2pd/RouterContext.cpp

@ -484,7 +484,7 @@ namespace i2p
addr->ssu->introducers.clear (); addr->ssu->introducers.clear ();
port = addr->port; port = addr->port;
} }
// unpiblish NTCP2 addreeses // unpublish NTCP2 addreeses
bool ntcp2; i2p::config::GetOption("ntcp2.enabled", ntcp2); bool ntcp2; i2p::config::GetOption("ntcp2.enabled", ntcp2);
if (ntcp2) if (ntcp2)
PublishNTCP2Address (port, false, v4, v6, false); PublishNTCP2Address (port, false, v4, v6, false);
@ -677,7 +677,7 @@ namespace i2p
if (addr->IsPublishedNTCP2 ()) if (addr->IsPublishedNTCP2 ())
{ {
bool isYgg1 = i2p::util::net::IsYggdrasilAddress (addr->host); bool isYgg1 = i2p::util::net::IsYggdrasilAddress (addr->host);
if (addr->host.is_v6 () && ((isYgg && isYgg1) || (!isYgg && !isYgg1))) if (addr->IsV6 () && ((isYgg && isYgg1) || (!isYgg && !isYgg1)))
{ {
if (addr->host != host) if (addr->host != host)
{ {

22
libi2pd/RouterInfo.cpp

@ -554,7 +554,7 @@ namespace data
if (address.IsNTCP2 ()) if (address.IsNTCP2 ())
{ {
WriteString ("NTCP2", s); WriteString ("NTCP2", s);
if (address.IsPublishedNTCP2 () && !address.host.is_unspecified ()) if (address.IsPublishedNTCP2 () && !address.host.is_unspecified () && address.port)
isPublished = true; isPublished = true;
else else
{ {
@ -998,9 +998,16 @@ namespace data
for (auto it = m_Addresses->begin (); it != m_Addresses->end ();) for (auto it = m_Addresses->begin (); it != m_Addresses->end ();)
{ {
auto addr = *it; auto addr = *it;
if (addr->IsV6 ())
{
if (addr->IsV4 ())
{
addr->caps &= ~AddressCaps::eV6; addr->caps &= ~AddressCaps::eV6;
if (addr->host.is_v6 ()) ++it;
}
else
it = m_Addresses->erase (it); it = m_Addresses->erase (it);
}
else else
++it; ++it;
} }
@ -1015,9 +1022,16 @@ namespace data
for (auto it = m_Addresses->begin (); it != m_Addresses->end ();) for (auto it = m_Addresses->begin (); it != m_Addresses->end ();)
{ {
auto addr = *it; auto addr = *it;
if (addr->IsV4 ())
{
if (addr->IsV6 ())
{
addr->caps &= ~AddressCaps::eV4; addr->caps &= ~AddressCaps::eV4;
if (addr->host.is_v4 ()) ++it;
}
else
it = m_Addresses->erase (it); it = m_Addresses->erase (it);
}
else else
++it; ++it;
} }
@ -1188,7 +1202,7 @@ namespace data
for (auto& addr: *m_Addresses) for (auto& addr: *m_Addresses)
{ {
// TODO: implement SSU // TODO: implement SSU
if (addr->transportStyle == eTransportNTCP && (!addr->IsPublishedNTCP2 () || addr->port)) if (addr->transportStyle == eTransportNTCP && !addr->IsPublishedNTCP2 ())
{ {
addr->caps &= ~(eV4 | eV6); addr->caps &= ~(eV4 | eV6);
addr->caps |= transports; addr->caps |= transports;

Loading…
Cancel
Save