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);