Allow local preconfigured peers (#1105)

This commit is contained in:
Lee Bousfield 2019-01-23 12:31:31 -06:00 committed by Roy Keene
commit af1f6d061f
4 changed files with 13 additions and 8 deletions

View file

@ -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<std::string> 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);
}
}

View file

@ -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<nano::node> shared ();

View file

@ -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)

View file

@ -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<nano::endpoint> random_set (size_t);
void random_fill (std::array<nano::endpoint, 8> &);
// Request a list of the top known representatives