Author: toad
Date: 2006-12-19 15:42:43 +0000 (Tue, 19 Dec 2006)
New Revision: 11485

Modified:
   trunk/freenet/src/freenet/support/io/CannotCreateFromFieldSetException.java
   trunk/freenet/src/freenet/support/io/NullPersistentFileTracker.java
   trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java
   trunk/freenet/src/freenet/support/io/PersistentFileTracker.java
   trunk/freenet/src/freenet/support/io/SerializableToFieldSetBucketUtil.java
Log:
Make new serialization code backwards compatible.

Modified: 
trunk/freenet/src/freenet/support/io/CannotCreateFromFieldSetException.java
===================================================================
--- trunk/freenet/src/freenet/support/io/CannotCreateFromFieldSetException.java 
2006-12-19 15:02:12 UTC (rev 11484)
+++ trunk/freenet/src/freenet/support/io/CannotCreateFromFieldSetException.java 
2006-12-19 15:42:43 UTC (rev 11485)
@@ -9,7 +9,7 @@
                super(msg);
        }

-       public CannotCreateFromFieldSetException(String msg, 
NumberFormatException e) {
+       public CannotCreateFromFieldSetException(String msg, Exception e) {
                super(msg+" : "+e, e);
        }


Modified: trunk/freenet/src/freenet/support/io/NullPersistentFileTracker.java
===================================================================
--- trunk/freenet/src/freenet/support/io/NullPersistentFileTracker.java 
2006-12-19 15:02:12 UTC (rev 11484)
+++ trunk/freenet/src/freenet/support/io/NullPersistentFileTracker.java 
2006-12-19 15:42:43 UTC (rev 11485)
@@ -18,4 +18,8 @@
                bucket.free();
        }

+       public File getDir() {
+               return new File(".");
+       }
+
 }

Modified: 
trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java
===================================================================
--- trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java  
2006-12-19 15:02:12 UTC (rev 11484)
+++ trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java  
2006-12-19 15:42:43 UTC (rev 11485)
@@ -80,7 +80,7 @@
         */
        public PaddedEphemerallyEncryptedBucket(Bucket bucket, int minSize, 
long knownSize, byte[] key, RandomSource origRandom) throws IOException {
                if(bucket.size() < knownSize)
-                       throw new IOException("Bucket is too small on disk - 
knownSize="+knownSize+" but bucket.size="+bucket.size()+" for "+bucket);
+                       throw new IOException("Bucket "+bucket+" is too small 
on disk - knownSize="+knownSize+" but bucket.size="+bucket.size()+" for 
"+bucket);
                this.dataLength = knownSize;
                this.origRandom = origRandom;
                this.bucket = bucket;

Modified: trunk/freenet/src/freenet/support/io/PersistentFileTracker.java
===================================================================
--- trunk/freenet/src/freenet/support/io/PersistentFileTracker.java     
2006-12-19 15:02:12 UTC (rev 11484)
+++ trunk/freenet/src/freenet/support/io/PersistentFileTracker.java     
2006-12-19 15:42:43 UTC (rev 11485)
@@ -16,5 +16,10 @@
         * @param bucket The bucket to free. Should be a DelayedFreeBucket.
         */
        public void delayedFreeBucket(Bucket bucket);
+
+       /**
+        * Get the persistent temp files directory.
+        */
+       public File getDir();

 }

Modified: 
trunk/freenet/src/freenet/support/io/SerializableToFieldSetBucketUtil.java
===================================================================
--- trunk/freenet/src/freenet/support/io/SerializableToFieldSetBucketUtil.java  
2006-12-19 15:02:12 UTC (rev 11484)
+++ trunk/freenet/src/freenet/support/io/SerializableToFieldSetBucketUtil.java  
2006-12-19 15:42:43 UTC (rev 11485)
@@ -3,7 +3,11 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package freenet.support.io;

+import java.io.File;
+import java.io.IOException;
+
 import freenet.crypt.RandomSource;
+import freenet.support.HexUtil;
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
 import freenet.support.api.Bucket;
@@ -22,6 +26,33 @@
                if(Logger.shouldLog(Logger.MINOR, 
SerializableToFieldSetBucketUtil.class))
                        Logger.minor(SerializableToFieldSetBucketUtil.class, 
"Creating: "+type);
                if(type == null) {
+                       if(fs.get("DecryptKey") != null && fs.get("Filename") 
!= null) {
+                               String filename = fs.get("Filename");
+                               byte[] decryptKey = 
HexUtil.hexToBytes(fs.get("DecryptKey"));
+                               long len = -1;
+                               if(fs.get("Size") != null) {
+                                       try {
+                                               len = 
Long.parseLong(fs.get("Size"));
+                                       } catch (NumberFormatException e) {
+                                               throw new 
CannotCreateFromFieldSetException("Corrupt dataLength: "+fs.get("Size"), e);
+                                       }
+                               }
+                               File fnam = new File(filename);
+                               if(!fnam.exists()) {
+                                       File persistent = new File(f.getDir(), 
filename);
+                                       if(persistent.exists()) fnam = 
persistent;
+                               }
+                               f.register(fnam);
+                               FileBucket fb = new FileBucket(fnam, false, 
false, false, true);
+                               try {
+                                       PaddedEphemerallyEncryptedBucket eb = 
+                                               new 
PaddedEphemerallyEncryptedBucket(fb, 1024, len, decryptKey, random);
+                                       return eb;
+                               } catch (IOException e) {
+                                       throw new 
CannotCreateFromFieldSetException("Cannot create from old-format fieldset: "+e, 
e);
+                               }
+                       }
+                       
                        throw new CannotCreateFromFieldSetException("No type");
                } else if(type.equals("FileBucket")) {
                        return new FileBucket(fs, f);


Reply via email to