diff --git a/src/main.cpp b/src/main.cpp index bc0ff9dfa..57e692893 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4964,14 +4964,18 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, vector vHeaders; int nLimit = MAX_HEADERS_RESULTS; 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)); - for (; pindex; pindex = chainActive.Next(pindex)) + 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) ) { - vHeaders.push_back(pindex->GetBlockHeader()); - if (--nLimit <= 0 || pindex->GetBlockHash() == hashStop) - break; + for (; pindex; pindex = chainActive.Next(pindex)) + { + vHeaders.push_back(pindex->GetBlockHeader()); + if (--nLimit <= 0 || pindex->GetBlockHash() == hashStop) + break; + } + pfrom->PushMessage("headers", vHeaders); + pfrom->lasthdrsreq = (int32_t)(pindex ? pindex->nHeight : -1); } - pfrom->PushMessage("headers", vHeaders); } diff --git a/src/net.h b/src/net.h index f7ebf11f6..5674bd40d 100644 --- a/src/net.h +++ b/src/net.h @@ -264,6 +264,7 @@ public: std::string addrName; CService addrLocal; int nVersion; + int lasthdrsreq; // 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 // store the sanitized version in cleanSubVer. The original should be used when dealing with