Author: toad
Date: 2007-07-10 14:57:36 +0000 (Tue, 10 Jul 2007)
New Revision: 14015

Modified:
   trunk/freenet/src/freenet/client/async/USKProxyCompletionCallback.java
   trunk/freenet/src/freenet/keys/USK.java
Log:
When redirecting, don't clobber original USK

Modified: trunk/freenet/src/freenet/client/async/USKProxyCompletionCallback.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKProxyCompletionCallback.java      
2007-07-10 12:05:28 UTC (rev 14014)
+++ trunk/freenet/src/freenet/client/async/USKProxyCompletionCallback.java      
2007-07-10 14:57:36 UTC (rev 14015)
@@ -3,8 +3,11 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package freenet.client.async;

+import java.util.Arrays;
+
 import freenet.client.FetchException;
 import freenet.client.FetchResult;
+import freenet.keys.FreenetURI;
 import freenet.keys.USK;

 public class USKProxyCompletionCallback implements GetCompletionCallback {
@@ -25,6 +28,11 @@
        }

        public void onFailure(FetchException e, ClientGetState state) {
+               FreenetURI uri = e.newURI;
+               if(uri != null) {
+                       uri = usk.turnMySSKIntoUSK(uri);
+                       e.newURI = uri;
+               }
                cb.onFailure(e, state);
        }


Modified: trunk/freenet/src/freenet/keys/USK.java
===================================================================
--- trunk/freenet/src/freenet/keys/USK.java     2007-07-10 12:05:28 UTC (rev 
14014)
+++ trunk/freenet/src/freenet/keys/USK.java     2007-07-10 14:57:36 UTC (rev 
14015)
@@ -139,4 +139,27 @@
        public String toString() {
                return super.toString()+ ':' +getURI();
        }
+
+       public FreenetURI turnMySSKIntoUSK(FreenetURI uri) {
+               if(uri.getKeyType().equals("SSK") &&
+                               Arrays.equals(uri.getRoutingKey(), pubKeyHash) 
&&
+                               Arrays.equals(uri.getCryptoKey(), cryptoKey) &&
+                               Arrays.equals(uri.getExtra(), 
ClientSSK.getExtraBytes(cryptoAlgorithm)) &&
+                               uri.getDocName() != null &&
+                               uri.getDocName().startsWith(siteName)) {
+                       String doc = uri.getDocName();
+                       doc = doc.substring(siteName.length());
+                       if(doc.length() < 2 || doc.charAt(0) != '-') return uri;
+                       long edition;
+                       try {
+                               edition = Long.parseLong(doc);
+                       } catch (NumberFormatException e) {
+                               Logger.normal(this, "Trying to turn SSK back 
into USK: "+uri+" doc="+doc+" caught "+e, e);
+                               return uri;
+                       }
+                       if(!doc.equals(Long.toString(edition))) return uri;
+                       return new FreenetURI("USK", siteName, 
uri.getAllMetaStrings(), pubKeyHash, cryptoKey, 
ClientSSK.getExtraBytes(cryptoAlgorithm), edition);
+               }
+               return uri;
+       }
 }


Reply via email to