Author: toad
Date: 2006-12-19 13:40:27 +0000 (Tue, 19 Dec 2006)
New Revision: 11480

Modified:
   trunk/freenet/src/freenet/node/fcp/ClientGet.java
   trunk/freenet/src/freenet/node/fcp/ClientPut.java
   trunk/freenet/src/freenet/node/fcp/ClientPutDir.java
   trunk/freenet/src/freenet/node/fcp/ClientRequest.java
   trunk/freenet/src/freenet/node/fcp/PersistenceParseException.java
Log:
Persistent inserts should work again. Hopefully.

Modified: trunk/freenet/src/freenet/node/fcp/ClientGet.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientGet.java   2006-12-19 13:30:06 UTC 
(rev 11479)
+++ trunk/freenet/src/freenet/node/fcp/ClientGet.java   2006-12-19 13:40:27 UTC 
(rev 11480)
@@ -26,9 +26,10 @@
 import freenet.support.SimpleFieldSet;
 import freenet.support.api.Bucket;
 import freenet.support.io.BucketTools;
+import freenet.support.io.CannotCreateFromFieldSetException;
 import freenet.support.io.FileBucket;
 import freenet.support.io.NullBucket;
-import freenet.support.io.PaddedEphemerallyEncryptedBucket;
+import freenet.support.io.SerializableToFieldSetBucketUtil;

 /**
  * A simple client fetch. This can of course fetch arbitrarily large
@@ -236,15 +237,12 @@
                } else if(returnType == ClientGetMessage.RETURN_TYPE_NONE) {
                        ret = new NullBucket();
                } else if(returnType == ClientGetMessage.RETURN_TYPE_DIRECT) {
-                       byte[] key = 
HexUtil.hexToBytes(fs.get("ReturnBucket.DecryptKey"));
-                       String fnam = fs.get("ReturnBucket.Filename");
                        try {
-                               ret = 
client.server.core.persistentTempBucketFactory.registerEncryptedBucket(fnam, 
key, succeeded ? foundDataLength : 0);
-                       } catch (IOException e) {
-                               Logger.error(this, "Caught "+e, e);
+                               ret = 
SerializableToFieldSetBucketUtil.create(fs.subset("ReturnBucket"), fctx.random, 
client.server.core.persistentTempBucketFactory);
+                       } catch (CannotCreateFromFieldSetException e) {
+                               ret = null;
+                               finished = false;
                                succeeded = false;
-                               getFailedMessage = new GetFailedMessage(new 
FetchException(FetchException.BUCKET_ERROR, e), identifier, global);
-                               ret = 
client.server.core.persistentTempBucketFactory.registerEncryptedBucket(fnam, 
key, 0);
                        }
                } else {
                        throw new IllegalArgumentException();
@@ -504,10 +502,7 @@
                }
                // Return bucket
                if(returnType == ClientGetMessage.RETURN_TYPE_DIRECT) {
-                       PaddedEphemerallyEncryptedBucket b = 
(PaddedEphemerallyEncryptedBucket) returnBucket;
-                       FileBucket underlying = (FileBucket) 
(b.getUnderlying());
-                       fs.put("ReturnBucket.DecryptKey", 
HexUtil.bytesToHex(b.getKey()));
-                       fs.put("ReturnBucket.Filename", underlying.getName());
+                       bucketToFS(fs, "ReturnBucket", false, returnBucket);
                }
                fs.put("Global", Boolean.toString(client.isGlobalQueue));
                return fs;

Modified: trunk/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPut.java   2006-12-19 13:30:06 UTC 
(rev 11479)
+++ trunk/freenet/src/freenet/node/fcp/ClientPut.java   2006-12-19 13:40:27 UTC 
(rev 11480)
@@ -21,8 +21,9 @@
 import freenet.support.SimpleFieldSet;
 import freenet.support.SimpleReadOnlyArrayBucket;
 import freenet.support.api.Bucket;
+import freenet.support.io.CannotCreateFromFieldSetException;
 import freenet.support.io.FileBucket;
-import freenet.support.io.PaddedEphemerallyEncryptedBucket;
+import freenet.support.io.SerializableToFieldSetBucketUtil;

 public class ClientPut extends ClientPutBase {

@@ -229,15 +230,10 @@
                } else if(uploadFrom == ClientPutMessage.UPLOAD_FROM_DIRECT) {
                        origFilename = null;
                        if(!finished) {
-                               byte[] key = 
HexUtil.hexToBytes(fs.get("TempBucket.DecryptKey"));
-                               String fnam = fs.get("TempBucket.Filename");
-                               long sz = 
Long.parseLong(fs.get("TempBucket.Size"));
                                try {
-                                       data = 
client.server.core.persistentTempBucketFactory.registerEncryptedBucket(fnam, 
key, sz);
-                                       if(data.size() != sz)
-                                               throw new 
PersistenceParseException("Size of bucket is wrong: "+data.size()+" should be 
"+sz);
-                               } catch (IOException e) {
-                                       throw new 
PersistenceParseException("Could not read old bucket (should be "+sz+" bytes) 
for "+identifier);
+                                       data = 
SerializableToFieldSetBucketUtil.create(fs.subset("ReturnBucket"), ctx.random, 
client.server.core.persistentTempBucketFactory);
+                               } catch (CannotCreateFromFieldSetException e) {
+                                       throw new 
PersistenceParseException("Could not read old bucket for "+identifier+" : "+e, 
e);
                                }
                        } else data = null;
                        targetURI = null;
@@ -308,10 +304,7 @@
                } else if(uploadFrom == ClientPutMessage.UPLOAD_FROM_DIRECT) {
                        if(!finished) {
                                // the bucket is a persistent encrypted temp 
bucket
-                               PaddedEphemerallyEncryptedBucket bucket = 
(PaddedEphemerallyEncryptedBucket) data;
-                               fs.put("TempBucket.DecryptKey", 
HexUtil.bytesToHex(bucket.getKey()));
-                               fs.put("TempBucket.Filename", 
((FileBucket)(bucket.getUnderlying())).getName());
-                               fs.put("TempBucket.Size", 
Long.toString(bucket.size()));
+                               bucketToFS(fs, "TempBucket", true, data);
                        }
                } else if(uploadFrom == ClientPutMessage.UPLOAD_FROM_REDIRECT) {
                        fs.put("TargetURI", targetURI.toString());

Modified: trunk/freenet/src/freenet/node/fcp/ClientPutDir.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPutDir.java        2006-12-19 
13:30:06 UTC (rev 11479)
+++ trunk/freenet/src/freenet/node/fcp/ClientPutDir.java        2006-12-19 
13:40:27 UTC (rev 11480)
@@ -21,8 +21,10 @@
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
 import freenet.support.api.Bucket;
+import freenet.support.io.CannotCreateFromFieldSetException;
 import freenet.support.io.FileBucket;
 import freenet.support.io.PaddedEphemerallyEncryptedBucket;
+import freenet.support.io.SerializableToFieldSetBucketUtil;

 public class ClientPutDir extends ClientPutBase {

@@ -97,12 +99,11 @@
                        if((uploadFrom == null) || 
uploadFrom.equalsIgnoreCase("direct")) {
                                long sz = 
Long.parseLong(subset.get("DataLength"));
                                if(!finished) {
-                                       // Direct (persistent temp bucket)
-                                       byte[] key = 
HexUtil.hexToBytes(subset.get("TempBucket.DecryptKey"));
-                                       String fnam = 
subset.get("TempBucket.Filename");
-                                       data = 
client.server.core.persistentTempBucketFactory.registerEncryptedBucket(fnam, 
key, sz);
-                                       if(data.size() != sz)
-                                               throw new 
PersistenceParseException("Size of bucket is wrong: "+data.size()+" should be 
"+sz);
+                                       try {
+                                               data = 
SerializableToFieldSetBucketUtil.create(fs.subset("ReturnBucket"), ctx.random, 
client.server.core.persistentTempBucketFactory);
+                                       } catch 
(CannotCreateFromFieldSetException e) {
+                                               throw new 
PersistenceParseException("Could not read old bucket for "+identifier+" : "+e, 
e);
+                                       }
                                } else {
                                        data = null;
                                }
@@ -229,9 +230,7 @@
                                } else if(data instanceof 
PaddedEphemerallyEncryptedBucket) {
                                        subset.put("UploadFrom", "direct");
                                        // the bucket is a persistent encrypted 
temp bucket
-                                       PaddedEphemerallyEncryptedBucket bucket 
= (PaddedEphemerallyEncryptedBucket) data;
-                                       subset.put("TempBucket.DecryptKey", 
HexUtil.bytesToHex(bucket.getKey()));
-                                       subset.put("TempBucket.Filename", 
((FileBucket)(bucket.getUnderlying())).getName());
+                                       bucketToFS(fs, "TempBucket", false, 
data);
                                } else {
                                        throw new IllegalStateException("Don't 
know what to do with bucket: "+data);
                                }

Modified: trunk/freenet/src/freenet/node/fcp/ClientRequest.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientRequest.java       2006-12-19 
13:30:06 UTC (rev 11479)
+++ trunk/freenet/src/freenet/node/fcp/ClientRequest.java       2006-12-19 
13:40:27 UTC (rev 11480)
@@ -8,8 +8,13 @@
 import freenet.client.async.ClientRequester;
 import freenet.keys.FreenetURI;
 import freenet.support.Fields;
+import freenet.support.HexUtil;
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
+import freenet.support.api.Bucket;
+import freenet.support.io.FileBucket;
+import freenet.support.io.PaddedEphemerallyEncryptedBucket;
+import freenet.support.io.SerializableToFieldSetBucket;

 /**
  * A request process carried out by the node for an FCP client.
@@ -287,5 +292,11 @@
        public abstract boolean canRestart();

        public abstract boolean restart();
-       
+
+       /** Utility method for storing details of a possibly encrypted bucket. 
*/
+       protected void bucketToFS(SimpleFieldSet fs, String name, boolean 
includeSize, Bucket data) {
+               SerializableToFieldSetBucket bucket = 
(SerializableToFieldSetBucket) data;
+               fs.put(name, bucket.toFieldSet());
+       }
+
 }

Modified: trunk/freenet/src/freenet/node/fcp/PersistenceParseException.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PersistenceParseException.java   
2006-12-19 13:30:06 UTC (rev 11479)
+++ trunk/freenet/src/freenet/node/fcp/PersistenceParseException.java   
2006-12-19 13:40:27 UTC (rev 11480)
@@ -13,4 +13,8 @@
                super(string);
        }

+       public PersistenceParseException(String string, Exception reason) {
+               super(string, reason);
+       }
+
 }


Reply via email to