Add a notfound message to getdata that is sent if any transactions that aren't in the relayable set are requested.
This commit is contained in:
parent
bd85cf3df7
commit
903d146030
1 changed files with 17 additions and 1 deletions
18
src/main.cpp
18
src/main.cpp
|
@ -3244,6 +3244,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
|||
if (fDebugNet || (vInv.size() != 1))
|
||||
printf("received getdata (%"PRIszu" invsz)\n", vInv.size());
|
||||
|
||||
vector<CInv> vNotFound;
|
||||
BOOST_FOREACH(const CInv& inv, vInv)
|
||||
{
|
||||
if (fShutdown)
|
||||
|
@ -3316,12 +3317,27 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
|||
ss.reserve(1000);
|
||||
ss << tx;
|
||||
pfrom->PushMessage("tx", ss);
|
||||
pushed = true;
|
||||
}
|
||||
}
|
||||
if (!pushed) {
|
||||
vNotFound.push_back(inv);
|
||||
}
|
||||
}
|
||||
|
||||
// Track requests for our stuff
|
||||
// Track requests for our stuff.
|
||||
Inventory(inv.hash);
|
||||
|
||||
if (!vNotFound.empty()) {
|
||||
// Let the peer know that we didn't find what it asked for, so it doesn't
|
||||
// have to wait around forever. Currently only SPV clients actually care
|
||||
// about this message: it's needed when they are recursively walking the
|
||||
// dependencies of relevant unconfirmed transactions. SPV clients want to
|
||||
// do that because they want to know about (and store and rebroadcast and
|
||||
// risk analyze) the dependencies of transactions relevant to them, without
|
||||
// having to download the entire memory pool.
|
||||
pfrom->PushMessage("notfound", vNotFound);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue