From 52f4cb48590a706caf7a492e8d94b85620d5cd33 Mon Sep 17 00:00:00 2001 From: s_nakamoto Date: Tue, 24 Nov 2009 21:04:50 +0000 Subject: [PATCH] minor fix to batched initial download in case requester has more than 500 block non-main branch git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@41 1a98c847-1fd6-4fd8-948a-caf3550aa51b --- main.cpp | 4 ++-- main.h | 21 +++++++++++++++++++++ serialize.h | 2 +- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/main.cpp b/main.cpp index 89b42f76e..ae20e08dd 100644 --- a/main.cpp +++ b/main.cpp @@ -1960,8 +1960,8 @@ bool ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) // Send the rest of the chain if (pindex) pindex = pindex->pnext; - printf("getblocks %d to %s\n", (pindex ? pindex->nHeight : -1), hashStop.ToString().substr(0,16).c_str()); - int nLimit = 500; + int nLimit = 500 + locator.GetDistanceBack(); + printf("getblocks %d to %s limit %d\n", (pindex ? pindex->nHeight : -1), hashStop.ToString().substr(0,16).c_str(), nLimit); for (; pindex; pindex = pindex->pnext) { if (pindex->GetBlockHash() == hashStop) diff --git a/main.h b/main.h index 79f14c686..822045a57 100644 --- a/main.h +++ b/main.h @@ -1298,6 +1298,27 @@ public: vHave.push_back(hashGenesisBlock); } + int GetDistanceBack() + { + // Retrace how far back it was in the sender's branch + int nDistance = 0; + int nStep = 1; + foreach(const uint256& hash, vHave) + { + map::iterator mi = mapBlockIndex.find(hash); + if (mi != mapBlockIndex.end()) + { + CBlockIndex* pindex = (*mi).second; + if (pindex->IsInMainChain()) + return nDistance; + } + nDistance += nStep; + if (nDistance > 10) + nStep *= 2; + } + return nDistance; + } + CBlockIndex* GetBlockIndex() { // Find the first block the caller has in the main chain diff --git a/serialize.h b/serialize.h index aae821b6d..b2d948df9 100644 --- a/serialize.h +++ b/serialize.h @@ -20,7 +20,7 @@ class CDataStream; class CAutoFile; static const int VERSION = 106; -static const char* pszSubVer = " linux-test8"; +static const char* pszSubVer = " linux-test9";