Skip to content

Commit 8d58c4d

Browse files
committed
net: Pass CConnman around as needed
1 parent d7349ca commit 8d58c4d

File tree

9 files changed

+34
-32
lines changed

9 files changed

+34
-32
lines changed

src/main.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3016,7 +3016,7 @@ static void NotifyHeaderTip() {
30163016
* or an activated best chain. pblock is either NULL or a pointer to a block
30173017
* that is already loaded (to avoid loading it again from disk).
30183018
*/
3019-
bool ActivateBestChain(CValidationState &state, const CChainParams& chainparams, const CBlock *pblock) {
3019+
bool ActivateBestChain(CValidationState &state, const CChainParams& chainparams, const CBlock *pblock, CConnman* connman) {
30203020
CBlockIndex *pindexMostWork = NULL;
30213021
CBlockIndex *pindexNewTip = NULL;
30223022
do {
@@ -3731,7 +3731,7 @@ static bool AcceptBlock(const CBlock& block, CValidationState& state, const CCha
37313731
return true;
37323732
}
37333733

3734-
bool ProcessNewBlock(CValidationState& state, const CChainParams& chainparams, CNode* pfrom, const CBlock* pblock, bool fForceProcessing, const CDiskBlockPos* dbp)
3734+
bool ProcessNewBlock(CValidationState& state, const CChainParams& chainparams, CNode* pfrom, const CBlock* pblock, bool fForceProcessing, const CDiskBlockPos* dbp, CConnman* connman)
37353735
{
37363736
{
37373737
LOCK(cs_main);
@@ -3753,7 +3753,7 @@ bool ProcessNewBlock(CValidationState& state, const CChainParams& chainparams, C
37533753

37543754
NotifyHeaderTip();
37553755

3756-
if (!ActivateBestChain(state, chainparams, pblock))
3756+
if (!ActivateBestChain(state, chainparams, pblock, connman))
37573757
return error("%s: ActivateBestChain failed", __func__);
37583758

37593759
return true;
@@ -4891,7 +4891,7 @@ uint32_t GetFetchFlags(CNode* pfrom, CBlockIndex* pprev, const Consensus::Params
48914891
return nFetchFlags;
48924892
}
48934893

4894-
bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, int64_t nTimeReceived, const CChainParams& chainparams)
4894+
bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, int64_t nTimeReceived, const CChainParams& chainparams, CConnman& connman)
48954895
{
48964896
LogPrint("net", "received: %s (%u bytes) peer=%d\n", SanitizeString(strCommand), vRecv.size(), pfrom->id);
48974897
if (mapArgs.count("-dropmessagestest") && GetRand(atoi(mapArgs["-dropmessagestest"])) == 0)
@@ -5680,7 +5680,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
56805680
txn.blockhash = cmpctblock.header.GetHash();
56815681
CDataStream blockTxnMsg(SER_NETWORK, PROTOCOL_VERSION);
56825682
blockTxnMsg << txn;
5683-
return ProcessMessage(pfrom, NetMsgType::BLOCKTXN, blockTxnMsg, nTimeReceived, chainparams);
5683+
return ProcessMessage(pfrom, NetMsgType::BLOCKTXN, blockTxnMsg, nTimeReceived, chainparams, connman);
56845684
} else {
56855685
req.blockhash = pindex->GetBlockHash();
56865686
pfrom->PushMessage(NetMsgType::GETBLOCKTXN, req);
@@ -5701,7 +5701,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
57015701
headers.push_back(cmpctblock.header);
57025702
CDataStream vHeadersMsg(SER_NETWORK, PROTOCOL_VERSION);
57035703
vHeadersMsg << headers;
5704-
return ProcessMessage(pfrom, NetMsgType::HEADERS, vHeadersMsg, nTimeReceived, chainparams);
5704+
return ProcessMessage(pfrom, NetMsgType::HEADERS, vHeadersMsg, nTimeReceived, chainparams, connman);
57055705
}
57065706
}
57075707

@@ -5737,7 +5737,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
57375737
pfrom->PushMessage(NetMsgType::GETDATA, invs);
57385738
} else {
57395739
CValidationState state;
5740-
ProcessNewBlock(state, chainparams, pfrom, &block, false, NULL);
5740+
ProcessNewBlock(state, chainparams, pfrom, &block, false, NULL, &connman);
57415741
int nDoS;
57425742
if (state.IsInvalid(nDoS)) {
57435743
assert (state.GetRejectCode() < REJECT_INTERNAL); // Blocks are never rejected with internal reject codes
@@ -5913,7 +5913,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
59135913
// Such an unrequested block may still be processed, subject to the
59145914
// conditions in AcceptBlock().
59155915
bool forceProcessing = pfrom->fWhitelisted && !IsInitialBlockDownload();
5916-
ProcessNewBlock(state, chainparams, pfrom, &block, forceProcessing, NULL);
5916+
ProcessNewBlock(state, chainparams, pfrom, &block, forceProcessing, NULL, &connman);
59175917
int nDoS;
59185918
if (state.IsInvalid(nDoS)) {
59195919
assert (state.GetRejectCode() < REJECT_INTERNAL); // Blocks are never rejected with internal reject codes
@@ -6163,7 +6163,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
61636163
}
61646164

61656165
// requires LOCK(cs_vRecvMsg)
6166-
bool ProcessMessages(CNode* pfrom)
6166+
bool ProcessMessages(CNode* pfrom, CConnman& connman)
61676167
{
61686168
const CChainParams& chainparams = Params();
61696169
//if (fDebug)
@@ -6240,7 +6240,7 @@ bool ProcessMessages(CNode* pfrom)
62406240
bool fRet = false;
62416241
try
62426242
{
6243-
fRet = ProcessMessage(pfrom, strCommand, vRecv, msg.nTime, chainparams);
6243+
fRet = ProcessMessage(pfrom, strCommand, vRecv, msg.nTime, chainparams, connman);
62446244
boost::this_thread::interruption_point();
62456245
}
62466246
catch (const std::ios_base::failure& e)
@@ -6305,7 +6305,7 @@ class CompareInvMempoolOrder
63056305
}
63066306
};
63076307

6308-
bool SendMessages(CNode* pto)
6308+
bool SendMessages(CNode* pto, CConnman& connman)
63096309
{
63106310
const Consensus::Params& consensusParams = Params().GetConsensus();
63116311
{

src/main.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class CBlockTreeDB;
3434
class CBloomFilter;
3535
class CChainParams;
3636
class CInv;
37+
class CConnman;
3738
class CScriptCheck;
3839
class CTxMemPool;
3940
class CValidationInterface;
@@ -222,7 +223,7 @@ void UnregisterNodeSignals(CNodeSignals& nodeSignals);
222223
* @param[out] dbp The already known disk position of pblock, or NULL if not yet stored.
223224
* @return True if state.IsValid()
224225
*/
225-
bool ProcessNewBlock(CValidationState& state, const CChainParams& chainparams, CNode* pfrom, const CBlock* pblock, bool fForceProcessing, const CDiskBlockPos* dbp);
226+
bool ProcessNewBlock(CValidationState& state, const CChainParams& chainparams, CNode* pfrom, const CBlock* pblock, bool fForceProcessing, const CDiskBlockPos* dbp, CConnman* connman);
226227
/** Check whether enough disk space is available for an incoming block */
227228
bool CheckDiskSpace(uint64_t nAdditionalBytes = 0);
228229
/** Open a block file (blk?????.dat) */
@@ -240,13 +241,14 @@ bool LoadBlockIndex();
240241
/** Unload database information */
241242
void UnloadBlockIndex();
242243
/** Process protocol messages received from a given node */
243-
bool ProcessMessages(CNode* pfrom);
244+
bool ProcessMessages(CNode* pfrom, CConnman& connman);
244245
/**
245246
* Send queued protocol messages to be sent to a give node.
246247
*
247248
* @param[in] pto The node which we are sending messages to.
249+
* @param[in] connman The connection manager for that node.
248250
*/
249-
bool SendMessages(CNode* pto);
251+
bool SendMessages(CNode* pto, CConnman& connman);
250252
/** Run an instance of the script checking thread */
251253
void ThreadScriptCheck();
252254
/** Check whether we are doing an initial block download (synchronizing from disk or network) */
@@ -262,7 +264,7 @@ std::string GetWarnings(const std::string& strFor);
262264
/** Retrieve a transaction (from memory pool, or from disk, if possible) */
263265
bool GetTransaction(const uint256 &hash, CTransaction &tx, const Consensus::Params& params, uint256 &hashBlock, bool fAllowSlow = false);
264266
/** Find the best known block, and make it the tip of the block chain */
265-
bool ActivateBestChain(CValidationState& state, const CChainParams& chainparams, const CBlock* pblock = NULL);
267+
bool ActivateBestChain(CValidationState& state, const CChainParams& chainparams, const CBlock* pblock = NULL, CConnman* connman = NULL);
266268
CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams);
267269

268270
/**

src/net.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1869,7 +1869,7 @@ void CConnman::ThreadMessageHandler()
18691869
TRY_LOCK(pnode->cs_vRecvMsg, lockRecv);
18701870
if (lockRecv)
18711871
{
1872-
if (!GetNodeSignals().ProcessMessages(pnode))
1872+
if (!GetNodeSignals().ProcessMessages(pnode, *this))
18731873
pnode->CloseSocketDisconnect();
18741874

18751875
if (pnode->nSendSize < SendBufferSize())
@@ -1887,7 +1887,7 @@ void CConnman::ThreadMessageHandler()
18871887
{
18881888
TRY_LOCK(pnode->cs_vSend, lockSend);
18891889
if (lockSend)
1890-
GetNodeSignals().SendMessages(pnode);
1890+
GetNodeSignals().SendMessages(pnode, *this);
18911891
}
18921892
boost::this_thread::interruption_point();
18931893
}

src/net.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@ struct CombinerAll
145145
struct CNodeSignals
146146
{
147147
boost::signals2::signal<int ()> GetHeight;
148-
boost::signals2::signal<bool (CNode*), CombinerAll> ProcessMessages;
149-
boost::signals2::signal<bool (CNode*), CombinerAll> SendMessages;
148+
boost::signals2::signal<bool (CNode*, CConnman&), CombinerAll> ProcessMessages;
149+
boost::signals2::signal<bool (CNode*, CConnman&), CombinerAll> SendMessages;
150150
boost::signals2::signal<void (NodeId, const CNode*)> InitializeNode;
151151
boost::signals2::signal<void (NodeId)> FinalizeNode;
152152
};

src/rpc/blockchain.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,7 +1133,7 @@ UniValue invalidateblock(const UniValue& params, bool fHelp)
11331133
}
11341134

11351135
if (state.IsValid()) {
1136-
ActivateBestChain(state, Params());
1136+
ActivateBestChain(state, Params(), NULL, g_connman.get());
11371137
}
11381138

11391139
if (!state.IsValid()) {
@@ -1171,7 +1171,7 @@ UniValue reconsiderblock(const UniValue& params, bool fHelp)
11711171
}
11721172

11731173
CValidationState state;
1174-
ActivateBestChain(state, Params());
1174+
ActivateBestChain(state, Params(), NULL, g_connman.get());
11751175

11761176
if (!state.IsValid()) {
11771177
throw JSONRPCError(RPC_DATABASE_ERROR, state.GetRejectReason());

src/rpc/mining.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ UniValue generateBlocks(boost::shared_ptr<CReserveScript> coinbaseScript, int nG
131131
continue;
132132
}
133133
CValidationState state;
134-
if (!ProcessNewBlock(state, Params(), NULL, pblock, true, NULL))
134+
if (!ProcessNewBlock(state, Params(), NULL, pblock, true, NULL, g_connman.get()))
135135
throw JSONRPCError(RPC_INTERNAL_ERROR, "ProcessNewBlock, block not accepted");
136136
++nHeight;
137137
blockHashes.push_back(pblock->GetHash().GetHex());
@@ -754,7 +754,7 @@ UniValue submitblock(const UniValue& params, bool fHelp)
754754
CValidationState state;
755755
submitblock_StateCatcher sc(block.GetHash());
756756
RegisterValidationInterface(&sc);
757-
bool fAccepted = ProcessNewBlock(state, Params(), NULL, &block, true, NULL);
757+
bool fAccepted = ProcessNewBlock(state, Params(), NULL, &block, true, NULL, g_connman.get());
758758
UnregisterValidationInterface(&sc);
759759
if (fBlockPresent)
760760
{

src/test/DoS_tests.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,19 +49,19 @@ BOOST_AUTO_TEST_CASE(DoS_banning)
4949
CNode dummyNode1(INVALID_SOCKET, addr1, "", true);
5050
dummyNode1.nVersion = 1;
5151
Misbehaving(dummyNode1.GetId(), 100); // Should get banned
52-
SendMessages(&dummyNode1);
52+
SendMessages(&dummyNode1, *connman);
5353
BOOST_CHECK(CNode::IsBanned(addr1));
5454
BOOST_CHECK(!CNode::IsBanned(ip(0xa0b0c001|0x0000ff00))); // Different IP, not banned
5555

5656
CAddress addr2(ip(0xa0b0c002), NODE_NONE);
5757
CNode dummyNode2(INVALID_SOCKET, addr2, "", true);
5858
dummyNode2.nVersion = 1;
5959
Misbehaving(dummyNode2.GetId(), 50);
60-
SendMessages(&dummyNode2);
60+
SendMessages(&dummyNode2, *connman);
6161
BOOST_CHECK(!CNode::IsBanned(addr2)); // 2 not banned yet...
6262
BOOST_CHECK(CNode::IsBanned(addr1)); // ... but 1 still should be
6363
Misbehaving(dummyNode2.GetId(), 50);
64-
SendMessages(&dummyNode2);
64+
SendMessages(&dummyNode2, *connman);
6565
BOOST_CHECK(CNode::IsBanned(addr2));
6666
}
6767

@@ -73,13 +73,13 @@ BOOST_AUTO_TEST_CASE(DoS_banscore)
7373
CNode dummyNode1(INVALID_SOCKET, addr1, "", true);
7474
dummyNode1.nVersion = 1;
7575
Misbehaving(dummyNode1.GetId(), 100);
76-
SendMessages(&dummyNode1);
76+
SendMessages(&dummyNode1, *connman);
7777
BOOST_CHECK(!CNode::IsBanned(addr1));
7878
Misbehaving(dummyNode1.GetId(), 10);
79-
SendMessages(&dummyNode1);
79+
SendMessages(&dummyNode1, *connman);
8080
BOOST_CHECK(!CNode::IsBanned(addr1));
8181
Misbehaving(dummyNode1.GetId(), 1);
82-
SendMessages(&dummyNode1);
82+
SendMessages(&dummyNode1, *connman);
8383
BOOST_CHECK(CNode::IsBanned(addr1));
8484
mapArgs.erase("-banscore");
8585
}
@@ -95,7 +95,7 @@ BOOST_AUTO_TEST_CASE(DoS_bantime)
9595
dummyNode.nVersion = 1;
9696

9797
Misbehaving(dummyNode.GetId(), 100);
98-
SendMessages(&dummyNode);
98+
SendMessages(&dummyNode, *connman);
9999
BOOST_CHECK(CNode::IsBanned(addr));
100100

101101
SetMockTime(nStartTime+60*60);

src/test/miner_tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
222222
pblock->hashMerkleRoot = BlockMerkleRoot(*pblock);
223223
pblock->nNonce = blockinfo[i].nonce;
224224
CValidationState state;
225-
BOOST_CHECK(ProcessNewBlock(state, chainparams, NULL, pblock, true, NULL));
225+
BOOST_CHECK(ProcessNewBlock(state, chainparams, NULL, pblock, true, NULL, connman));
226226
BOOST_CHECK(state.IsValid());
227227
pblock->hashPrevBlock = pblock->GetHash();
228228
}

src/test/test_bitcoin.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ TestChain100Setup::CreateAndProcessBlock(const std::vector<CMutableTransaction>&
124124
while (!CheckProofOfWork(block.GetHash(), block.nBits, chainparams.GetConsensus())) ++block.nNonce;
125125

126126
CValidationState state;
127-
ProcessNewBlock(state, chainparams, NULL, &block, true, NULL);
127+
ProcessNewBlock(state, chainparams, NULL, &block, true, NULL, connman);
128128

129129
CBlock result = block;
130130
delete pblocktemplate;

0 commit comments

Comments
 (0)