Browse Source

enable/disable NTCP2 address

pull/1221/head
orignal 6 years ago
parent
commit
f7415c8a8f
  1. 4
      daemon/Daemon.cpp
  2. 41
      libi2pd/RouterContext.cpp
  3. 3
      libi2pd/RouterContext.h

4
daemon/Daemon.cpp

@ -159,8 +159,10 @@ namespace i2p
if (published) if (published)
{ {
uint16_t port; i2p::config::GetOption("ntcp2.port", port); uint16_t port; i2p::config::GetOption("ntcp2.port", port);
i2p::context.PublishNTCP2Address (port); i2p::context.PublishNTCP2Address (port, true); // publish
} }
else
i2p::context.PublishNTCP2Address (port, false); // unpublish
} }
bool transit; i2p::config::GetOption("notransit", transit); bool transit; i2p::config::GetOption("notransit", transit);

41
libi2pd/RouterContext.cpp

@ -96,8 +96,7 @@ namespace i2p
if (ntcp2) // TODO: should update routerInfo, but we ignore upublished NTCP2 addresses for now if (ntcp2) // TODO: should update routerInfo, but we ignore upublished NTCP2 addresses for now
{ {
NewNTCP2Keys (); NewNTCP2Keys ();
m_RouterInfo.AddNTCP2Address (m_NTCP2Keys->staticPublicKey, m_NTCP2Keys->iv); UpdateNTCP2Address (true);
UpdateRouterInfo ();
} }
} }
@ -156,17 +155,17 @@ namespace i2p
UpdateRouterInfo (); UpdateRouterInfo ();
} }
void RouterContext::PublishNTCP2Address (int port) void RouterContext::PublishNTCP2Address (int port, bool publish)
{ {
if (!port) if (!port)
port = rand () % (30777 - 9111) + 9111; // I2P network ports range port = rand () % (30777 - 9111) + 9111; // I2P network ports range
bool updated = false; bool updated = false;
for (auto& address : m_RouterInfo.GetAddresses ()) for (auto& address : m_RouterInfo.GetAddresses ())
{ {
if (address->IsNTCP2 () && address->port != port) if (address->IsNTCP2 () && (address->port != port || address->ntcp2->isPublished != publish))
{ {
address->port = port; address->port = port;
address->ntcp2->isPublished = true; address->ntcp2->isPublished = publish;
updated = true; updated = true;
} }
} }
@ -174,6 +173,32 @@ namespace i2p
UpdateRouterInfo (); UpdateRouterInfo ();
} }
void RouterContext::UpdateNTCP2Address (bool enable)
{
auto& addresses = m_RouterInfo.GetAddresses ();
bool found = false, updated = false;
for (auto it = addresses.begin (); it != addresses.end (); ++it)
{
if ((*it)->IsNTCP2 ())
{
found = true;
if (!enable)
{
addresses.erase (it);
updated= true;
}
break;
}
}
if (enable && !found)
{
m_RouterInfo.AddNTCP2Address (m_NTCP2Keys->staticPublicKey, m_NTCP2Keys->iv);
updated = true;
}
if (updated)
UpdateRouterInfo ();
}
void RouterContext::UpdateAddress (const boost::asio::ip::address& host) void RouterContext::UpdateAddress (const boost::asio::ip::address& host)
{ {
bool updated = false; bool updated = false;
@ -310,7 +335,7 @@ namespace i2p
auto& addresses = m_RouterInfo.GetAddresses (); auto& addresses = m_RouterInfo.GetAddresses ();
for (auto it = addresses.begin (); it != addresses.end (); ++it) for (auto it = addresses.begin (); it != addresses.end (); ++it)
{ {
if ((*it)->transportStyle == i2p::data::RouterInfo::eTransportNTCP && if ((*it)->transportStyle == i2p::data::RouterInfo::eTransportNTCP && !(*it)->IsNTCP2 () &&
(*it)->host.is_v4 ()) (*it)->host.is_v4 ())
{ {
addresses.erase (it); addresses.erase (it);
@ -490,9 +515,11 @@ namespace i2p
if (!m_NTCP2Keys) if (!m_NTCP2Keys)
{ {
NewNTCP2Keys (); NewNTCP2Keys ();
m_RouterInfo.AddNTCP2Address (m_NTCP2Keys->staticPublicKey, m_NTCP2Keys->iv); UpdateNTCP2Address (true); // enable NTCP2
} }
} }
else
UpdateNTCP2Address (false); // disable NTCP2
return true; return true;
} }

3
libi2pd/RouterContext.h

@ -78,7 +78,8 @@ namespace i2p
void UpdatePort (int port); // called from Daemon void UpdatePort (int port); // called from Daemon
void UpdateAddress (const boost::asio::ip::address& host); // called from SSU or Daemon void UpdateAddress (const boost::asio::ip::address& host); // called from SSU or Daemon
void PublishNTCP2Address (int port); void PublishNTCP2Address (int port, bool publish = true);
void UpdateNTCP2Address (bool enable);
bool AddIntroducer (const i2p::data::RouterInfo::Introducer& introducer); bool AddIntroducer (const i2p::data::RouterInfo::Introducer& introducer);
void RemoveIntroducer (const boost::asio::ip::udp::endpoint& e); void RemoveIntroducer (const boost::asio::ip::udp::endpoint& e);
bool IsUnreachable () const; bool IsUnreachable () const;

Loading…
Cancel
Save