diff --git a/src/net.h b/src/net.h --- a/src/net.h +++ b/src/net.h @@ -431,7 +431,8 @@ std::atomic &), CombinerAll> SendMessages; - boost::signals2::signal InitializeNode; + boost::signals2::signal + InitializeNode; boost::signals2::signal FinalizeNode; }; diff --git a/src/net.cpp b/src/net.cpp --- a/src/net.cpp +++ b/src/net.cpp @@ -1084,7 +1084,9 @@ CalculateKeyedNetGroup(addr), nonce, "", true); pnode->AddRef(); pnode->fWhitelisted = whitelisted; - GetNodeSignals().InitializeNode(pnode, *this); + + // FIXME: Pass config down rather than use GetConfig + GetNodeSignals().InitializeNode(GetConfig(), pnode, *this); LogPrint("net", "connection from %s accepted\n", addr.ToString()); @@ -1902,7 +1904,8 @@ if (fFeeler) pnode->fFeeler = true; if (fAddnode) pnode->fAddnode = true; - GetNodeSignals().InitializeNode(pnode, *this); + // FIXME: Pass the config down rather than use GetConfig() + GetNodeSignals().InitializeNode(GetConfig(), pnode, *this); { LOCK(cs_vNodes); vNodes.push_back(pnode); diff --git a/src/net_processing.cpp b/src/net_processing.cpp --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -283,9 +283,7 @@ PROTOCOL_VERSION, nNodeStartingHeight, addrMe.ToString(), nodeid); } -void InitializeNode(CNode *pnode, CConnman &connman) { - // FIXME config should be passed as argument than retrieved here - const Config &config = GetConfig(); +void InitializeNode(const Config &config, CNode *pnode, CConnman &connman) { CAddress addr = pnode->addr; std::string addrName = pnode->GetAddrName(); NodeId nodeid = pnode->GetId(); diff --git a/src/test/DoS_tests.cpp b/src/test/DoS_tests.cpp --- a/src/test/DoS_tests.cpp +++ b/src/test/DoS_tests.cpp @@ -45,6 +45,7 @@ BOOST_FIXTURE_TEST_SUITE(DoS_tests, TestingSetup) BOOST_AUTO_TEST_CASE(DoS_banning) { + const Config &config = GetConfig(); std::atomic interruptDummy(false); connman->ClearBanned(); @@ -52,12 +53,12 @@ CNode dummyNode1(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr1, 0, 0, "", true); dummyNode1.SetSendVersion(PROTOCOL_VERSION); - GetNodeSignals().InitializeNode(&dummyNode1, *connman); + GetNodeSignals().InitializeNode(config, &dummyNode1, *connman); dummyNode1.nVersion = 1; dummyNode1.fSuccessfullyConnected = true; // Should get banned. Misbehaving(dummyNode1.GetId(), 100); - SendMessages(GetConfig(), &dummyNode1, *connman, interruptDummy); + SendMessages(config, &dummyNode1, *connman, interruptDummy); BOOST_CHECK(connman->IsBanned(addr1)); // Different IP, not banned. BOOST_CHECK(!connman->IsBanned(ip(0xa0b0c001 | 0x0000ff00))); @@ -66,21 +67,22 @@ CNode dummyNode2(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr2, 1, 1, "", true); dummyNode2.SetSendVersion(PROTOCOL_VERSION); - GetNodeSignals().InitializeNode(&dummyNode2, *connman); + GetNodeSignals().InitializeNode(config, &dummyNode2, *connman); dummyNode2.nVersion = 1; dummyNode2.fSuccessfullyConnected = true; Misbehaving(dummyNode2.GetId(), 50); - SendMessages(GetConfig(), &dummyNode2, *connman, interruptDummy); + SendMessages(config, &dummyNode2, *connman, interruptDummy); // 2 not banned yet... BOOST_CHECK(!connman->IsBanned(addr2)); // ... but 1 still should be. BOOST_CHECK(connman->IsBanned(addr1)); Misbehaving(dummyNode2.GetId(), 50); - SendMessages(GetConfig(), &dummyNode2, *connman, interruptDummy); + SendMessages(config, &dummyNode2, *connman, interruptDummy); BOOST_CHECK(connman->IsBanned(addr2)); } BOOST_AUTO_TEST_CASE(DoS_banscore) { + const Config &config = GetConfig(); std::atomic interruptDummy(false); connman->ClearBanned(); @@ -90,22 +92,23 @@ CNode dummyNode1(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr1, 3, 1, "", true); dummyNode1.SetSendVersion(PROTOCOL_VERSION); - GetNodeSignals().InitializeNode(&dummyNode1, *connman); + GetNodeSignals().InitializeNode(config, &dummyNode1, *connman); dummyNode1.nVersion = 1; dummyNode1.fSuccessfullyConnected = true; Misbehaving(dummyNode1.GetId(), 100); - SendMessages(GetConfig(), &dummyNode1, *connman, interruptDummy); + SendMessages(config, &dummyNode1, *connman, interruptDummy); BOOST_CHECK(!connman->IsBanned(addr1)); Misbehaving(dummyNode1.GetId(), 10); - SendMessages(GetConfig(), &dummyNode1, *connman, interruptDummy); + SendMessages(config, &dummyNode1, *connman, interruptDummy); BOOST_CHECK(!connman->IsBanned(addr1)); Misbehaving(dummyNode1.GetId(), 1); - SendMessages(GetConfig(), &dummyNode1, *connman, interruptDummy); + SendMessages(config, &dummyNode1, *connman, interruptDummy); BOOST_CHECK(connman->IsBanned(addr1)); ForceSetArg("-banscore", std::to_string(DEFAULT_BANSCORE_THRESHOLD)); } BOOST_AUTO_TEST_CASE(DoS_bantime) { + const Config &config = GetConfig(); std::atomic interruptDummy(false); connman->ClearBanned(); @@ -117,12 +120,12 @@ CNode dummyNode(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr, 4, 4, "", true); dummyNode.SetSendVersion(PROTOCOL_VERSION); - GetNodeSignals().InitializeNode(&dummyNode, *connman); + GetNodeSignals().InitializeNode(config, &dummyNode, *connman); dummyNode.nVersion = 1; dummyNode.fSuccessfullyConnected = true; Misbehaving(dummyNode.GetId(), 100); - SendMessages(GetConfig(), &dummyNode, *connman, interruptDummy); + SendMessages(config, &dummyNode, *connman, interruptDummy); BOOST_CHECK(connman->IsBanned(addr)); SetMockTime(nStartTime + 60 * 60);