|
|
@ -1789,6 +1789,11 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
|
|
|
bool fProcessBLOCKTXN = false;
|
|
|
|
bool fProcessBLOCKTXN = false;
|
|
|
|
CDataStream blockTxnMsg(SER_NETWORK, PROTOCOL_VERSION);
|
|
|
|
CDataStream blockTxnMsg(SER_NETWORK, PROTOCOL_VERSION);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// If we end up treating this as a plain headers message, call that as well
|
|
|
|
|
|
|
|
// without cs_main.
|
|
|
|
|
|
|
|
bool fRevertToHeaderProcessing = false;
|
|
|
|
|
|
|
|
CDataStream vHeadersMsg(SER_NETWORK, PROTOCOL_VERSION);
|
|
|
|
|
|
|
|
|
|
|
|
// Keep a CBlock for "optimistic" compactblock reconstructions (see
|
|
|
|
// Keep a CBlock for "optimistic" compactblock reconstructions (see
|
|
|
|
// below)
|
|
|
|
// below)
|
|
|
|
std::shared_ptr<CBlock> pblock = std::make_shared<CBlock>();
|
|
|
|
std::shared_ptr<CBlock> pblock = std::make_shared<CBlock>();
|
|
|
@ -1913,9 +1918,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
|
|
|
// Dirty hack to process as if it were just a headers message (TODO: move message handling into their own functions)
|
|
|
|
// Dirty hack to process as if it were just a headers message (TODO: move message handling into their own functions)
|
|
|
|
std::vector<CBlock> headers;
|
|
|
|
std::vector<CBlock> headers;
|
|
|
|
headers.push_back(cmpctblock.header);
|
|
|
|
headers.push_back(cmpctblock.header);
|
|
|
|
CDataStream vHeadersMsg(SER_NETWORK, PROTOCOL_VERSION);
|
|
|
|
|
|
|
|
vHeadersMsg << headers;
|
|
|
|
vHeadersMsg << headers;
|
|
|
|
return ProcessMessage(pfrom, NetMsgType::HEADERS, vHeadersMsg, nTimeReceived, chainparams, connman);
|
|
|
|
fRevertToHeaderProcessing = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} // cs_main
|
|
|
|
} // cs_main
|
|
|
@ -1923,6 +1927,9 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
|
|
|
if (fProcessBLOCKTXN)
|
|
|
|
if (fProcessBLOCKTXN)
|
|
|
|
return ProcessMessage(pfrom, NetMsgType::BLOCKTXN, blockTxnMsg, nTimeReceived, chainparams, connman);
|
|
|
|
return ProcessMessage(pfrom, NetMsgType::BLOCKTXN, blockTxnMsg, nTimeReceived, chainparams, connman);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (fRevertToHeaderProcessing)
|
|
|
|
|
|
|
|
return ProcessMessage(pfrom, NetMsgType::HEADERS, vHeadersMsg, nTimeReceived, chainparams, connman);
|
|
|
|
|
|
|
|
|
|
|
|
if (fBlockReconstructed) {
|
|
|
|
if (fBlockReconstructed) {
|
|
|
|
// If we got here, we were able to optimistically reconstruct a
|
|
|
|
// If we got here, we were able to optimistically reconstruct a
|
|
|
|
// block that is in flight from some other peer.
|
|
|
|
// block that is in flight from some other peer.
|
|
|
|