mirror of
https://github.com/dashpay/dash.git
synced 2024-12-24 19:42:46 +01:00
merge bitcoin#28895: do not make automatic outbound connections to addnode peers
This commit is contained in:
parent
6cf206ca0e
commit
09504bdd1f
22
src/net.cpp
22
src/net.cpp
@ -3547,6 +3547,17 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect, CDe
|
||||
continue;
|
||||
}
|
||||
|
||||
// Do not make automatic outbound connections to addnode peers, to
|
||||
// not use our limited outbound slots for them and to ensure
|
||||
// addnode connections benefit from their intended protections.
|
||||
if (AddedNodesContain(addr)) {
|
||||
LogPrint(BCLog::NET, "Not making automatic %s%s connection to %s peer selected for manual (addnode) connection%s\n",
|
||||
preferred_net.has_value() ? "network-specific " : "",
|
||||
ConnectionTypeAsString(conn_type), GetNetworkName(addr.GetNetwork()),
|
||||
fLogIPs ? strprintf(": %s", addr.ToStringAddrPort()) : "");
|
||||
continue;
|
||||
}
|
||||
|
||||
addrConnect = addr;
|
||||
break;
|
||||
}
|
||||
@ -4581,6 +4592,17 @@ bool CConnman::RemoveAddedNode(const std::string& strNode)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CConnman::AddedNodesContain(const CAddress& addr) const
|
||||
{
|
||||
AssertLockNotHeld(m_added_nodes_mutex);
|
||||
const std::string addr_str{addr.ToStringAddr()};
|
||||
const std::string addr_port_str{addr.ToStringAddrPort()};
|
||||
LOCK(m_added_nodes_mutex);
|
||||
return (m_added_node_params.size() < 24 // bound the query to a reasonable limit
|
||||
&& std::any_of(m_added_node_params.cbegin(), m_added_node_params.cend(),
|
||||
[&](const auto& p) { return p.m_added_node == addr_str || p.m_added_node == addr_port_str; }));
|
||||
}
|
||||
|
||||
bool CConnman::AddPendingMasternode(const uint256& proTxHash)
|
||||
{
|
||||
LOCK(cs_vPendingMasternodes);
|
||||
|
@ -1481,6 +1481,7 @@ public:
|
||||
|
||||
bool AddNode(const AddedNodeParams& add) EXCLUSIVE_LOCKS_REQUIRED(!m_added_nodes_mutex);
|
||||
bool RemoveAddedNode(const std::string& node) EXCLUSIVE_LOCKS_REQUIRED(!m_added_nodes_mutex);
|
||||
bool AddedNodesContain(const CAddress& addr) const EXCLUSIVE_LOCKS_REQUIRED(!m_added_nodes_mutex);
|
||||
std::vector<AddedNodeInfo> GetAddedNodeInfo(bool include_connected) const EXCLUSIVE_LOCKS_REQUIRED(!m_added_nodes_mutex);
|
||||
|
||||
/**
|
||||
|
@ -124,6 +124,13 @@ BOOST_AUTO_TEST_CASE(test_addnode_getaddednodeinfo_and_connection_detection)
|
||||
BOOST_CHECK_EQUAL(connman->GetAddedNodeInfo(/*include_connected=*/true).size(), nodes.size());
|
||||
BOOST_CHECK(connman->GetAddedNodeInfo(/*include_connected=*/false).empty());
|
||||
|
||||
// Test AddedNodesContain()
|
||||
for (auto node : connman->TestNodes()) {
|
||||
BOOST_CHECK(connman->AddedNodesContain(node->addr));
|
||||
}
|
||||
AddPeer(id, nodes, *peerman, *connman, ConnectionType::OUTBOUND_FULL_RELAY);
|
||||
BOOST_CHECK(!connman->AddedNodesContain(nodes.back()->addr));
|
||||
|
||||
BOOST_TEST_MESSAGE("\nPrint GetAddedNodeInfo contents:");
|
||||
for (const auto& info : connman->GetAddedNodeInfo(/*include_connected=*/true)) {
|
||||
BOOST_TEST_MESSAGE(strprintf("\nadded node: %s", info.m_params.m_added_node));
|
||||
|
Loading…
Reference in New Issue
Block a user