From af1f6d061fd4fcef429eac4008568f25b3adccf9 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Wed, 23 Jan 2019 12:31:31 -0600 Subject: [PATCH] Allow local preconfigured peers (#1105) --- nano/node/node.cpp | 13 +++++++++---- nano/node/node.hpp | 2 +- nano/node/peers.cpp | 4 ++-- nano/node/peers.hpp | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 6d5f2ccc..8ea60eb3 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -177,15 +177,20 @@ void nano::network::send_keepalive (nano::endpoint const & endpoint_a) }); } -void nano::node::keepalive (std::string const & address_a, uint16_t port_a) +void nano::node::keepalive (std::string const & address_a, uint16_t port_a, bool preconfigured_peer_a) { auto node_l (shared_from_this ()); - network.resolver.async_resolve (boost::asio::ip::udp::resolver::query (address_a, std::to_string (port_a)), [node_l, address_a, port_a](boost::system::error_code const & ec, boost::asio::ip::udp::resolver::iterator i_a) { + network.resolver.async_resolve (boost::asio::ip::udp::resolver::query (address_a, std::to_string (port_a)), [node_l, address_a, port_a, preconfigured_peer_a](boost::system::error_code const & ec, boost::asio::ip::udp::resolver::iterator i_a) { if (!ec) { for (auto i (i_a), n (boost::asio::ip::udp::resolver::iterator{}); i != n; ++i) { - node_l->send_keepalive (nano::map_endpoint_to_v6 (i->endpoint ())); + auto endpoint (nano::map_endpoint_to_v6 (i->endpoint ())); + node_l->send_keepalive (endpoint); + if (preconfigured_peer_a) + { + node_l->peers.insert (endpoint, nano::protocol_version, true); + } } } else @@ -2105,7 +2110,7 @@ void nano::node::keepalive_preconfigured (std::vector const & peers { for (auto i (peers_a.begin ()), n (peers_a.end ()); i != n; ++i) { - keepalive (*i, nano::network::node_port); + keepalive (*i, nano::network::node_port, true); } } diff --git a/nano/node/node.hpp b/nano/node/node.hpp index 38eb589d..3b0682a6 100644 --- a/nano/node/node.hpp +++ b/nano/node/node.hpp @@ -468,7 +468,7 @@ public: } void send_keepalive (nano::endpoint const &); bool copy_with_compaction (boost::filesystem::path const &); - void keepalive (std::string const &, uint16_t); + void keepalive (std::string const &, uint16_t, bool = false); void start (); void stop (); std::shared_ptr shared (); diff --git a/nano/node/peers.cpp b/nano/node/peers.cpp index 8ad37977..84e20bd6 100644 --- a/nano/node/peers.cpp +++ b/nano/node/peers.cpp @@ -443,11 +443,11 @@ bool nano::peer_container::reachout (nano::endpoint const & endpoint_a) return error; } -bool nano::peer_container::insert (nano::endpoint const & endpoint_a, unsigned version_a) +bool nano::peer_container::insert (nano::endpoint const & endpoint_a, unsigned version_a, bool preconfigured_a) { assert (endpoint_a.address ().is_v6 ()); auto unknown (false); - auto result (not_a_peer (endpoint_a, false)); + auto result (!preconfigured_a && not_a_peer (endpoint_a, false)); if (!result) { if (version_a >= nano::protocol_version_min) diff --git a/nano/node/peers.hpp b/nano/node/peers.hpp index 472fff19..b2c2a657 100644 --- a/nano/node/peers.hpp +++ b/nano/node/peers.hpp @@ -72,7 +72,7 @@ public: // Returns true if peer was already known bool known_peer (nano::endpoint const &); // Notify of peer we received from - bool insert (nano::endpoint const &, unsigned); + bool insert (nano::endpoint const &, unsigned, bool = false); std::unordered_set random_set (size_t); void random_fill (std::array &); // Request a list of the top known representatives