Author: toad
Date: 2006-06-10 16:36:21 +0000 (Sat, 10 Jun 2006)
New Revision: 9133

Modified:
   trunk/freenet/src/freenet/node/ARKFetcher.java
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/Version.java
Log:
797: ARK changes; store the next version, not "this" version. Hopefully fix an 
infinite recursion on a permanent redirect to a new ARK version when fetching.

Modified: trunk/freenet/src/freenet/node/ARKFetcher.java
===================================================================
--- trunk/freenet/src/freenet/node/ARKFetcher.java      2006-06-10 16:06:48 UTC 
(rev 9132)
+++ trunk/freenet/src/freenet/node/ARKFetcher.java      2006-06-10 16:36:21 UTC 
(rev 9133)
@@ -61,7 +61,6 @@
                                return;
                        }
                        FreenetURI uri = ark.getURI();
-                       uri = 
uri.setSuggestedEdition(uri.getSuggestedEdition());
                        startedEdition = uri.getSuggestedEdition();
                        fetchingURI = uri;
                        Logger.minor(this, "Fetching ARK: "+uri+" for "+peer);

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-06-10 16:06:48 UTC 
(rev 9132)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-06-10 16:36:21 UTC 
(rev 9133)
@@ -120,7 +120,8 @@
      */
     private final ARKFetcher arkFetcher;

-    /** My ARK SSK public key */
+    /** My ARK SSK public key; edition is the next one, not the current one, 
+     * so this is what we want to fetch. */
     private USK myARK;

     /** Number of handshake attempts since last successful connection or ARK 
fetch */
@@ -456,7 +457,7 @@
                String arkNumber = fs.get("ark.number");

                if(arkNumber != null) {
-                       arkNo = Long.parseLong(arkNumber);
+                       arkNo = Long.parseLong(arkNumber) + 1; // this is the 
number of the ref we are parsing. we want the number of the next edition.
                }

                String arkPubKey = fs.get("ark.pubURI");
@@ -1499,7 +1500,8 @@
         fs.put("version", version);
         fs.put("myName", myName);
         if(myARK != null) {
-               fs.put("ark.number", Long.toString(myARK.suggestedEdition));
+               // Decrement it because we keep the number we would like to 
fetch, not the last one fetched.
+               fs.put("ark.number", Long.toString(myARK.suggestedEdition-1));
                fs.put("ark.pubURI", myARK.getBaseSSK().toString(false));
         }
         return fs;
@@ -1796,10 +1798,13 @@
        public synchronized void updateARK(FreenetURI newURI) {
                try {
                        USK usk = USK.create(newURI);
-                       if(!myARK.equals(usk, false)) {
+                       if(!myARK.equals(usk.copy(myARK.suggestedEdition), 
false)) {
                                Logger.error(this, "Changing ARK not supported 
(and shouldn't be possible): from "+myARK+" to "+usk+" for "+this);
                        } else if(myARK.suggestedEdition > 
usk.suggestedEdition) {
                                Logger.minor(this, "Ignoring ARK edition 
decrease: "+myARK.suggestedEdition+" to "+usk.suggestedEdition+" for "+this);
+                       } else if(myARK.suggestedEdition > 
usk.suggestedEdition) {
+                               Logger.minor(this, "New ARK edition found");
+                               myARK = usk;
                        } else if(myARK == null) {
                                Logger.minor(this, "Setting ARK to "+usk+" was 
null on "+this);
                                myARK = usk;
@@ -1813,8 +1818,9 @@
                try {
                        synchronized(this) {
                                handshakeCount = 0;
-                               if(myARK.suggestedEdition < fetchedEdition)
-                                       myARK = myARK.copy(fetchedEdition);
+                               // edition +1 because we store the ARK edition 
that we want to fetch.
+                               if(myARK.suggestedEdition < fetchedEdition+1)
+                                       myARK = myARK.copy(fetchedEdition+1);
                        }
                        processNewNoderef(fs, true);
                } catch (FSParseException e) {

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-06-10 16:06:48 UTC (rev 
9132)
+++ trunk/freenet/src/freenet/node/Version.java 2006-06-10 16:36:21 UTC (rev 
9133)
@@ -18,7 +18,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 796;
+       private static final int buildNumber = 797;

        /** Oldest build of Fred we will talk to */
        private static final int lastGoodBuild = 765;


Reply via email to