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;