diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/p2p/net_node.inl | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl index 2f47de0f0..93a925971 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -71,6 +71,17 @@ #define MIN_WANTED_SEED_NODES 12 +static inline boost::asio::ip::address_v4 make_address_v4_from_v6(const boost::asio::ip::address_v6& a) +{ + const auto &bytes = a.to_bytes(); + uint32_t v4 = 0; + v4 = (v4 << 8) | bytes[12]; + v4 = (v4 << 8) | bytes[13]; + v4 = (v4 << 8) | bytes[14]; + v4 = (v4 << 8) | bytes[15]; + return boost::asio::ip::address_v4(v4); +} + namespace nodetool { template<class t_payload_net_handler> @@ -781,9 +792,21 @@ namespace nodetool case epee::net_utils::zone::public_: return get_dns_seed_nodes(); case epee::net_utils::zone::tor: - return {}; + if (m_nettype == cryptonote::MAINNET) + { + return { + "xwvz3ekocr3dkyxfkmgm2hvbpzx2ysqmaxgter7znnqrhoicygkfswid.onion:18083", + "4pixvbejrvihnkxmduo2agsnmc3rrulrqc7s3cbwwrep6h6hrzsibeqd.onion:18083" + }; + } case epee::net_utils::zone::i2p: - return {}; + if (m_nettype == cryptonote::MAINNET) + { + return { + "s3l6ke4ed3df466khuebb4poienoingwof7oxtbo6j4n56sghe3a.b32.i2p:18080", + "sel36x6fibfzujwvt4hf5gxolz6kd3jpvbjqg6o3ud2xtionyl2q.b32.i2p:18080" + }; + } default: break; } @@ -1484,36 +1507,34 @@ namespace nodetool const uint32_t actual_ip = na.as<const epee::net_utils::ipv4_network_address>().ip(); classB.insert(actual_ip & 0x0000ffff); } -#if BOOST_VERSION > 106600 else if (cntxt.m_remote_address.get_type_id() == epee::net_utils::ipv6_network_address::get_type_id()) { const epee::net_utils::network_address na = cntxt.m_remote_address; const boost::asio::ip::address_v6 &actual_ip = na.as<const epee::net_utils::ipv6_network_address>().ip(); if (actual_ip.is_v4_mapped()) { - boost::asio::ip::address_v4 v4ip = make_address_v4(boost::asio::ip::v4_mapped, actual_ip); + boost::asio::ip::address_v4 v4ip = make_address_v4_from_v6(actual_ip); uint32_t actual_ipv4; memcpy(&actual_ipv4, v4ip.to_bytes().data(), sizeof(actual_ipv4)); classB.insert(actual_ipv4 & ntohl(0xffff0000)); } } -#endif return true; }); } auto get_host_string = [](const epee::net_utils::network_address &address) { -#if BOOST_VERSION > 106600 if (address.get_type_id() == epee::net_utils::ipv6_network_address::get_type_id()) { boost::asio::ip::address_v6 actual_ip = address.as<const epee::net_utils::ipv6_network_address>().ip(); if (actual_ip.is_v4_mapped()) { - boost::asio::ip::address_v4 v4ip = make_address_v4(boost::asio::ip::v4_mapped, actual_ip); - return epee::net_utils::ipv4_network_address(v4ip.to_uint(), 0).host_str(); + boost::asio::ip::address_v4 v4ip = make_address_v4_from_v6(actual_ip); + uint32_t actual_ipv4; + memcpy(&actual_ipv4, v4ip.to_bytes().data(), sizeof(actual_ipv4)); + return epee::net_utils::ipv4_network_address(actual_ipv4, 0).host_str(); } } -#endif return address.host_str(); }; std::unordered_set<std::string> hosts_added; @@ -1533,20 +1554,18 @@ namespace nodetool uint32_t actual_ip = na.as<const epee::net_utils::ipv4_network_address>().ip(); skip = classB.find(actual_ip & 0x0000ffff) != classB.end(); } -#if BOOST_VERSION > 106600 else if (skip_duplicate_class_B && pe.adr.get_type_id() == epee::net_utils::ipv6_network_address::get_type_id()) { const epee::net_utils::network_address na = pe.adr; const boost::asio::ip::address_v6 &actual_ip = na.as<const epee::net_utils::ipv6_network_address>().ip(); if (actual_ip.is_v4_mapped()) { - boost::asio::ip::address_v4 v4ip = make_address_v4(boost::asio::ip::v4_mapped, actual_ip); + boost::asio::ip::address_v4 v4ip = make_address_v4_from_v6(actual_ip); uint32_t actual_ipv4; memcpy(&actual_ipv4, v4ip.to_bytes().data(), sizeof(actual_ipv4)); skip = classB.find(actual_ipv4 & ntohl(0xffff0000)) != classB.end(); } } -#endif // consider each host once, to avoid giving undue inflence to hosts running several nodes if (!skip) |