Satoshi MailBeta Open in Satoshi Mail

minor fix to batched initial download in case requester has more than 500 block non-main branch

Commit by Satoshi Nakamoto (s_nakamoto) on 24 November 2009 · SVN r41 · release v0.2.0 · 3 files, +24 −3

Open in Satoshi Mail View on GitHub

Files changed

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)
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<uint256, CBlockIndex*>::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
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";