|
|
|
@ -5768,6 +5768,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
@@ -5768,6 +5768,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
|
|
|
|
CBlockHeaderAndShortTxIDs cmpctblock; |
|
|
|
|
vRecv >> cmpctblock; |
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
LOCK(cs_main); |
|
|
|
|
|
|
|
|
|
if (mapBlockIndex.find(cmpctblock.header.hashPrevBlock) == mapBlockIndex.end()) { |
|
|
|
@ -5776,19 +5777,23 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
@@ -5776,19 +5777,23 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
|
|
|
|
connman.PushMessage(pfrom, NetMsgType::GETHEADERS, chainActive.GetLocator(pindexBestHeader), uint256()); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
CBlockIndex *pindex = NULL; |
|
|
|
|
CValidationState state; |
|
|
|
|
if (!AcceptBlockHeader(cmpctblock.header, state, chainparams, &pindex)) { |
|
|
|
|
if (!ProcessNewBlockHeaders({cmpctblock.header}, state, chainparams, &pindex)) { |
|
|
|
|
int nDoS; |
|
|
|
|
if (state.IsInvalid(nDoS)) { |
|
|
|
|
if (nDoS > 0) |
|
|
|
|
if (nDoS > 0) { |
|
|
|
|
LOCK(cs_main); |
|
|
|
|
Misbehaving(pfrom->GetId(), nDoS); |
|
|
|
|
} |
|
|
|
|
LogPrintf("Peer %d sent us invalid header via cmpctblock\n", pfrom->id); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
LOCK(cs_main); |
|
|
|
|
// If AcceptBlockHeader returned true, it set pindex
|
|
|
|
|
assert(pindex); |
|
|
|
|
UpdateBlockAvailability(pfrom->GetId(), pindex->GetBlockHash()); |
|
|
|
|