mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 12:02:48 +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;
|
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;
|
addrConnect = addr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -4581,6 +4592,17 @@ bool CConnman::RemoveAddedNode(const std::string& strNode)
|
|||||||
return false;
|
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)
|
bool CConnman::AddPendingMasternode(const uint256& proTxHash)
|
||||||
{
|
{
|
||||||
LOCK(cs_vPendingMasternodes);
|
LOCK(cs_vPendingMasternodes);
|
||||||
|
@ -1481,6 +1481,7 @@ public:
|
|||||||
|
|
||||||
bool AddNode(const AddedNodeParams& add) EXCLUSIVE_LOCKS_REQUIRED(!m_added_nodes_mutex);
|
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 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);
|
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_EQUAL(connman->GetAddedNodeInfo(/*include_connected=*/true).size(), nodes.size());
|
||||||
BOOST_CHECK(connman->GetAddedNodeInfo(/*include_connected=*/false).empty());
|
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:");
|
BOOST_TEST_MESSAGE("\nPrint GetAddedNodeInfo contents:");
|
||||||
for (const auto& info : connman->GetAddedNodeInfo(/*include_connected=*/true)) {
|
for (const auto& info : connman->GetAddedNodeInfo(/*include_connected=*/true)) {
|
||||||
BOOST_TEST_MESSAGE(strprintf("\nadded node: %s", info.m_params.m_added_node));
|
BOOST_TEST_MESSAGE(strprintf("\nadded node: %s", info.m_params.m_added_node));
|
||||||
|
Loading…
Reference in New Issue
Block a user