mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-14 08:50:12 +00:00
disable NTCP for good
This commit is contained in:
parent
8483464aab
commit
a8d23b5439
@ -58,7 +58,7 @@ namespace config {
|
|||||||
("floodfill", bool_switch()->default_value(false), "Router will be floodfill (default: disabled)")
|
("floodfill", bool_switch()->default_value(false), "Router will be floodfill (default: disabled)")
|
||||||
("bandwidth", value<std::string>()->default_value(""), "Bandwidth limit: integer in KBps or letters: L (32), O (256), P (2048), X (>9000)")
|
("bandwidth", value<std::string>()->default_value(""), "Bandwidth limit: integer in KBps or letters: L (32), O (256), P (2048), X (>9000)")
|
||||||
("share", value<int>()->default_value(100), "Limit of transit traffic from max bandwidth in percents. (default: 100)")
|
("share", value<int>()->default_value(100), "Limit of transit traffic from max bandwidth in percents. (default: 100)")
|
||||||
("ntcp", value<bool>()->default_value(false), "Enable NTCP transport (default: disabled)")
|
("ntcp", value<bool>()->default_value(false), "Ignored. Always false")
|
||||||
("ssu", value<bool>()->default_value(true), "Enable SSU transport (default: enabled)")
|
("ssu", value<bool>()->default_value(true), "Enable SSU transport (default: enabled)")
|
||||||
("ntcpproxy", value<std::string>()->default_value(""), "Proxy URL for NTCP transport")
|
("ntcpproxy", value<std::string>()->default_value(""), "Proxy URL for NTCP transport")
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -63,7 +63,6 @@ namespace i2p
|
|||||||
bool ipv4; i2p::config::GetOption("ipv4", ipv4);
|
bool ipv4; i2p::config::GetOption("ipv4", ipv4);
|
||||||
bool ipv6; i2p::config::GetOption("ipv6", ipv6);
|
bool ipv6; i2p::config::GetOption("ipv6", ipv6);
|
||||||
bool ssu; i2p::config::GetOption("ssu", ssu);
|
bool ssu; i2p::config::GetOption("ssu", ssu);
|
||||||
bool ntcp; i2p::config::GetOption("ntcp", ntcp);
|
|
||||||
bool ntcp2; i2p::config::GetOption("ntcp2.enabled", ntcp2);
|
bool ntcp2; i2p::config::GetOption("ntcp2.enabled", ntcp2);
|
||||||
bool nat; i2p::config::GetOption("nat", nat);
|
bool nat; i2p::config::GetOption("nat", nat);
|
||||||
std::string ifname; i2p::config::GetOption("ifname", ifname);
|
std::string ifname; i2p::config::GetOption("ifname", ifname);
|
||||||
@ -83,8 +82,6 @@ namespace i2p
|
|||||||
|
|
||||||
if (ssu)
|
if (ssu)
|
||||||
routerInfo.AddSSUAddress (host.c_str(), port, routerInfo.GetIdentHash ());
|
routerInfo.AddSSUAddress (host.c_str(), port, routerInfo.GetIdentHash ());
|
||||||
if (ntcp)
|
|
||||||
routerInfo.AddNTCPAddress (host.c_str(), port);
|
|
||||||
}
|
}
|
||||||
if (ipv6)
|
if (ipv6)
|
||||||
{
|
{
|
||||||
@ -99,8 +96,6 @@ namespace i2p
|
|||||||
|
|
||||||
if (ssu)
|
if (ssu)
|
||||||
routerInfo.AddSSUAddress (host.c_str(), port, routerInfo.GetIdentHash ());
|
routerInfo.AddSSUAddress (host.c_str(), port, routerInfo.GetIdentHash ());
|
||||||
if (ntcp)
|
|
||||||
routerInfo.AddNTCPAddress (host.c_str(), port);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
routerInfo.SetCaps (i2p::data::RouterInfo::eReachable |
|
routerInfo.SetCaps (i2p::data::RouterInfo::eReachable |
|
||||||
@ -115,20 +110,17 @@ namespace i2p
|
|||||||
{
|
{
|
||||||
if (!m_NTCP2Keys) NewNTCP2Keys ();
|
if (!m_NTCP2Keys) NewNTCP2Keys ();
|
||||||
UpdateNTCP2Address (true);
|
UpdateNTCP2Address (true);
|
||||||
if (!ntcp) // NTCP2 should replace NTCP
|
bool published; i2p::config::GetOption("ntcp2.published", published);
|
||||||
|
if (published)
|
||||||
{
|
{
|
||||||
bool published; i2p::config::GetOption("ntcp2.published", published);
|
PublishNTCP2Address (port, true);
|
||||||
if (published)
|
if (ipv6)
|
||||||
{
|
{
|
||||||
PublishNTCP2Address (port, true);
|
// add NTCP2 ipv6 address
|
||||||
if (ipv6)
|
std::string host = "::1";
|
||||||
{
|
if (!i2p::config::IsDefault ("ntcp2.addressv6"))
|
||||||
// add NTCP2 ipv6 address
|
i2p::config::GetOption ("ntcp2.addressv6", host);
|
||||||
std::string host = "::1";
|
m_RouterInfo.AddNTCP2Address (m_NTCP2Keys->staticPublicKey, m_NTCP2Keys->iv, boost::asio::ip::address_v6::from_string (host), port);
|
||||||
if (!i2p::config::IsDefault ("ntcp2.addressv6"))
|
|
||||||
i2p::config::GetOption ("ntcp2.addressv6", host);
|
|
||||||
m_RouterInfo.AddNTCP2Address (m_NTCP2Keys->staticPublicKey, m_NTCP2Keys->iv, boost::asio::ip::address_v6::from_string (host), port);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -444,16 +436,10 @@ namespace i2p
|
|||||||
addr->ssu->introducers.clear ();
|
addr->ssu->introducers.clear ();
|
||||||
port = addr->port;
|
port = addr->port;
|
||||||
}
|
}
|
||||||
// remove NTCP or NTCP2 v4 address
|
// remove NTCP2 v4 address
|
||||||
bool ntcp; i2p::config::GetOption("ntcp", ntcp);
|
bool ntcp2; i2p::config::GetOption("ntcp2.enabled", ntcp2);
|
||||||
if (ntcp)
|
if (ntcp2)
|
||||||
PublishNTCPAddress (false);
|
PublishNTCP2Address (port, false, true);
|
||||||
else
|
|
||||||
{
|
|
||||||
bool ntcp2; i2p::config::GetOption("ntcp2.enabled", ntcp2);
|
|
||||||
if (ntcp2)
|
|
||||||
PublishNTCP2Address (port, false, true);
|
|
||||||
}
|
|
||||||
// update
|
// update
|
||||||
UpdateRouterInfo ();
|
UpdateRouterInfo ();
|
||||||
}
|
}
|
||||||
@ -477,23 +463,16 @@ namespace i2p
|
|||||||
addr->ssu->introducers.clear ();
|
addr->ssu->introducers.clear ();
|
||||||
port = addr->port;
|
port = addr->port;
|
||||||
}
|
}
|
||||||
// insert NTCP or NTCP2 back
|
// insert NTCP2 back
|
||||||
bool ntcp; i2p::config::GetOption("ntcp", ntcp);
|
bool ntcp2; i2p::config::GetOption("ntcp2.enabled", ntcp2);
|
||||||
if (ntcp)
|
if (ntcp2)
|
||||||
PublishNTCPAddress (true);
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
// ntcp2
|
bool published; i2p::config::GetOption ("ntcp2.published", published);
|
||||||
bool ntcp2; i2p::config::GetOption("ntcp2.enabled", ntcp2);
|
if (published)
|
||||||
if (ntcp2)
|
|
||||||
{
|
{
|
||||||
bool published; i2p::config::GetOption ("ntcp2.published", published);
|
uint16_t ntcp2Port; i2p::config::GetOption ("ntcp2.port", ntcp2Port);
|
||||||
if (published)
|
if (!ntcp2Port) ntcp2Port = port;
|
||||||
{
|
PublishNTCP2Address (ntcp2Port, true, true);
|
||||||
uint16_t ntcp2Port; i2p::config::GetOption ("ntcp2.port", ntcp2Port);
|
|
||||||
if (!ntcp2Port) ntcp2Port = port;
|
|
||||||
PublishNTCP2Address (ntcp2Port, true, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// update
|
// update
|
||||||
@ -506,7 +485,7 @@ namespace i2p
|
|||||||
{
|
{
|
||||||
m_RouterInfo.EnableV6 ();
|
m_RouterInfo.EnableV6 ();
|
||||||
// insert v6 addresses if necessary
|
// insert v6 addresses if necessary
|
||||||
bool foundSSU = false, foundNTCP = false, foundNTCP2 = false;
|
bool foundSSU = false, foundNTCP2 = false;
|
||||||
uint16_t port = 0;
|
uint16_t port = 0;
|
||||||
auto& addresses = m_RouterInfo.GetAddresses ();
|
auto& addresses = m_RouterInfo.GetAddresses ();
|
||||||
for (auto& addr: addresses)
|
for (auto& addr: addresses)
|
||||||
@ -515,12 +494,8 @@ namespace i2p
|
|||||||
{
|
{
|
||||||
if (addr->transportStyle == i2p::data::RouterInfo::eTransportSSU)
|
if (addr->transportStyle == i2p::data::RouterInfo::eTransportSSU)
|
||||||
foundSSU = true;
|
foundSSU = true;
|
||||||
else if (addr->IsNTCP2 ())
|
else if (addr->IsPublishedNTCP2 ())
|
||||||
{
|
foundNTCP2 = true;
|
||||||
if (addr->IsPublishedNTCP2 ()) foundNTCP2 = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
foundNTCP = true;
|
|
||||||
}
|
}
|
||||||
port = addr->port;
|
port = addr->port;
|
||||||
}
|
}
|
||||||
@ -552,16 +527,6 @@ namespace i2p
|
|||||||
m_RouterInfo.AddNTCP2Address (m_NTCP2Keys->staticPublicKey, m_NTCP2Keys->iv, boost::asio::ip::address::from_string (ntcp2Host), ntcp2Port);
|
m_RouterInfo.AddNTCP2Address (m_NTCP2Keys->staticPublicKey, m_NTCP2Keys->iv, boost::asio::ip::address::from_string (ntcp2Host), ntcp2Port);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// NTCP
|
|
||||||
if (!foundNTCP)
|
|
||||||
{
|
|
||||||
bool ntcp; i2p::config::GetOption("ntcp", ntcp);
|
|
||||||
if (ntcp)
|
|
||||||
{
|
|
||||||
std::string host = "::1";
|
|
||||||
m_RouterInfo.AddNTCPAddress (host.c_str (), port);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
m_RouterInfo.DisableV6 ();
|
m_RouterInfo.DisableV6 ();
|
||||||
|
@ -316,7 +316,7 @@ namespace data
|
|||||||
}
|
}
|
||||||
if (introducers) supportedTransports |= eSSUV4; // in case if host is not presented
|
if (introducers) supportedTransports |= eSSUV4; // in case if host is not presented
|
||||||
if (isNTCP2Only && address->ntcp2) address->ntcp2->isNTCP2Only = true;
|
if (isNTCP2Only && address->ntcp2) address->ntcp2->isNTCP2Only = true;
|
||||||
if (supportedTransports)
|
if (supportedTransports & ~(eNTCPV4 | eNTCPV6)) // exclude NTCP only
|
||||||
{
|
{
|
||||||
addresses->push_back(address);
|
addresses->push_back(address);
|
||||||
m_SupportedTransports |= supportedTransports;
|
m_SupportedTransports |= supportedTransports;
|
||||||
@ -477,7 +477,12 @@ namespace data
|
|||||||
s.write ((const char *)&address.date, sizeof (address.date));
|
s.write ((const char *)&address.date, sizeof (address.date));
|
||||||
std::stringstream properties;
|
std::stringstream properties;
|
||||||
if (address.transportStyle == eTransportNTCP)
|
if (address.transportStyle == eTransportNTCP)
|
||||||
WriteString (address.IsNTCP2 () ? "NTCP2" : "NTCP", s);
|
{
|
||||||
|
if (address.IsNTCP2 ())
|
||||||
|
WriteString ("NTCP2", s);
|
||||||
|
else
|
||||||
|
continue; // don't write NTCP address
|
||||||
|
}
|
||||||
else if (address.transportStyle == eTransportSSU)
|
else if (address.transportStyle == eTransportSSU)
|
||||||
{
|
{
|
||||||
WriteString ("SSU", s);
|
WriteString ("SSU", s);
|
||||||
@ -817,14 +822,6 @@ namespace data
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RouterInfo::IsNTCP (bool v4only) const
|
|
||||||
{
|
|
||||||
if (v4only)
|
|
||||||
return m_SupportedTransports & eNTCPV4;
|
|
||||||
else
|
|
||||||
return m_SupportedTransports & (eNTCPV4 | eNTCPV6);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RouterInfo::IsSSU (bool v4only) const
|
bool RouterInfo::IsSSU (bool v4only) const
|
||||||
{
|
{
|
||||||
if (v4only)
|
if (v4only)
|
||||||
@ -907,15 +904,6 @@ namespace data
|
|||||||
return m_Caps & Caps::eUnreachable; // non-reachable
|
return m_Caps & Caps::eUnreachable; // non-reachable
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<const RouterInfo::Address> RouterInfo::GetNTCPAddress (bool v4only) const
|
|
||||||
{
|
|
||||||
return GetAddress (
|
|
||||||
[v4only](std::shared_ptr<const RouterInfo::Address> address)->bool
|
|
||||||
{
|
|
||||||
return (address->transportStyle == eTransportNTCP) && !address->IsNTCP2Only () && (!v4only || address->host.is_v4 ());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
std::shared_ptr<const RouterInfo::Address> RouterInfo::GetSSUAddress (bool v4only) const
|
std::shared_ptr<const RouterInfo::Address> RouterInfo::GetSSUAddress (bool v4only) const
|
||||||
{
|
{
|
||||||
return GetAddress (
|
return GetAddress (
|
||||||
|
@ -153,7 +153,6 @@ namespace data
|
|||||||
uint64_t GetTimestamp () const { return m_Timestamp; };
|
uint64_t GetTimestamp () const { return m_Timestamp; };
|
||||||
int GetVersion () const { return m_Version; };
|
int GetVersion () const { return m_Version; };
|
||||||
Addresses& GetAddresses () { return *m_Addresses; }; // should be called for local RI only, otherwise must return shared_ptr
|
Addresses& GetAddresses () { return *m_Addresses; }; // should be called for local RI only, otherwise must return shared_ptr
|
||||||
std::shared_ptr<const Address> GetNTCPAddress (bool v4only = true) const;
|
|
||||||
std::shared_ptr<const Address> GetNTCP2Address (bool publishedOnly, bool v4only = true) const;
|
std::shared_ptr<const Address> GetNTCP2Address (bool publishedOnly, bool v4only = true) const;
|
||||||
std::shared_ptr<const Address> GetSSUAddress (bool v4only = true) const;
|
std::shared_ptr<const Address> GetSSUAddress (bool v4only = true) const;
|
||||||
std::shared_ptr<const Address> GetSSUV6Address () const;
|
std::shared_ptr<const Address> GetSSUV6Address () const;
|
||||||
@ -169,7 +168,6 @@ namespace data
|
|||||||
void ClearProperties () { m_Properties.clear (); };
|
void ClearProperties () { m_Properties.clear (); };
|
||||||
bool IsFloodfill () const { return m_Caps & Caps::eFloodfill; };
|
bool IsFloodfill () const { return m_Caps & Caps::eFloodfill; };
|
||||||
bool IsReachable () const { return m_Caps & Caps::eReachable; };
|
bool IsReachable () const { return m_Caps & Caps::eReachable; };
|
||||||
bool IsNTCP (bool v4only = true) const;
|
|
||||||
bool IsSSU (bool v4only = true) const;
|
bool IsSSU (bool v4only = true) const;
|
||||||
bool IsSSUV6 () const;
|
bool IsSSUV6 () const;
|
||||||
bool IsNTCP2 (bool v4only = true) const;
|
bool IsNTCP2 (bool v4only = true) const;
|
||||||
|
@ -472,41 +472,7 @@ namespace transport
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (peer.numAttempts == 1) // NTCP1
|
if (peer.numAttempts == 1)// SSU
|
||||||
{
|
|
||||||
peer.numAttempts++;
|
|
||||||
auto address = peer.router->GetNTCPAddress (!context.SupportsV6 ());
|
|
||||||
if (address && m_NTCPServer)
|
|
||||||
{
|
|
||||||
if (!peer.router->UsesIntroducer () && !peer.router->IsUnreachable ())
|
|
||||||
{
|
|
||||||
if(!m_NTCPServer->ShouldLimit())
|
|
||||||
{
|
|
||||||
auto s = std::make_shared<NTCPSession> (*m_NTCPServer, peer.router);
|
|
||||||
if(m_NTCPServer->UsingProxy())
|
|
||||||
{
|
|
||||||
NTCPServer::RemoteAddressType remote = NTCPServer::eIP4Address;
|
|
||||||
std::string addr = address->host.to_string();
|
|
||||||
|
|
||||||
if(address->host.is_v6())
|
|
||||||
remote = NTCPServer::eIP6Address;
|
|
||||||
|
|
||||||
m_NTCPServer->ConnectWithProxy(addr, address->port, remote, s);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
m_NTCPServer->Connect (address->host, address->port, s);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LogPrint(eLogWarning, "Transports: NTCP Limit hit falling back to SSU");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
LogPrint (eLogDebug, "Transports: NTCP address is not present for ", i2p::data::GetIdentHashAbbreviation (ident), ", trying SSU");
|
|
||||||
}
|
|
||||||
if (peer.numAttempts == 2)// SSU
|
|
||||||
{
|
{
|
||||||
peer.numAttempts++;
|
peer.numAttempts++;
|
||||||
if (m_SSUServer && peer.router->IsSSU (!context.SupportsV6 ()))
|
if (m_SSUServer && peer.router->IsSSU (!context.SupportsV6 ()))
|
||||||
|
Loading…
Reference in New Issue
Block a user