mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 04:04:16 +00:00
enable/disable NTCP2 address
This commit is contained in:
parent
4cf79088f9
commit
f7415c8a8f
@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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…
x
Reference in New Issue
Block a user