diff --git a/nano/node/network.cpp b/nano/node/network.cpp index 5885520a7f..8aaecce04d 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -418,12 +418,16 @@ class network_message_visitor : public nano::message_visitor } node.stats.inc (nano::stat::type::message, nano::stat::detail::keepalive, nano::stat::dir::in); node.network.merge_peers (message_a.peers); + // Check for special node port data auto peer0 (message_a.peers[0]); if (peer0.address () == boost::asio::ip::address_v6{} && peer0.port () != 0) { nano::endpoint new_endpoint (channel->get_tcp_endpoint ().address (), peer0.port ()); node.network.merge_peer (new_endpoint); + + // Remember this for future forwarding to other peers + channel->set_peering_endpoint (new_endpoint); } } void publish (nano::publish const & message_a) override @@ -652,9 +656,9 @@ void nano::network::random_fill (std::array & target_a) const auto j (target_a.begin ()); for (auto i (peers.begin ()), n (peers.end ()); i != n; ++i, ++j) { - debug_assert ((*i)->get_endpoint ().address ().is_v6 ()); + debug_assert ((*i)->get_peering_endpoint ().address ().is_v6 ()); debug_assert (j < target_a.end ()); - *j = (*i)->get_endpoint (); + *j = (*i)->get_peering_endpoint (); } } diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index f0623375e9..ba03f71ee1 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -257,7 +257,7 @@ nano::tcp_endpoint nano::transport::tcp_channels::bootstrap_peer (uint8_t connec { if (i->channel->get_network_version () >= connection_protocol_version_min) { - result = i->endpoint (); + result = nano::transport::map_endpoint_to_tcp (i->channel->get_peering_endpoint ()); channels.get ().modify (i, [] (channel_tcp_wrapper & wrapper_a) { wrapper_a.channel->set_last_bootstrap_attempt (std::chrono::steady_clock::now ()); }); diff --git a/nano/node/transport/transport.cpp b/nano/node/transport/transport.cpp index beda88c82b..7408496cac 100644 --- a/nano/node/transport/transport.cpp +++ b/nano/node/transport/transport.cpp @@ -134,6 +134,23 @@ void nano::transport::channel::send (nano::message & message_a, std::function node_id{ boost::none }; std::atomic network_version{ 0 }; + std::optional peering_endpoint{}; protected: nano::node & node;