diff --git a/src/main.cpp b/src/main.cpp index c14fd7995..6d831173b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -49,6 +49,7 @@ using namespace std; */ CCriticalSection cs_main; +extern uint8_t NOTARY_PUBKEY33[33]; BlockMap mapBlockIndex; CChain chainActive; @@ -4494,7 +4495,14 @@ void static ProcessGetData(CNode* pfrom) else { if (inv.type == MSG_BLOCK) + { + //uint256 hash; int32_t z; + //hash = block.GetHash(); + //for (z=31; z>=0; z--) + // fprintf(stderr,"%02x",((uint8_t *)&hash)[z]); + //fprintf(stderr," send block %d\n",komodo_block2height(&block)); pfrom->PushMessage("block", block); + } else // MSG_FILTERED_BLOCK) { LOCK(pfrom->cs_filter); @@ -4583,6 +4591,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, { const CChainParams& chainparams = Params(); LogPrint("net", "received: %s (%u bytes) peer=%d\n", SanitizeString(strCommand), vRecv.size(), pfrom->id); + //fprintf(stderr, "recv: %s peer=%d\n", SanitizeString(strCommand).c_str(), (int32_t)pfrom->GetId()); if (mapArgs.count("-dropmessagestest") && GetRand(atoi(mapArgs["-dropmessagestest"])) == 0) { LogPrintf("dropmessagestest DROPPING RECV MESSAGE\n"); @@ -4956,13 +4965,19 @@ 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); - for (; pindex; pindex = chainActive.Next(pindex)) + if ( pfrom->lasthdrsreq >= chainActive.Height()-MAX_HEADERS_RESULTS || pfrom->lasthdrsreq != (int32_t)(pindex ? pindex->nHeight : -1) ) { - vHeaders.push_back(pindex->GetBlockHeader()); - if (--nLimit <= 0 || pindex->GetBlockHash() == hashStop) - break; + pfrom->lasthdrsreq = (int32_t)(pindex ? pindex->nHeight : -1); + for (; pindex; pindex = chainActive.Next(pindex)) + { + vHeaders.push_back(pindex->GetBlockHeader()); + if (--nLimit <= 0 || pindex->GetBlockHash() == hashStop) + break; + } + pfrom->PushMessage("headers", vHeaders); } - pfrom->PushMessage("headers", vHeaders); + else if ( NOTARY_PUBKEY33[0] != 0 ) + fprintf(stderr,"you can ignore redundant getheaders from peer.%d %d prev.%d\n",(int32_t)pfrom->id,(int32_t)(pindex ? pindex->nHeight : -1),pfrom->lasthdrsreq); } 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