Author: toad
Date: 2007-05-25 19:33:40 +0000 (Fri, 25 May 2007)
New Revision: 13375

Modified:
   trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
   trunk/freenet/src/freenet/client/InsertException.java
   trunk/freenet/src/freenet/client/async/BinaryBlob.java
   trunk/freenet/src/freenet/client/async/BinaryBlobInserter.java
   trunk/freenet/src/freenet/client/async/ClientPutter.java
   trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
   trunk/freenet/src/freenet/node/NodeARKInserter.java
   trunk/freenet/src/freenet/node/SimpleSendableInsert.java
   trunk/freenet/src/freenet/node/fcp/ClientGet.java
   trunk/freenet/src/freenet/node/fcp/ClientPut.java
   trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java
   trunk/freenet/src/freenet/node/fcp/PersistentPut.java
Log:
FCP binary blob insert support. Not tested yet.

Modified: trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
===================================================================
--- trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java     
2007-05-25 18:45:27 UTC (rev 13374)
+++ trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java     
2007-05-25 19:33:40 UTC (rev 13375)
@@ -137,7 +137,8 @@
                InsertContext context = getInsertContext(true);
                PutWaiter pw = new PutWaiter();
                ClientPutter put = new ClientPutter(pw, insert.getData(), 
insert.desiredURI, insert.clientMetadata, 
-                               context, core.requestStarters.chkPutScheduler, 
core.requestStarters.sskPutScheduler, priorityClass, getCHKOnly, isMetadata, 
this, null, filenameHint);
+                               context, core.requestStarters.chkPutScheduler, 
core.requestStarters.sskPutScheduler, priorityClass, 
+                               getCHKOnly, isMetadata, this, null, 
filenameHint, false);
                put.start(false);
                return pw.waitForCompletion();
        }

Modified: trunk/freenet/src/freenet/client/InsertException.java
===================================================================
--- trunk/freenet/src/freenet/client/InsertException.java       2007-05-25 
18:45:27 UTC (rev 13374)
+++ trunk/freenet/src/freenet/client/InsertException.java       2007-05-25 
19:33:40 UTC (rev 13375)
@@ -94,6 +94,8 @@
        public static final int CANCELLED = 10;
        /** Meta string used in the key (most probably '/') */
        public static final int META_STRINGS_NOT_SUPPORTED = 11;
