Prevent duplicate headers

This commit is contained in:
jl777
2017-09-18 16:57:31 +02:00
parent 37782e4e3b
commit 336a60cf9b
2 changed files with 11 additions and 6 deletions

View File

@@ -4964,7 +4964,9 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
vector<CBlock> vHeaders; vector<CBlock> vHeaders;
int nLimit = MAX_HEADERS_RESULTS; int nLimit = MAX_HEADERS_RESULTS;
LogPrint("net", "getheaders %d to %s from peer=%d\n", (pindex ? pindex->nHeight : -1), hashStop.ToString(), pfrom->id); LogPrint("net", "getheaders %d to %s from peer=%d\n", (pindex ? pindex->nHeight : -1), hashStop.ToString(), pfrom->id);
//fprintf(stderr,"getheaders from %d\n",(int32_t)(pindex ? pindex->nHeight : -1)); fprintf(stderr,"getheaders from %d prev.%d\n",(int32_t)(pindex ? pindex->nHeight : -1),pfrom->lasthdrsreq);
if ( pfrom->lasthdrsreq != (int32_t)(pindex ? pindex->nHeight : -1) )
{
for (; pindex; pindex = chainActive.Next(pindex)) for (; pindex; pindex = chainActive.Next(pindex))
{ {
vHeaders.push_back(pindex->GetBlockHeader()); vHeaders.push_back(pindex->GetBlockHeader());
@@ -4972,6 +4974,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
break; break;
} }
pfrom->PushMessage("headers", vHeaders); pfrom->PushMessage("headers", vHeaders);
pfrom->lasthdrsreq = (int32_t)(pindex ? pindex->nHeight : -1);
}
} }

View File

@@ -264,6 +264,7 @@ public:
std::string addrName; std::string addrName;
CService addrLocal; CService addrLocal;
int nVersion; int nVersion;
int lasthdrsreq;
// strSubVer is whatever byte array we read from the wire. However, this field is intended // strSubVer is whatever byte array we read from the wire. However, this field is intended
// to be printed out, displayed to humans in various forms and so on. So we sanitize it and // to be printed out, displayed to humans in various forms and so on. So we sanitize it and
// store the sanitized version in cleanSubVer. The original should be used when dealing with // store the sanitized version in cleanSubVer. The original should be used when dealing with