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