+       /** Invalid binary blob data supplied so cannot insert it */
+       public static final int BINARY_BLOB_FORMAT_ERROR = 12;

        public static String getMessage(int mode) {
                String ret = L10n.getString("InsertException.longError."+mode);
@@ -123,6 +125,7 @@
                case COLLISION:
                case CANCELLED:
                case META_STRINGS_NOT_SUPPORTED:
+               case BINARY_BLOB_FORMAT_ERROR:
                        return true;
                case BUCKET_ERROR: // maybe
                case INTERNAL_ERROR: // maybe

Modified: trunk/freenet/src/freenet/client/async/BinaryBlob.java
===================================================================
--- trunk/freenet/src/freenet/client/async/BinaryBlob.java      2007-05-25 
18:45:27 UTC (rev 13374)
+++ trunk/freenet/src/freenet/client/async/BinaryBlob.java      2007-05-25 
19:33:40 UTC (rev 13375)
@@ -36,6 +36,7 @@
        static final short BLOB_BLOCK_VERSION = 0;
        static final short BLOB_END = 2;
        static final short BLOB_END_VERSION = 0;
+       public static final String MIME_TYPE = 
"application/x-freenet-binary-blob";
        static void writeBlobHeader(DataOutputStream binaryBlobStream, short 
type, short version, int length) throws IOException {
                binaryBlobStream.writeInt(length);
                binaryBlobStream.writeShort(type);

Modified: trunk/freenet/src/freenet/client/async/BinaryBlobInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/BinaryBlobInserter.java      
2007-05-25 18:45:27 UTC (rev 13374)
+++ trunk/freenet/src/freenet/client/async/BinaryBlobInserter.java      
2007-05-25 19:33:40 UTC (rev 13375)
@@ -8,17 +8,18 @@
 import com.onionnetworks.util.FileUtil;

 import freenet.client.FailureCodeTracker;
+import freenet.client.InsertContext;
 import freenet.client.InsertException;
+import freenet.keys.CHKBlock;
 import freenet.keys.Key;
 import freenet.keys.KeyBlock;
 import freenet.keys.KeyVerifyException;
+import freenet.keys.SSKBlock;
 import freenet.node.LowLevelPutException;
-import freenet.node.NodeClientCore;
 import freenet.node.SimpleSendableInsert;
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
 import freenet.support.api.Bucket;
-import freenet.support.api.BucketFactory;

 public class BinaryBlobInserter implements ClientPutState {

@@ -26,19 +27,18 @@
        final Object clientContext;
        final MySendableInsert[] inserters;
        final FailureCodeTracker errors;
-       final short maxRetries;
-       final short consecutiveRNFsCountAsSuccess;
+       final int maxRetries;
+       final int consecutiveRNFsCountAsSuccess;
        private boolean logMINOR;
        private int completedBlocks;
        private int succeededBlocks;
        private boolean fatal;

-       BinaryBlobInserter(Bucket blob, ClientPutter parent, BucketFactory bf, 
Object clientContext, boolean tolerant, NodeClientCore core, 
-                       short prioClass, short maxRetries, short 
consecutiveRNFsCountAsSuccess) 
+       BinaryBlobInserter(Bucket blob, ClientPutter parent, Object 
clientContext, boolean tolerant, short prioClass, InsertContext ctx) 
        throws IOException, BinaryBlobFormatException {
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
-               this.maxRetries = maxRetries;
-               this.consecutiveRNFsCountAsSuccess = 
consecutiveRNFsCountAsSuccess;
+               this.maxRetries = ctx.maxInsertRetries;
+               this.consecutiveRNFsCountAsSuccess = 
ctx.consecutiveRNFsCountAsSuccess;
                this.parent = parent;
                this.clientContext = clientContext;
                this.errors = new FailureCodeTracker(true);
@@ -96,7 +96,7 @@
                                }

                                MySendableInsert inserter =
-                                       new MySendableInsert(i, core, block, 
prioClass);
+                                       new MySendableInsert(i, block, 
prioClass, getScheduler(block), clientContext);

                                myInserters.add(inserter);

@@ -113,6 +113,14 @@
                parent.addMustSucceedBlocks(inserters.length);
        }

+       private ClientRequestScheduler getScheduler(KeyBlock block) {
+               if(block instanceof CHKBlock)
+                       return parent.chkScheduler;
+               else if(block instanceof SSKBlock)
+                       return parent.sskScheduler;
+               else throw new IllegalArgumentException("Unknown block type 
"+block.getClass()+" : "+block);
+       }
+
        public void cancel() {
                for(int i=0;i<inserters.length;i++) {
                        if(inserters[i] != null)
@@ -146,8 +154,8 @@
                private int consecutiveRNFs;
                private int retries;

-               public MySendableInsert(int i, NodeClientCore core, KeyBlock 
block, short prioClass) {
-                       super(core, block, prioClass);
+               public MySendableInsert(int i, KeyBlock block, short prioClass, 
ClientRequestScheduler scheduler, Object client) {
+                       super(block, prioClass, client, scheduler);
                        this.blockNum = i;
                }


Modified: trunk/freenet/src/freenet/client/async/ClientPutter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientPutter.java    2007-05-25 
18:45:27 UTC (rev 13374)
+++ trunk/freenet/src/freenet/client/async/ClientPutter.java    2007-05-25 
19:33:40 UTC (rev 13375)
@@ -3,6 +3,8 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package freenet.client.async;

+import java.io.IOException;
+
 import freenet.client.ClientMetadata;
 import freenet.client.InsertBlock;
 import freenet.client.InsertContext;
@@ -28,6 +30,7 @@
        private final boolean getCHKOnly;
        private final boolean isMetadata;
        private boolean startedStarting;
+       private final boolean binaryBlob;
        private FreenetURI uri;
        /** SimpleFieldSet containing progress information from last startup.
         * Will be progressively cleared during startup. */
@@ -50,7 +53,7 @@
         */
        public ClientPutter(ClientCallback client, Bucket data, FreenetURI 
targetURI, ClientMetadata cm, InsertContext ctx,
                        ClientRequestScheduler chkScheduler, 
ClientRequestScheduler sskScheduler, short priorityClass, boolean getCHKOnly, 
-                       boolean isMetadata, Object clientContext, 
SimpleFieldSet stored, String targetFilename) {
+                       boolean isMetadata, Object clientContext, 
SimpleFieldSet stored, String targetFilename, boolean binaryBlob) {
                super(priorityClass, chkScheduler, sskScheduler, clientContext);
                this.cm = cm;
                this.isMetadata = isMetadata;
@@ -63,6 +66,7 @@
                this.cancelled = false;
                this.oldProgress = stored;
                this.targetFilename = targetFilename;
+               this.binaryBlob = binaryBlob;
        }

        public void start(boolean earlyEncode) throws InsertException {
@@ -89,8 +93,13 @@
                                if(currentState != null) return false;
                                cancel = this.cancelled;
                                if(!cancel) {
-                                       currentState =
-                                               new SingleFileInserter(this, 
this, new InsertBlock(data, cm, targetURI), isMetadata, ctx, false, getCHKOnly, 
false, null, false, false, targetFilename, earlyEncode);
+                                       if(!binaryBlob)
+                                               currentState =
+                                                       new 
SingleFileInserter(this, this, new InsertBlock(data, cm, targetURI), 
isMetadata, ctx, 
+                                                                       false, 
getCHKOnly, false, null, false, false, targetFilename, earlyEncode);
+                                       else
+                                               currentState =
+                                                       new 
BinaryBlobInserter(data, this, null, false, priorityClass, ctx);
                                }
                        }
                        if(cancel) {
@@ -126,7 +135,29 @@
                        if (this.client!=null) {
                                this.client.onFailure(e, this);
                        }
-               }
+               } catch (IOException e) {
+                       Logger.error(this, "Failed to start insert: "+e, e);
+                       synchronized(this) {
+                               finished = true;
+                               oldProgress = null;
+                               currentState = null;
+                       }
+                       // notify the client that the insert could not even be 
started
+                       if (this.client!=null) {
+                               this.client.onFailure(new 
InsertException(InsertException.BUCKET_ERROR, e, null), this);
+                       }
+               } catch (BinaryBlobFormatException e) {
+                       Logger.error(this, "Failed to start insert: "+e, e);
+                       synchronized(this) {
+                               finished = true;
+                               oldProgress = null;
+                               currentState = null;
+                       }
+                       // notify the client that the insert could not even be 
started
+                       if (this.client!=null) {
+                               this.client.onFailure(new 
InsertException(InsertException.BINARY_BLOB_FORMAT_ERROR, e, null), this);
+                       }
+               } 
                if(Logger.shouldLog(Logger.MINOR, this))
                        Logger.minor(this, "Started "+this);
                return true;

Modified: trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
===================================================================
--- trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties   2007-05-25 
18:45:27 UTC (rev 13374)
+++ trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties   2007-05-25 
19:33:40 UTC (rev 13375)
@@ -356,6 +356,7 @@
 IPUndetectedUserAlert.unknownAddressWithConfigLink=Freenet was unable to 
determine your external IP address (or the IP address of your NAT-device or 
firewall). You can still exchange references with other people, however this 
will only work if the other user is not behind a NAT-device or firewall. As 
soon as you have connected to one other user in this way, Freenet will be able 
to determine your external IP address. You can determine your current IP 
address and tell your node with the 'Temporary IP address hint' 
${link}configuration parameter${/link}. Also, it would be a good idea to 
forward the port ${port} on your router for UDP to make it easy to connect to 
your node.
 InsertException.longError.10=Cancelled by user
 InsertException.longError.11=Meta string (most likely a '/') used in the URI
+InsertException.longError.12=Binary blob format error
 InsertException.longError.1=Caller supplied a URI we cannot use"
 InsertException.longError.2=Internal bucket error: out of disk 
space/permissions problem?
 InsertException.longError.3=Internal error
@@ -367,6 +368,7 @@
 InsertException.longError.9=Insert collided with different, pre-existing data 
at the same key
 InsertException.shortError.10=Cancelled
 InsertException.shortError.11=Meta string used in the key
+InsertException.shortError.12=Binary blob format error
 InsertException.shortError.1=Invalid URI
 InsertException.shortError.2=Temp files error
 InsertException.shortError.3=Internal error

Modified: trunk/freenet/src/freenet/node/NodeARKInserter.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeARKInserter.java 2007-05-25 18:45:27 UTC 
(rev 13374)
+++ trunk/freenet/src/freenet/node/NodeARKInserter.java 2007-05-25 19:33:40 UTC 
(rev 13375)
@@ -140,7 +140,8 @@
                inserter = new ClientPutter(this, b, uri,
                                        new ClientMetadata("text/plain") /* it 
won't quite fit in an SSK anyway */, 
                                        node.clientCore.makeClient((short)0, 
true).getInsertContext(true),
-                                       
node.clientCore.requestStarters.chkPutScheduler, 
node.clientCore.requestStarters.sskPutScheduler, 
RequestStarter.INTERACTIVE_PRIORITY_CLASS, false, false, this, null, null);
+                                       
node.clientCore.requestStarters.chkPutScheduler, 
node.clientCore.requestStarters.sskPutScheduler, 
+                                       
RequestStarter.INTERACTIVE_PRIORITY_CLASS, false, false, this, null, null, 
false);

                try {


Modified: trunk/freenet/src/freenet/node/SimpleSendableInsert.java
===================================================================
--- trunk/freenet/src/freenet/node/SimpleSendableInsert.java    2007-05-25 
18:45:27 UTC (rev 13374)
+++ trunk/freenet/src/freenet/node/SimpleSendableInsert.java    2007-05-25 
19:33:40 UTC (rev 13375)
@@ -3,7 +3,7 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package freenet.node;

-import freenet.client.InsertException;
+import freenet.client.async.ClientRequestScheduler;
 import freenet.client.async.ClientRequester;
 import freenet.keys.CHKBlock;
 import freenet.keys.KeyBlock;
@@ -18,17 +18,31 @@
  */
 public class SimpleSendableInsert extends SendableInsert {

-       public final NodeClientCore node;
        public final KeyBlock block;
        public final short prioClass;
        private boolean finished;
+       public final Object client;
+       public final ClientRequestScheduler scheduler;

-       public SimpleSendableInsert(NodeClientCore node, KeyBlock block, short 
prioClass) {
-               this.node = node;
+       public SimpleSendableInsert(NodeClientCore core, KeyBlock block, short 
prioClass) {
                this.block = block;
                this.prioClass = prioClass;
+               this.client = core;
+               if(block instanceof CHKBlock)
+                       scheduler = core.requestStarters.chkPutScheduler;
+               else if(block instanceof SSKBlock)
+                       scheduler = core.requestStarters.sskPutScheduler;
+               else
+                       throw new IllegalArgumentException("Don't know what to 
do with "+block, new Exception());
        }

+       public SimpleSendableInsert(KeyBlock block, short prioClass, Object 
client, ClientRequestScheduler scheduler) {
+               this.block = block;
+               this.prioClass = prioClass;
+               this.client = client;
+               this.scheduler = scheduler;
+       }
+       
        public void onSuccess() {
                // Yay!
                if(Logger.shouldLog(Logger.MINOR, this))
@@ -67,7 +81,7 @@
        }

        public Object getClient() {
-               return node;
+               return client;
        }

        public ClientRequester getClientRequest() {
@@ -84,12 +98,7 @@

        public void schedule() {
                finished = false; // can reschedule
-               if(block instanceof CHKBlock)
-                       node.requestStarters.chkPutScheduler.register(this);
-               else if(block instanceof SSKBlock)
-                       node.requestStarters.sskPutScheduler.register(this);
-               else
-                       Logger.error(this, "Don't know what to do with "+block, 
new Exception());
+               scheduler.register(this);
        }

        public void cancel() {

Modified: trunk/freenet/src/freenet/node/fcp/ClientGet.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientGet.java   2007-05-25 18:45:27 UTC 
(rev 13374)
+++ trunk/freenet/src/freenet/node/fcp/ClientGet.java   2007-05-25 19:33:40 UTC 
(rev 13375)
@@ -12,6 +12,7 @@
 import freenet.client.FetchResult;
 import freenet.client.InsertException;
 import freenet.client.async.BaseClientPutter;
+import freenet.client.async.BinaryBlob;
 import freenet.client.async.ClientCallback;
 import freenet.client.async.ClientGetter;
 import freenet.client.async.ClientRequester;
@@ -366,7 +367,7 @@
                        if(!binaryBlob)
                                this.foundDataMimeType = result.getMimeType();
                        else
-                               this.foundDataMimeType = 
"application/x-freenet-binary-blob";
+                               this.foundDataMimeType = BinaryBlob.MIME_TYPE;
                        this.succeeded = true;
                        finished = true;
                }

Modified: trunk/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPut.java   2007-05-25 18:45:27 UTC 
(rev 13374)
+++ trunk/freenet/src/freenet/node/fcp/ClientPut.java   2007-05-25 19:33:40 UTC 
(rev 13375)
@@ -17,6 +17,7 @@
 import freenet.client.InsertException;
 import freenet.client.Metadata;
 import freenet.client.MetadataUnresolvedException;
+import freenet.client.async.BinaryBlob;
 import freenet.client.async.ClientGetter;
 import freenet.client.async.ClientPutter;
 import freenet.crypt.SHA256;
@@ -48,6 +49,8 @@
        /** Filename if the file has one */
        private final String targetFilename;
        private boolean logMINOR;
+       /** If true, we are inserting a binary blob: No metadata, no URI is 
generated. */
+       private final boolean binaryBlob;

        /**
         * Creates a new persistent insert.
@@ -105,6 +108,7 @@
                }

                logMINOR = Logger.shouldLog(Logger.MINOR, this);
+               binaryBlob = false;
                this.targetFilename = targetFilename;
                this.uploadFrom = uploadFromType;
                this.origFilename = origFilename;
@@ -144,7 +148,7 @@
                if(logMINOR) Logger.minor(this, "data = "+data+", uploadFrom = 
"+ClientPutMessage.uploadFromString(uploadFrom));
                putter = new ClientPutter(this, data, uri, cm, 
                                ctx, 
client.core.requestStarters.chkPutScheduler, 
client.core.requestStarters.sskPutScheduler, priorityClass, 
-                               getCHKOnly, isMetadata, client.lowLevelClient, 
null, targetFilename);
+                               getCHKOnly, isMetadata, client.lowLevelClient, 
null, targetFilename, binaryBlob);
                if(persistenceType != PERSIST_CONNECTION) {
                        FCPMessage msg = persistentTagMessage();
                        client.queueClientRequestMessage(msg, 0);
@@ -157,6 +161,7 @@
                                message.getCHKOnly, message.dontCompress, 
message.maxRetries, message.earlyEncode);
                String salt = null;
                byte[] saltedHash = null;
+               binaryBlob = message.binaryBlob;

                if(message.uploadFromType == ClientPutMessage.UPLOAD_FROM_DISK) 
{
                        
if(!handler.server.core.allowUploadFrom(message.origFilename))
@@ -179,6 +184,11 @@
                this.origFilename = message.origFilename;
                // Now go through the fields one at a time
                String mimeType = message.contentType;
+               if(binaryBlob) {
+                       if(mimeType != null && 
!mimeType.equals(BinaryBlob.MIME_TYPE)) {
+                               throw new 
MessageInvalidException(ProtocolErrorMessage.INVALID_FIELD, "No MIME type 
allowed when inserting a binary blob", identifier, global);
+                       }
+               }
                if(mimeType == null && origFilename != null) {
                        mimeType = 
DefaultMIMETypes.guessMIMEType(origFilename.getName(), true);
                }
@@ -240,7 +250,7 @@
                if(logMINOR) Logger.minor(this, "data = "+data+", uploadFrom = 
"+ClientPutMessage.uploadFromString(uploadFrom));
                putter = new ClientPutter(this, data, uri, cm, 
                                ctx, 
client.core.requestStarters.chkPutScheduler, 
client.core.requestStarters.sskPutScheduler, priorityClass, 
-                               getCHKOnly, isMetadata, client.lowLevelClient, 
null, targetFilename);
+                               getCHKOnly, isMetadata, client.lowLevelClient, 
null, targetFilename, binaryBlob);
                if(persistenceType != PERSIST_CONNECTION) {
                        FCPMessage msg = persistentTagMessage();
                        client.queueClientRequestMessage(msg, 0);
@@ -277,6 +287,7 @@

                boolean isMetadata = false;

+               binaryBlob = fs.getBoolean("BinaryBlob", false);
                targetFilename = fs.get("TargetFilename");

                if(uploadFrom == ClientPutMessage.UPLOAD_FROM_DISK) {
@@ -331,7 +342,8 @@
                SimpleFieldSet oldProgress = fs.subset("progress");
                if(finished) oldProgress = null; // Not useful any more
                putter = new ClientPutter(this, data, uri, cm, ctx, 
client.core.requestStarters.chkPutScheduler, 
-                               client.core.requestStarters.sskPutScheduler, 
priorityClass, getCHKOnly, isMetadata, client.lowLevelClient, oldProgress, 
targetFilename);
+                               client.core.requestStarters.sskPutScheduler, 
priorityClass, getCHKOnly, isMetadata, 
+                               client.lowLevelClient, oldProgress, 
targetFilename, binaryBlob);
                if(persistenceType != PERSIST_CONNECTION) {
                        FCPMessage msg = persistentTagMessage();
                        client.queueClientRequestMessage(msg, 0);
@@ -396,6 +408,7 @@
                if(targetFilename != null)
                        fs.putSingle("TargetFilename", targetFilename);
                fs.putSingle("EarlyEncode", Boolean.toString(earlyEncode));
+               fs.put("BinaryBlob", binaryBlob);

                return fs;
        }
@@ -407,7 +420,7 @@
        protected FCPMessage persistentTagMessage() {
                return new PersistentPut(identifier, publicURI, verbosity, 
priorityClass, uploadFrom, targetURI, 
                                persistenceType, origFilename, 
clientMetadata.getMIMEType(), client.isGlobalQueue,
-                               getDataSize(), clientToken, started, 
ctx.maxInsertRetries, targetFilename);
+                               getDataSize(), clientToken, started, 
ctx.maxInsertRetries, targetFilename, binaryBlob);
        }

        protected String getTypeName() {

Modified: trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java    2007-05-25 
18:45:27 UTC (rev 13374)
+++ trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java    2007-05-25 
19:33:40 UTC (rev 13375)
@@ -64,6 +64,7 @@
        /** Filename (hint for the final filename) */
        final String targetFilename;
        final boolean earlyEncode;
+       final boolean binaryBlob;

        public static final short UPLOAD_FROM_DIRECT = 0;
        public static final short UPLOAD_FROM_DISK = 1;
@@ -72,6 +73,7 @@
        public ClientPutMessage(SimpleFieldSet fs) throws 
MessageInvalidException {
                String fnam = null;
                identifier = fs.get("Identifier");
+               binaryBlob = fs.getBoolean("BinaryBlob", false);
                global = Fields.stringToBool(fs.get("Global"), false);
                if(identifier == null)
                        throw new 
MessageInvalidException(ProtocolErrorMessage.MISSING_FIELD, "No Identifier", 
null, global);
@@ -226,6 +228,7 @@
                sfs.putSingle("PersistenceType", 
ClientRequest.persistenceTypeString(persistenceType));
                sfs.putSingle("DontCompress", Boolean.toString(dontCompress));
                sfs.putSingle("Global", Boolean.toString(global));
+               sfs.put("BinaryBlob", binaryBlob);
                return sfs;
        }


Modified: trunk/freenet/src/freenet/node/fcp/PersistentPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PersistentPut.java       2007-05-25 
18:45:27 UTC (rev 13374)
+++ trunk/freenet/src/freenet/node/fcp/PersistentPut.java       2007-05-25 
19:33:40 UTC (rev 13375)
@@ -28,11 +28,13 @@
        final boolean started;
        final int maxRetries;
        final String targetFilename;
+       final boolean binaryBlob;

        public PersistentPut(String identifier, FreenetURI uri, int verbosity, 
                        short priorityClass, short uploadFrom, FreenetURI 
targetURI, 
                        short persistenceType, File origFilename, String 
mimeType, 
-                       boolean global, long size, String clientToken, boolean 
started, int maxRetries, String targetFilename) {
+                       boolean global, long size, String clientToken, boolean 
started, 
+                       int maxRetries, String targetFilename, boolean 
binaryBlob) {
                this.identifier = identifier;
                this.uri = uri;
                this.verbosity = verbosity;
@@ -48,6 +50,7 @@
                this.started = started;
                this.maxRetries = maxRetries;
                this.targetFilename = targetFilename;
+               this.binaryBlob = binaryBlob;
        }

        public SimpleFieldSet getFieldSet() {
@@ -73,6 +76,8 @@
                fs.put("MaxRetries", maxRetries);
                if(targetFilename != null)
                        fs.putSingle("TargetFilename", targetFilename);
+               if(binaryBlob)
+                       fs.put("BinaryBlob", binaryBlob);
                return fs;
        }



Reply via email to