|
|
|
@ -3260,6 +3260,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
@@ -3260,6 +3260,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
|
|
|
|
if (pfrom->pfilter) |
|
|
|
|
{ |
|
|
|
|
CMerkleBlock merkleBlock(block, *pfrom->pfilter); |
|
|
|
|
pfrom->PushMessage("merkleblock", merkleBlock); |
|
|
|
|
// 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
|
|
|
|
|
// Note that there is currently no way for a node to request any single transactions we didnt send here -
|
|
|
|
@ -3270,7 +3271,6 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
@@ -3270,7 +3271,6 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
|
|
|
|
BOOST_FOREACH(PairType& pair, merkleBlock.vMatchedTxn) |
|
|
|
|
if (!pfrom->setInventoryKnown.count(CInv(MSG_TX, pair.second))) |
|
|
|
|
pfrom->PushMessage("tx", block.vtx[pair.first]); |
|
|
|
|
pfrom->PushMessage("merkleblock", merkleBlock); |
|
|
|
|
} |
|
|
|
|
// else
|
|
|
|
|
// no response
|
|
|
|
@ -3581,7 +3581,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
@@ -3581,7 +3581,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
|
|
|
|
|
|
|
|
|
// Nodes must NEVER send a data item > 520 bytes (the max size for a script data object,
|
|
|
|
|
// and thus, the maximum size any matched object can have) in a filteradd message
|
|
|
|
|
if (vData.size() > 520) |
|
|
|
|
if (vData.size() > MAX_SCRIPT_ELEMENT_SIZE) |
|
|
|
|
{ |
|
|
|
|
pfrom->Misbehaving(100); |
|
|
|
|
} else { |
|
|
|
|