mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-21 14:22:38 +02:00
Merge #19174: refactor: replace CConnman pointers by references in net_processing.cpp
0c8461a88ed66a1f70559fc96646708949b17e4b refactor: replace CConnman pointers by references in net_processing.cpp (Sebastian Falbesoner) Pull request description: This is a follow-up to the recently merged PR https://github.com/bitcoin/bitcoin/pull/19053, replacing ~~two more types of~~ one more type of pointer (CConnman) by references to increase the code quality -- pointers should either check for `nullptr` or be replaced by references, and the latter strategy seems to be more reasonable. Again, to keep the review burden managable, the changes are kept simple, * only tackling `CConnman*` ~~and `BanMan*`~~ pointers * only within the net_processing module, i.e. no changes that would need adaption in other modules * keeping the names of the variables as they are ACKs for top commit: jnewbery: utACK 0c8461a88ed66a1f70559fc96646708949b17e4b MarcoFalke: ACK 0c8461a88ed66a1f70559fc96646708949b17e4b 🕧 Tree-SHA512: 79dc05144bcfb5e0bbc62180285aadcc6199f044fa3016c0f54f7b7f45037415260970037bd63b18fafefb8aef448549dae14b780bafb540fa2373f493a17f71
This commit is contained in:
commit
affed844ba
@ -463,7 +463,7 @@ static void UpdatePreferredDownload(const CNode& node, CNodeState* state) EXCLUS
|
|||||||
nPreferredDownload += state->fPreferredDownload;
|
nPreferredDownload += state->fPreferredDownload;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void PushNodeVersion(CNode& pnode, CConnman* connman, int64_t nTime)
|
static void PushNodeVersion(CNode& pnode, CConnman& connman, int64_t nTime)
|
||||||
{
|
{
|
||||||
// Note that pnode->GetLocalServices() is a reflection of the local
|
// Note that pnode->GetLocalServices() is a reflection of the local
|
||||||
// services we were offering when the CNode object was created for this
|
// services we were offering when the CNode object was created for this
|
||||||
@ -477,7 +477,7 @@ static void PushNodeVersion(CNode& pnode, CConnman* connman, int64_t nTime)
|
|||||||
CAddress addrYou = (addr.IsRoutable() && !IsProxy(addr) ? addr : CAddress(CService(), addr.nServices));
|
CAddress addrYou = (addr.IsRoutable() && !IsProxy(addr) ? addr : CAddress(CService(), addr.nServices));
|
||||||
CAddress addrMe = CAddress(CService(), nLocalNodeServices);
|
CAddress addrMe = CAddress(CService(), nLocalNodeServices);
|
||||||
|
|
||||||
connman->PushMessage(&pnode, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::VERSION, PROTOCOL_VERSION, (uint64_t)nLocalNodeServices, nTime, addrYou, addrMe,
|
connman.PushMessage(&pnode, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::VERSION, PROTOCOL_VERSION, (uint64_t)nLocalNodeServices, nTime, addrYou, addrMe,
|
||||||
nonce, strSubVersion, nNodeStartingHeight, ::g_relay_txes && pnode.m_tx_relay != nullptr));
|
nonce, strSubVersion, nNodeStartingHeight, ::g_relay_txes && pnode.m_tx_relay != nullptr));
|
||||||
|
|
||||||
if (fLogIPs) {
|
if (fLogIPs) {
|
||||||
@ -588,7 +588,7 @@ static void UpdateBlockAvailability(NodeId nodeid, const uint256 &hash) EXCLUSIV
|
|||||||
* lNodesAnnouncingHeaderAndIDs, and keeping that list under a certain size by
|
* lNodesAnnouncingHeaderAndIDs, and keeping that list under a certain size by
|
||||||
* removing the first element if necessary.
|
* removing the first element if necessary.
|
||||||
*/
|
*/
|
||||||
static void MaybeSetPeerAsAnnouncingHeaderAndIDs(NodeId nodeid, CConnman* connman) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
|
static void MaybeSetPeerAsAnnouncingHeaderAndIDs(NodeId nodeid, CConnman& connman) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
|
||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
CNodeState* nodestate = State(nodeid);
|
CNodeState* nodestate = State(nodeid);
|
||||||
@ -604,20 +604,20 @@ static void MaybeSetPeerAsAnnouncingHeaderAndIDs(NodeId nodeid, CConnman* connma
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
connman->ForNode(nodeid, [connman](CNode* pfrom){
|
connman.ForNode(nodeid, [&connman](CNode* pfrom){
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
uint64_t nCMPCTBLOCKVersion = (pfrom->GetLocalServices() & NODE_WITNESS) ? 2 : 1;
|
uint64_t nCMPCTBLOCKVersion = (pfrom->GetLocalServices() & NODE_WITNESS) ? 2 : 1;
|
||||||
if (lNodesAnnouncingHeaderAndIDs.size() >= 3) {
|
if (lNodesAnnouncingHeaderAndIDs.size() >= 3) {
|
||||||
// As per BIP152, we only get 3 of our peers to announce
|
// As per BIP152, we only get 3 of our peers to announce
|
||||||
// blocks using compact encodings.
|
// blocks using compact encodings.
|
||||||
connman->ForNode(lNodesAnnouncingHeaderAndIDs.front(), [connman, nCMPCTBLOCKVersion](CNode* pnodeStop){
|
connman.ForNode(lNodesAnnouncingHeaderAndIDs.front(), [&connman, nCMPCTBLOCKVersion](CNode* pnodeStop){
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
connman->PushMessage(pnodeStop, CNetMsgMaker(pnodeStop->GetSendVersion()).Make(NetMsgType::SENDCMPCT, /*fAnnounceUsingCMPCTBLOCK=*/false, nCMPCTBLOCKVersion));
|
connman.PushMessage(pnodeStop, CNetMsgMaker(pnodeStop->GetSendVersion()).Make(NetMsgType::SENDCMPCT, /*fAnnounceUsingCMPCTBLOCK=*/false, nCMPCTBLOCKVersion));
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
lNodesAnnouncingHeaderAndIDs.pop_front();
|
lNodesAnnouncingHeaderAndIDs.pop_front();
|
||||||
}
|
}
|
||||||
connman->PushMessage(pfrom, CNetMsgMaker(pfrom->GetSendVersion()).Make(NetMsgType::SENDCMPCT, /*fAnnounceUsingCMPCTBLOCK=*/true, nCMPCTBLOCKVersion));
|
connman.PushMessage(pfrom, CNetMsgMaker(pfrom->GetSendVersion()).Make(NetMsgType::SENDCMPCT, /*fAnnounceUsingCMPCTBLOCK=*/true, nCMPCTBLOCKVersion));
|
||||||
lNodesAnnouncingHeaderAndIDs.push_back(pfrom->GetId());
|
lNodesAnnouncingHeaderAndIDs.push_back(pfrom->GetId());
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
@ -825,7 +825,7 @@ void PeerLogicValidation::InitializeNode(CNode *pnode) {
|
|||||||
mapNodeState.emplace_hint(mapNodeState.end(), std::piecewise_construct, std::forward_as_tuple(nodeid), std::forward_as_tuple(addr, std::move(addrName), pnode->fInbound, pnode->m_manual_connection));
|
mapNodeState.emplace_hint(mapNodeState.end(), std::piecewise_construct, std::forward_as_tuple(nodeid), std::forward_as_tuple(addr, std::move(addrName), pnode->fInbound, pnode->m_manual_connection));
|
||||||
}
|
}
|
||||||
if(!pnode->fInbound)
|
if(!pnode->fInbound)
|
||||||
PushNodeVersion(*pnode, connman, GetTime());
|
PushNodeVersion(*pnode, *connman, GetTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
void PeerLogicValidation::ReattemptInitialBroadcast(CScheduler& scheduler) const
|
void PeerLogicValidation::ReattemptInitialBroadcast(CScheduler& scheduler) const
|
||||||
@ -1378,7 +1378,7 @@ void PeerLogicValidation::BlockChecked(const CBlock& block, const BlockValidatio
|
|||||||
!::ChainstateActive().IsInitialBlockDownload() &&
|
!::ChainstateActive().IsInitialBlockDownload() &&
|
||||||
mapBlocksInFlight.count(hash) == mapBlocksInFlight.size()) {
|
mapBlocksInFlight.count(hash) == mapBlocksInFlight.size()) {
|
||||||
if (it != mapBlockSource.end()) {
|
if (it != mapBlockSource.end()) {
|
||||||
MaybeSetPeerAsAnnouncingHeaderAndIDs(it->second.first, connman);
|
MaybeSetPeerAsAnnouncingHeaderAndIDs(it->second.first, *connman);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (it != mapBlockSource.end())
|
if (it != mapBlockSource.end())
|
||||||
@ -1474,7 +1474,7 @@ static void RelayAddress(const CAddress& addr, bool fReachable, const CConnman&
|
|||||||
connman.ForEachNodeThen(std::move(sortfunc), std::move(pushfunc));
|
connman.ForEachNodeThen(std::move(sortfunc), std::move(pushfunc));
|
||||||
}
|
}
|
||||||
|
|
||||||
void static ProcessGetBlockData(CNode& pfrom, const CChainParams& chainparams, const CInv& inv, CConnman* connman)
|
void static ProcessGetBlockData(CNode& pfrom, const CChainParams& chainparams, const CInv& inv, CConnman& connman)
|
||||||
{
|
{
|
||||||
bool send = false;
|
bool send = false;
|
||||||
std::shared_ptr<const CBlock> a_recent_block;
|
std::shared_ptr<const CBlock> a_recent_block;
|
||||||
@ -1522,7 +1522,7 @@ void static ProcessGetBlockData(CNode& pfrom, const CChainParams& chainparams, c
|
|||||||
const CNetMsgMaker msgMaker(pfrom.GetSendVersion());
|
const CNetMsgMaker msgMaker(pfrom.GetSendVersion());
|
||||||
// disconnect node in case we have reached the outbound limit for serving historical blocks
|
// disconnect node in case we have reached the outbound limit for serving historical blocks
|
||||||
if (send &&
|
if (send &&
|
||||||
connman->OutboundTargetReached(true) &&
|
connman.OutboundTargetReached(true) &&
|
||||||
(((pindexBestHeader != nullptr) && (pindexBestHeader->GetBlockTime() - pindex->GetBlockTime() > HISTORICAL_BLOCK_AGE)) || inv.type == MSG_FILTERED_BLOCK) &&
|
(((pindexBestHeader != nullptr) && (pindexBestHeader->GetBlockTime() - pindex->GetBlockTime() > HISTORICAL_BLOCK_AGE)) || inv.type == MSG_FILTERED_BLOCK) &&
|
||||||
!pfrom.HasPermission(PF_DOWNLOAD) // nodes with the download permission may exceed target
|
!pfrom.HasPermission(PF_DOWNLOAD) // nodes with the download permission may exceed target
|
||||||
) {
|
) {
|
||||||
@ -1556,7 +1556,7 @@ void static ProcessGetBlockData(CNode& pfrom, const CChainParams& chainparams, c
|
|||||||
if (!ReadRawBlockFromDisk(block_data, pindex, chainparams.MessageStart())) {
|
if (!ReadRawBlockFromDisk(block_data, pindex, chainparams.MessageStart())) {
|
||||||
assert(!"cannot load block from disk");
|
assert(!"cannot load block from disk");
|
||||||
}
|
}
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::BLOCK, MakeSpan(block_data)));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::BLOCK, MakeSpan(block_data)));
|
||||||
// Don't set pblock as we've sent the block
|
// Don't set pblock as we've sent the block
|
||||||
} else {
|
} else {
|
||||||
// Send block from disk
|
// Send block from disk
|
||||||
@ -1567,9 +1567,9 @@ void static ProcessGetBlockData(CNode& pfrom, const CChainParams& chainparams, c
|
|||||||
}
|
}
|
||||||
if (pblock) {
|
if (pblock) {
|
||||||
if (inv.type == MSG_BLOCK)
|
if (inv.type == MSG_BLOCK)
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(SERIALIZE_TRANSACTION_NO_WITNESS, NetMsgType::BLOCK, *pblock));
|
connman.PushMessage(&pfrom, msgMaker.Make(SERIALIZE_TRANSACTION_NO_WITNESS, NetMsgType::BLOCK, *pblock));
|
||||||
else if (inv.type == MSG_WITNESS_BLOCK)
|
else if (inv.type == MSG_WITNESS_BLOCK)
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::BLOCK, *pblock));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::BLOCK, *pblock));
|
||||||
else if (inv.type == MSG_FILTERED_BLOCK)
|
else if (inv.type == MSG_FILTERED_BLOCK)
|
||||||
{
|
{
|
||||||
bool sendMerkleBlock = false;
|
bool sendMerkleBlock = false;
|
||||||
@ -1582,7 +1582,7 @@ void static ProcessGetBlockData(CNode& pfrom, const CChainParams& chainparams, c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sendMerkleBlock) {
|
if (sendMerkleBlock) {
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::MERKLEBLOCK, merkleBlock));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::MERKLEBLOCK, merkleBlock));
|
||||||
// CMerkleBlock just contains hashes, so also push any transactions in the block the client did not see
|
// CMerkleBlock just contains hashes, so also push any transactions in the block the client did not see
|
||||||
// This avoids hurting performance by pointlessly requiring a round-trip
|
// This avoids hurting performance by pointlessly requiring a round-trip
|
||||||
// Note that there is currently no way for a node to request any single transactions we didn't send here -
|
// Note that there is currently no way for a node to request any single transactions we didn't send here -
|
||||||
@ -1591,7 +1591,7 @@ void static ProcessGetBlockData(CNode& pfrom, const CChainParams& chainparams, c
|
|||||||
// however we MUST always provide at least what the remote peer needs
|
// however we MUST always provide at least what the remote peer needs
|
||||||
typedef std::pair<unsigned int, uint256> PairType;
|
typedef std::pair<unsigned int, uint256> PairType;
|
||||||
for (PairType& pair : merkleBlock.vMatchedTxn)
|
for (PairType& pair : merkleBlock.vMatchedTxn)
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(SERIALIZE_TRANSACTION_NO_WITNESS, NetMsgType::TX, *pblock->vtx[pair.first]));
|
connman.PushMessage(&pfrom, msgMaker.Make(SERIALIZE_TRANSACTION_NO_WITNESS, NetMsgType::TX, *pblock->vtx[pair.first]));
|
||||||
}
|
}
|
||||||
// else
|
// else
|
||||||
// no response
|
// no response
|
||||||
@ -1606,13 +1606,13 @@ void static ProcessGetBlockData(CNode& pfrom, const CChainParams& chainparams, c
|
|||||||
int nSendFlags = fPeerWantsWitness ? 0 : SERIALIZE_TRANSACTION_NO_WITNESS;
|
int nSendFlags = fPeerWantsWitness ? 0 : SERIALIZE_TRANSACTION_NO_WITNESS;
|
||||||
if (CanDirectFetch(consensusParams) && pindex->nHeight >= ::ChainActive().Height() - MAX_CMPCTBLOCK_DEPTH) {
|
if (CanDirectFetch(consensusParams) && pindex->nHeight >= ::ChainActive().Height() - MAX_CMPCTBLOCK_DEPTH) {
|
||||||
if ((fPeerWantsWitness || !fWitnessesPresentInARecentCompactBlock) && a_recent_compact_block && a_recent_compact_block->header.GetHash() == pindex->GetBlockHash()) {
|
if ((fPeerWantsWitness || !fWitnessesPresentInARecentCompactBlock) && a_recent_compact_block && a_recent_compact_block->header.GetHash() == pindex->GetBlockHash()) {
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, *a_recent_compact_block));
|
connman.PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, *a_recent_compact_block));
|
||||||
} else {
|
} else {
|
||||||
CBlockHeaderAndShortTxIDs cmpctblock(*pblock, fPeerWantsWitness);
|
CBlockHeaderAndShortTxIDs cmpctblock(*pblock, fPeerWantsWitness);
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, cmpctblock));
|
connman.PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, cmpctblock));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::BLOCK, *pblock));
|
connman.PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::BLOCK, *pblock));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1625,7 +1625,7 @@ void static ProcessGetBlockData(CNode& pfrom, const CChainParams& chainparams, c
|
|||||||
// wait for other stuff first.
|
// wait for other stuff first.
|
||||||
std::vector<CInv> vInv;
|
std::vector<CInv> vInv;
|
||||||
vInv.push_back(CInv(MSG_BLOCK, ::ChainActive().Tip()->GetBlockHash()));
|
vInv.push_back(CInv(MSG_BLOCK, ::ChainActive().Tip()->GetBlockHash()));
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::INV, vInv));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::INV, vInv));
|
||||||
pfrom.hashContinue.SetNull();
|
pfrom.hashContinue.SetNull();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1660,7 +1660,7 @@ CTransactionRef static FindTxForGetData(const CNode& peer, const uint256& txid,
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
void static ProcessGetData(CNode& pfrom, const CChainParams& chainparams, CConnman* connman, CTxMemPool& mempool, const std::atomic<bool>& interruptMsgProc) LOCKS_EXCLUDED(cs_main)
|
void static ProcessGetData(CNode& pfrom, const CChainParams& chainparams, CConnman& connman, CTxMemPool& mempool, const std::atomic<bool>& interruptMsgProc) LOCKS_EXCLUDED(cs_main)
|
||||||
{
|
{
|
||||||
AssertLockNotHeld(cs_main);
|
AssertLockNotHeld(cs_main);
|
||||||
|
|
||||||
@ -1692,7 +1692,7 @@ void static ProcessGetData(CNode& pfrom, const CChainParams& chainparams, CConnm
|
|||||||
CTransactionRef tx = FindTxForGetData(pfrom, inv.hash, mempool_req, now);
|
CTransactionRef tx = FindTxForGetData(pfrom, inv.hash, mempool_req, now);
|
||||||
if (tx) {
|
if (tx) {
|
||||||
int nSendFlags = (inv.type == MSG_TX ? SERIALIZE_TRANSACTION_NO_WITNESS : 0);
|
int nSendFlags = (inv.type == MSG_TX ? SERIALIZE_TRANSACTION_NO_WITNESS : 0);
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::TX, *tx));
|
connman.PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::TX, *tx));
|
||||||
mempool.RemoveUnbroadcastTx(inv.hash);
|
mempool.RemoveUnbroadcastTx(inv.hash);
|
||||||
// As we're going to send tx, make sure its unconfirmed parents are made requestable.
|
// As we're going to send tx, make sure its unconfirmed parents are made requestable.
|
||||||
for (const auto& txin : tx->vin) {
|
for (const auto& txin : tx->vin) {
|
||||||
@ -1738,7 +1738,7 @@ void static ProcessGetData(CNode& pfrom, const CChainParams& chainparams, CConnm
|
|||||||
// In normal operation, we often send NOTFOUND messages for parents of
|
// In normal operation, we often send NOTFOUND messages for parents of
|
||||||
// transactions that we relay; if a peer is missing a parent, they may
|
// transactions that we relay; if a peer is missing a parent, they may
|
||||||
// assume we have them and request the parents from us.
|
// assume we have them and request the parents from us.
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::NOTFOUND, vNotFound));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::NOTFOUND, vNotFound));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1750,7 +1750,7 @@ static uint32_t GetFetchFlags(const CNode& pfrom) EXCLUSIVE_LOCKS_REQUIRED(cs_ma
|
|||||||
return nFetchFlags;
|
return nFetchFlags;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void static SendBlockTransactions(const CBlock& block, const BlockTransactionsRequest& req, CNode& pfrom, CConnman* connman) {
|
inline void static SendBlockTransactions(const CBlock& block, const BlockTransactionsRequest& req, CNode& pfrom, CConnman& connman) {
|
||||||
BlockTransactions resp(req);
|
BlockTransactions resp(req);
|
||||||
for (size_t i = 0; i < req.indexes.size(); i++) {
|
for (size_t i = 0; i < req.indexes.size(); i++) {
|
||||||
if (req.indexes[i] >= block.vtx.size()) {
|
if (req.indexes[i] >= block.vtx.size()) {
|
||||||
@ -1763,10 +1763,10 @@ inline void static SendBlockTransactions(const CBlock& block, const BlockTransac
|
|||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
const CNetMsgMaker msgMaker(pfrom.GetSendVersion());
|
const CNetMsgMaker msgMaker(pfrom.GetSendVersion());
|
||||||
int nSendFlags = State(pfrom.GetId())->fWantsCmpctWitness ? 0 : SERIALIZE_TRANSACTION_NO_WITNESS;
|
int nSendFlags = State(pfrom.GetId())->fWantsCmpctWitness ? 0 : SERIALIZE_TRANSACTION_NO_WITNESS;
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::BLOCKTXN, resp));
|
connman.PushMessage(&pfrom, msgMaker.Make(nSendFlags, NetMsgType::BLOCKTXN, resp));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ProcessHeadersMessage(CNode& pfrom, CConnman* connman, ChainstateManager& chainman, CTxMemPool& mempool, const std::vector<CBlockHeader>& headers, const CChainParams& chainparams, bool via_compact_block)
|
static void ProcessHeadersMessage(CNode& pfrom, CConnman& connman, ChainstateManager& chainman, CTxMemPool& mempool, const std::vector<CBlockHeader>& headers, const CChainParams& chainparams, bool via_compact_block)
|
||||||
{
|
{
|
||||||
const CNetMsgMaker msgMaker(pfrom.GetSendVersion());
|
const CNetMsgMaker msgMaker(pfrom.GetSendVersion());
|
||||||
size_t nCount = headers.size();
|
size_t nCount = headers.size();
|
||||||
@ -1792,7 +1792,7 @@ static void ProcessHeadersMessage(CNode& pfrom, CConnman* connman, ChainstateMan
|
|||||||
// nUnconnectingHeaders gets reset back to 0.
|
// nUnconnectingHeaders gets reset back to 0.
|
||||||
if (!LookupBlockIndex(headers[0].hashPrevBlock) && nCount < MAX_BLOCKS_TO_ANNOUNCE) {
|
if (!LookupBlockIndex(headers[0].hashPrevBlock) && nCount < MAX_BLOCKS_TO_ANNOUNCE) {
|
||||||
nodestate->nUnconnectingHeaders++;
|
nodestate->nUnconnectingHeaders++;
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETHEADERS, ::ChainActive().GetLocator(pindexBestHeader), uint256()));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETHEADERS, ::ChainActive().GetLocator(pindexBestHeader), uint256()));
|
||||||
LogPrint(BCLog::NET, "received header %s: missing prev block %s, sending getheaders (%d) to end (peer=%d, nUnconnectingHeaders=%d)\n",
|
LogPrint(BCLog::NET, "received header %s: missing prev block %s, sending getheaders (%d) to end (peer=%d, nUnconnectingHeaders=%d)\n",
|
||||||
headers[0].GetHash().ToString(),
|
headers[0].GetHash().ToString(),
|
||||||
headers[0].hashPrevBlock.ToString(),
|
headers[0].hashPrevBlock.ToString(),
|
||||||
@ -1857,7 +1857,7 @@ static void ProcessHeadersMessage(CNode& pfrom, CConnman* connman, ChainstateMan
|
|||||||
// TODO: optimize: if pindexLast is an ancestor of ::ChainActive().Tip or pindexBestHeader, continue
|
// TODO: optimize: if pindexLast is an ancestor of ::ChainActive().Tip or pindexBestHeader, continue
|
||||||
// from there instead.
|
// from there instead.
|
||||||
LogPrint(BCLog::NET, "more getheaders (%d) to end to peer=%d (startheight:%d)\n", pindexLast->nHeight, pfrom.GetId(), pfrom.nStartingHeight);
|
LogPrint(BCLog::NET, "more getheaders (%d) to end to peer=%d (startheight:%d)\n", pindexLast->nHeight, pfrom.GetId(), pfrom.nStartingHeight);
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETHEADERS, ::ChainActive().GetLocator(pindexLast), uint256()));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETHEADERS, ::ChainActive().GetLocator(pindexLast), uint256()));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fCanDirectFetch = CanDirectFetch(chainparams.GetConsensus());
|
bool fCanDirectFetch = CanDirectFetch(chainparams.GetConsensus());
|
||||||
@ -1907,7 +1907,7 @@ static void ProcessHeadersMessage(CNode& pfrom, CConnman* connman, ChainstateMan
|
|||||||
// In any case, we want to download using a compact block, not a regular one
|
// In any case, we want to download using a compact block, not a regular one
|
||||||
vGetData[0] = CInv(MSG_CMPCT_BLOCK, vGetData[0].hash);
|
vGetData[0] = CInv(MSG_CMPCT_BLOCK, vGetData[0].hash);
|
||||||
}
|
}
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETDATA, vGetData));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETDATA, vGetData));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1948,7 +1948,7 @@ static void ProcessHeadersMessage(CNode& pfrom, CConnman* connman, ChainstateMan
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void static ProcessOrphanTx(CConnman* connman, CTxMemPool& mempool, std::set<uint256>& orphan_work_set, std::list<CTransactionRef>& removed_txn) EXCLUSIVE_LOCKS_REQUIRED(cs_main, g_cs_orphans)
|
void static ProcessOrphanTx(CConnman& connman, CTxMemPool& mempool, std::set<uint256>& orphan_work_set, std::list<CTransactionRef>& removed_txn) EXCLUSIVE_LOCKS_REQUIRED(cs_main, g_cs_orphans)
|
||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
AssertLockHeld(g_cs_orphans);
|
AssertLockHeld(g_cs_orphans);
|
||||||
@ -1972,7 +1972,7 @@ void static ProcessOrphanTx(CConnman* connman, CTxMemPool& mempool, std::set<uin
|
|||||||
if (setMisbehaving.count(fromPeer)) continue;
|
if (setMisbehaving.count(fromPeer)) continue;
|
||||||
if (AcceptToMemoryPool(mempool, orphan_state, porphanTx, &removed_txn, false /* bypass_limits */, 0 /* nAbsurdFee */)) {
|
if (AcceptToMemoryPool(mempool, orphan_state, porphanTx, &removed_txn, false /* bypass_limits */, 0 /* nAbsurdFee */)) {
|
||||||
LogPrint(BCLog::MEMPOOL, " accepted orphan tx %s\n", orphanHash.ToString());
|
LogPrint(BCLog::MEMPOOL, " accepted orphan tx %s\n", orphanHash.ToString());
|
||||||
RelayTransaction(orphanHash, *connman);
|
RelayTransaction(orphanHash, connman);
|
||||||
for (unsigned int i = 0; i < orphanTx.vout.size(); i++) {
|
for (unsigned int i = 0; i < orphanTx.vout.size(); i++) {
|
||||||
auto it_by_prev = mapOrphanTransactionsByPrev.find(COutPoint(orphanHash, i));
|
auto it_by_prev = mapOrphanTransactionsByPrev.find(COutPoint(orphanHash, i));
|
||||||
if (it_by_prev != mapOrphanTransactionsByPrev.end()) {
|
if (it_by_prev != mapOrphanTransactionsByPrev.end()) {
|
||||||
@ -2236,7 +2236,7 @@ void ProcessMessage(
|
|||||||
const CChainParams& chainparams,
|
const CChainParams& chainparams,
|
||||||
ChainstateManager& chainman,
|
ChainstateManager& chainman,
|
||||||
CTxMemPool& mempool,
|
CTxMemPool& mempool,
|
||||||
CConnman* connman,
|
CConnman& connman,
|
||||||
BanMan* banman,
|
BanMan* banman,
|
||||||
const std::atomic<bool>& interruptMsgProc)
|
const std::atomic<bool>& interruptMsgProc)
|
||||||
{
|
{
|
||||||
@ -2274,7 +2274,7 @@ void ProcessMessage(
|
|||||||
nServices = ServiceFlags(nServiceInt);
|
nServices = ServiceFlags(nServiceInt);
|
||||||
if (!pfrom.fInbound)
|
if (!pfrom.fInbound)
|
||||||
{
|
{
|
||||||
connman->SetServices(pfrom.addr, nServices);
|
connman.SetServices(pfrom.addr, nServices);
|
||||||
}
|
}
|
||||||
if (!pfrom.fInbound && !pfrom.fFeeler && !pfrom.m_manual_connection && !HasAllDesirableServiceFlags(nServices))
|
if (!pfrom.fInbound && !pfrom.fFeeler && !pfrom.m_manual_connection && !HasAllDesirableServiceFlags(nServices))
|
||||||
{
|
{
|
||||||
@ -2303,7 +2303,7 @@ void ProcessMessage(
|
|||||||
if (!vRecv.empty())
|
if (!vRecv.empty())
|
||||||
vRecv >> fRelay;
|
vRecv >> fRelay;
|
||||||
// Disconnect if we connected to ourself
|
// Disconnect if we connected to ourself
|
||||||
if (pfrom.fInbound && !connman->CheckIncomingNonce(nNonce))
|
if (pfrom.fInbound && !connman.CheckIncomingNonce(nNonce))
|
||||||
{
|
{
|
||||||
LogPrintf("connected to self at %s, disconnecting\n", pfrom.addr.ToString());
|
LogPrintf("connected to self at %s, disconnecting\n", pfrom.addr.ToString());
|
||||||
pfrom.fDisconnect = true;
|
pfrom.fDisconnect = true;
|
||||||
@ -2319,7 +2319,7 @@ void ProcessMessage(
|
|||||||
if (pfrom.fInbound)
|
if (pfrom.fInbound)
|
||||||
PushNodeVersion(pfrom, connman, GetAdjustedTime());
|
PushNodeVersion(pfrom, connman, GetAdjustedTime());
|
||||||
|
|
||||||
connman->PushMessage(&pfrom, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::VERACK));
|
connman.PushMessage(&pfrom, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::VERACK));
|
||||||
|
|
||||||
pfrom.nServices = nServices;
|
pfrom.nServices = nServices;
|
||||||
pfrom.SetAddrLocal(addrMe);
|
pfrom.SetAddrLocal(addrMe);
|
||||||
@ -2375,9 +2375,9 @@ void ProcessMessage(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get recent addresses
|
// Get recent addresses
|
||||||
connman->PushMessage(&pfrom, CNetMsgMaker(nSendVersion).Make(NetMsgType::GETADDR));
|
connman.PushMessage(&pfrom, CNetMsgMaker(nSendVersion).Make(NetMsgType::GETADDR));
|
||||||
pfrom.fGetAddr = true;
|
pfrom.fGetAddr = true;
|
||||||
connman->MarkAddressGood(pfrom.addr);
|
connman.MarkAddressGood(pfrom.addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string remoteAddr;
|
std::string remoteAddr;
|
||||||
@ -2396,7 +2396,7 @@ void ProcessMessage(
|
|||||||
// If the peer is old enough to have the old alert system, send it the final alert.
|
// If the peer is old enough to have the old alert system, send it the final alert.
|
||||||
if (pfrom.nVersion <= 70012) {
|
if (pfrom.nVersion <= 70012) {
|
||||||
CDataStream finalAlert(ParseHex("60010000000000000000000000ffffff7f00000000ffffff7ffeffff7f01ffffff7f00000000ffffff7f00ffffff7f002f555247454e543a20416c657274206b657920636f6d70726f6d697365642c2075706772616465207265717569726564004630440220653febd6410f470f6bae11cad19c48413becb1ac2c17f908fd0fd53bdc3abd5202206d0e9c96fe88d4a0f01ed9dedae2b6f9e00da94cad0fecaae66ecf689bf71b50"), SER_NETWORK, PROTOCOL_VERSION);
|
CDataStream finalAlert(ParseHex("60010000000000000000000000ffffff7f00000000ffffff7ffeffff7f01ffffff7f00000000ffffff7f00ffffff7f002f555247454e543a20416c657274206b657920636f6d70726f6d697365642c2075706772616465207265717569726564004630440220653febd6410f470f6bae11cad19c48413becb1ac2c17f908fd0fd53bdc3abd5202206d0e9c96fe88d4a0f01ed9dedae2b6f9e00da94cad0fecaae66ecf689bf71b50"), SER_NETWORK, PROTOCOL_VERSION);
|
||||||
connman->PushMessage(&pfrom, CNetMsgMaker(nSendVersion).Make("alert", finalAlert));
|
connman.PushMessage(&pfrom, CNetMsgMaker(nSendVersion).Make("alert", finalAlert));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Feeler connections exist only to verify if address is online.
|
// Feeler connections exist only to verify if address is online.
|
||||||
@ -2436,7 +2436,7 @@ void ProcessMessage(
|
|||||||
// We send this to non-NODE NETWORK peers as well, because even
|
// We send this to non-NODE NETWORK peers as well, because even
|
||||||
// non-NODE NETWORK peers can announce blocks (such as pruning
|
// non-NODE NETWORK peers can announce blocks (such as pruning
|
||||||
// nodes)
|
// nodes)
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::SENDHEADERS));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::SENDHEADERS));
|
||||||
}
|
}
|
||||||
if (pfrom.nVersion >= SHORT_IDS_BLOCKS_VERSION) {
|
if (pfrom.nVersion >= SHORT_IDS_BLOCKS_VERSION) {
|
||||||
// Tell our peer we are willing to provide version 1 or 2 cmpctblocks
|
// Tell our peer we are willing to provide version 1 or 2 cmpctblocks
|
||||||
@ -2447,9 +2447,9 @@ void ProcessMessage(
|
|||||||
bool fAnnounceUsingCMPCTBLOCK = false;
|
bool fAnnounceUsingCMPCTBLOCK = false;
|
||||||
uint64_t nCMPCTBLOCKVersion = 2;
|
uint64_t nCMPCTBLOCKVersion = 2;
|
||||||
if (pfrom.GetLocalServices() & NODE_WITNESS)
|
if (pfrom.GetLocalServices() & NODE_WITNESS)
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
|
||||||
nCMPCTBLOCKVersion = 1;
|
nCMPCTBLOCKVersion = 1;
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
|
||||||
}
|
}
|
||||||
pfrom.fSuccessfullyConnected = true;
|
pfrom.fSuccessfullyConnected = true;
|
||||||
return;
|
return;
|
||||||
@ -2502,13 +2502,13 @@ void ProcessMessage(
|
|||||||
if (addr.nTime > nSince && !pfrom.fGetAddr && vAddr.size() <= 10 && addr.IsRoutable())
|
if (addr.nTime > nSince && !pfrom.fGetAddr && vAddr.size() <= 10 && addr.IsRoutable())
|
||||||
{
|
{
|
||||||
// Relay to a limited number of other nodes
|
// Relay to a limited number of other nodes
|
||||||
RelayAddress(addr, fReachable, *connman);
|
RelayAddress(addr, fReachable, connman);
|
||||||
}
|
}
|
||||||
// Do not store addresses outside our network
|
// Do not store addresses outside our network
|
||||||
if (fReachable)
|
if (fReachable)
|
||||||
vAddrOk.push_back(addr);
|
vAddrOk.push_back(addr);
|
||||||
}
|
}
|
||||||
connman->AddNewAddresses(vAddrOk, pfrom.addr, 2 * 60 * 60);
|
connman.AddNewAddresses(vAddrOk, pfrom.addr, 2 * 60 * 60);
|
||||||
if (vAddr.size() < 1000)
|
if (vAddr.size() < 1000)
|
||||||
pfrom.fGetAddr = false;
|
pfrom.fGetAddr = false;
|
||||||
if (pfrom.fOneShot)
|
if (pfrom.fOneShot)
|
||||||
@ -2605,7 +2605,7 @@ void ProcessMessage(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (best_block != nullptr) {
|
if (best_block != nullptr) {
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETHEADERS, ::ChainActive().GetLocator(pindexBestHeader), *best_block));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETHEADERS, ::ChainActive().GetLocator(pindexBestHeader), *best_block));
|
||||||
LogPrint(BCLog::NET, "getheaders (%d) %s to peer=%d\n", pindexBestHeader->nHeight, best_block->ToString(), pfrom.GetId());
|
LogPrint(BCLog::NET, "getheaders (%d) %s to peer=%d\n", pindexBestHeader->nHeight, best_block->ToString(), pfrom.GetId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2813,7 +2813,7 @@ void ProcessMessage(
|
|||||||
// will re-announce the new block via headers (or compact blocks again)
|
// will re-announce the new block via headers (or compact blocks again)
|
||||||
// in the SendMessages logic.
|
// in the SendMessages logic.
|
||||||
nodestate->pindexBestHeaderSent = pindex ? pindex : ::ChainActive().Tip();
|
nodestate->pindexBestHeaderSent = pindex ? pindex : ::ChainActive().Tip();
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::HEADERS, vHeaders));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::HEADERS, vHeaders));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2849,7 +2849,7 @@ void ProcessMessage(
|
|||||||
if (!AlreadyHave(inv, mempool) &&
|
if (!AlreadyHave(inv, mempool) &&
|
||||||
AcceptToMemoryPool(mempool, state, ptx, &lRemovedTxn, false /* bypass_limits */, 0 /* nAbsurdFee */)) {
|
AcceptToMemoryPool(mempool, state, ptx, &lRemovedTxn, false /* bypass_limits */, 0 /* nAbsurdFee */)) {
|
||||||
mempool.check(&::ChainstateActive().CoinsTip());
|
mempool.check(&::ChainstateActive().CoinsTip());
|
||||||
RelayTransaction(tx.GetHash(), *connman);
|
RelayTransaction(tx.GetHash(), connman);
|
||||||
for (unsigned int i = 0; i < tx.vout.size(); i++) {
|
for (unsigned int i = 0; i < tx.vout.size(); i++) {
|
||||||
auto it_by_prev = mapOrphanTransactionsByPrev.find(COutPoint(inv.hash, i));
|
auto it_by_prev = mapOrphanTransactionsByPrev.find(COutPoint(inv.hash, i));
|
||||||
if (it_by_prev != mapOrphanTransactionsByPrev.end()) {
|
if (it_by_prev != mapOrphanTransactionsByPrev.end()) {
|
||||||
@ -2924,7 +2924,7 @@ void ProcessMessage(
|
|||||||
LogPrintf("Not relaying non-mempool transaction %s from forcerelay peer=%d\n", tx.GetHash().ToString(), pfrom.GetId());
|
LogPrintf("Not relaying non-mempool transaction %s from forcerelay peer=%d\n", tx.GetHash().ToString(), pfrom.GetId());
|
||||||
} else {
|
} else {
|
||||||
LogPrintf("Force relaying tx %s from peer=%d\n", tx.GetHash().ToString(), pfrom.GetId());
|
LogPrintf("Force relaying tx %s from peer=%d\n", tx.GetHash().ToString(), pfrom.GetId());
|
||||||
RelayTransaction(tx.GetHash(), *connman);
|
RelayTransaction(tx.GetHash(), connman);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2977,7 +2977,7 @@ void ProcessMessage(
|
|||||||
if (!LookupBlockIndex(cmpctblock.header.hashPrevBlock)) {
|
if (!LookupBlockIndex(cmpctblock.header.hashPrevBlock)) {
|
||||||
// Doesn't connect (or is genesis), instead of DoSing in AcceptBlockHeader, request deeper headers
|
// Doesn't connect (or is genesis), instead of DoSing in AcceptBlockHeader, request deeper headers
|
||||||
if (!::ChainstateActive().IsInitialBlockDownload())
|
if (!::ChainstateActive().IsInitialBlockDownload())
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETHEADERS, ::ChainActive().GetLocator(pindexBestHeader), uint256()));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETHEADERS, ::ChainActive().GetLocator(pindexBestHeader), uint256()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3038,7 +3038,7 @@ void ProcessMessage(
|
|||||||
// so we just grab the block via normal getdata
|
// so we just grab the block via normal getdata
|
||||||
std::vector<CInv> vInv(1);
|
std::vector<CInv> vInv(1);
|
||||||
vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom), cmpctblock.header.GetHash());
|
vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom), cmpctblock.header.GetHash());
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -3079,7 +3079,7 @@ void ProcessMessage(
|
|||||||
// Duplicate txindexes, the block is now in-flight, so just request it
|
// Duplicate txindexes, the block is now in-flight, so just request it
|
||||||
std::vector<CInv> vInv(1);
|
std::vector<CInv> vInv(1);
|
||||||
vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom), cmpctblock.header.GetHash());
|
vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom), cmpctblock.header.GetHash());
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3096,7 +3096,7 @@ void ProcessMessage(
|
|||||||
fProcessBLOCKTXN = true;
|
fProcessBLOCKTXN = true;
|
||||||
} else {
|
} else {
|
||||||
req.blockhash = pindex->GetBlockHash();
|
req.blockhash = pindex->GetBlockHash();
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETBLOCKTXN, req));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETBLOCKTXN, req));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// This block is either already in flight from a different
|
// This block is either already in flight from a different
|
||||||
@ -3122,7 +3122,7 @@ void ProcessMessage(
|
|||||||
// mempool will probably be useless - request the block normally
|
// mempool will probably be useless - request the block normally
|
||||||
std::vector<CInv> vInv(1);
|
std::vector<CInv> vInv(1);
|
||||||
vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom), cmpctblock.header.GetHash());
|
vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom), cmpctblock.header.GetHash());
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
// If this was an announce-cmpctblock, we want the same treatment as a header message
|
// If this was an announce-cmpctblock, we want the same treatment as a header message
|
||||||
@ -3212,7 +3212,7 @@ void ProcessMessage(
|
|||||||
// Might have collided, fall back to getdata now :(
|
// Might have collided, fall back to getdata now :(
|
||||||
std::vector<CInv> invs;
|
std::vector<CInv> invs;
|
||||||
invs.push_back(CInv(MSG_BLOCK | GetFetchFlags(pfrom), resp.blockhash));
|
invs.push_back(CInv(MSG_BLOCK | GetFetchFlags(pfrom), resp.blockhash));
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETDATA, invs));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETDATA, invs));
|
||||||
} else {
|
} else {
|
||||||
// Block is either okay, or possibly we received
|
// Block is either okay, or possibly we received
|
||||||
// READ_STATUS_CHECKBLOCK_FAILED.
|
// READ_STATUS_CHECKBLOCK_FAILED.
|
||||||
@ -3347,7 +3347,7 @@ void ProcessMessage(
|
|||||||
pfrom.fSentAddr = true;
|
pfrom.fSentAddr = true;
|
||||||
|
|
||||||
pfrom.vAddrToSend.clear();
|
pfrom.vAddrToSend.clear();
|
||||||
std::vector<CAddress> vAddr = connman->GetAddresses();
|
std::vector<CAddress> vAddr = connman.GetAddresses();
|
||||||
FastRandomContext insecure_rand;
|
FastRandomContext insecure_rand;
|
||||||
for (const CAddress &addr : vAddr) {
|
for (const CAddress &addr : vAddr) {
|
||||||
bool banned_or_discouraged = banman && (banman->IsDiscouraged(addr) || banman->IsBanned(addr));
|
bool banned_or_discouraged = banman && (banman->IsDiscouraged(addr) || banman->IsBanned(addr));
|
||||||
@ -3369,7 +3369,7 @@ void ProcessMessage(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (connman->OutboundTargetReached(false) && !pfrom.HasPermission(PF_MEMPOOL))
|
if (connman.OutboundTargetReached(false) && !pfrom.HasPermission(PF_MEMPOOL))
|
||||||
{
|
{
|
||||||
if (!pfrom.HasPermission(PF_NOBAN))
|
if (!pfrom.HasPermission(PF_NOBAN))
|
||||||
{
|
{
|
||||||
@ -3402,7 +3402,7 @@ void ProcessMessage(
|
|||||||
// it, if the remote node sends a ping once per second and this node takes 5
|
// it, if the remote node sends a ping once per second and this node takes 5
|
||||||
// seconds to respond to each, the 5th ping the remote sends would appear to
|
// seconds to respond to each, the 5th ping the remote sends would appear to
|
||||||
// return very quickly.
|
// return very quickly.
|
||||||
connman->PushMessage(&pfrom, msgMaker.Make(NetMsgType::PONG, nonce));
|
connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::PONG, nonce));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -3542,17 +3542,17 @@ void ProcessMessage(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (msg_type == NetMsgType::GETCFILTERS) {
|
if (msg_type == NetMsgType::GETCFILTERS) {
|
||||||
ProcessGetCFilters(pfrom, vRecv, chainparams, *connman);
|
ProcessGetCFilters(pfrom, vRecv, chainparams, connman);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg_type == NetMsgType::GETCFHEADERS) {
|
if (msg_type == NetMsgType::GETCFHEADERS) {
|
||||||
ProcessGetCFHeaders(pfrom, vRecv, chainparams, *connman);
|
ProcessGetCFHeaders(pfrom, vRecv, chainparams, connman);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg_type == NetMsgType::GETCFCHECKPT) {
|
if (msg_type == NetMsgType::GETCFCHECKPT) {
|
||||||
ProcessGetCFCheckPt(pfrom, vRecv, chainparams, *connman);
|
ProcessGetCFCheckPt(pfrom, vRecv, chainparams, connman);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3628,12 +3628,12 @@ bool PeerLogicValidation::ProcessMessages(CNode* pfrom, std::atomic<bool>& inter
|
|||||||
bool fMoreWork = false;
|
bool fMoreWork = false;
|
||||||
|
|
||||||
if (!pfrom->vRecvGetData.empty())
|
if (!pfrom->vRecvGetData.empty())
|
||||||
ProcessGetData(*pfrom, chainparams, connman, m_mempool, interruptMsgProc);
|
ProcessGetData(*pfrom, chainparams, *connman, m_mempool, interruptMsgProc);
|
||||||
|
|
||||||
if (!pfrom->orphan_work_set.empty()) {
|
if (!pfrom->orphan_work_set.empty()) {
|
||||||
std::list<CTransactionRef> removed_txn;
|
std::list<CTransactionRef> removed_txn;
|
||||||
LOCK2(cs_main, g_cs_orphans);
|
LOCK2(cs_main, g_cs_orphans);
|
||||||
ProcessOrphanTx(connman, m_mempool, pfrom->orphan_work_set, removed_txn);
|
ProcessOrphanTx(*connman, m_mempool, pfrom->orphan_work_set, removed_txn);
|
||||||
for (const CTransactionRef& removedTx : removed_txn) {
|
for (const CTransactionRef& removedTx : removed_txn) {
|
||||||
AddToCompactExtraTransactions(removedTx);
|
AddToCompactExtraTransactions(removedTx);
|
||||||
}
|
}
|
||||||
@ -3693,7 +3693,7 @@ bool PeerLogicValidation::ProcessMessages(CNode* pfrom, std::atomic<bool>& inter
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ProcessMessage(*pfrom, msg_type, vRecv, msg.m_time, chainparams, m_chainman, m_mempool, connman, m_banman, interruptMsgProc);
|
ProcessMessage(*pfrom, msg_type, vRecv, msg.m_time, chainparams, m_chainman, m_mempool, *connman, m_banman, interruptMsgProc);
|
||||||
if (interruptMsgProc)
|
if (interruptMsgProc)
|
||||||
return false;
|
return false;
|
||||||
if (!pfrom->vRecvGetData.empty())
|
if (!pfrom->vRecvGetData.empty())
|
||||||
|
@ -38,7 +38,7 @@ void ProcessMessage(
|
|||||||
const CChainParams& chainparams,
|
const CChainParams& chainparams,
|
||||||
ChainstateManager& chainman,
|
ChainstateManager& chainman,
|
||||||
CTxMemPool& mempool,
|
CTxMemPool& mempool,
|
||||||
CConnman* connman,
|
CConnman& connman,
|
||||||
BanMan* banman,
|
BanMan* banman,
|
||||||
const std::atomic<bool>& interruptMsgProc);
|
const std::atomic<bool>& interruptMsgProc);
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ void test_one_input(const std::vector<uint8_t>& buffer)
|
|||||||
try {
|
try {
|
||||||
ProcessMessage(p2p_node, random_message_type, random_bytes_data_stream, GetTime<std::chrono::microseconds>(),
|
ProcessMessage(p2p_node, random_message_type, random_bytes_data_stream, GetTime<std::chrono::microseconds>(),
|
||||||
Params(), *g_setup->m_node.chainman, *g_setup->m_node.mempool,
|
Params(), *g_setup->m_node.chainman, *g_setup->m_node.mempool,
|
||||||
g_setup->m_node.connman.get(), g_setup->m_node.banman.get(),
|
*g_setup->m_node.connman, g_setup->m_node.banman.get(),
|
||||||
std::atomic<bool>{false});
|
std::atomic<bool>{false});
|
||||||
} catch (const std::ios_base::failure&) {
|
} catch (const std::ios_base::failure&) {
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user