Author: toad
Date: 2006-01-18 17:34:28 +0000 (Wed, 18 Jan 2006)
New Revision: 7874

Added:
   trunk/freenet/src/freenet/node/fcp/ClientPut.java
   trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java
   trunk/freenet/src/freenet/node/fcp/GetFailedMessage.java
   trunk/freenet/src/freenet/node/fcp/PutFailedMessage.java
   trunk/freenet/src/freenet/node/fcp/PutSuccessfulMessage.java
Removed:
   trunk/freenet/src/freenet/node/fcp/FetchErrorMessage.java
Modified:
   trunk/freenet/src/freenet/client/HighLevelSimpleClient.java
   trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
   trunk/freenet/src/freenet/client/InserterContext.java
   trunk/freenet/src/freenet/client/InserterException.java
   trunk/freenet/src/freenet/clients/http/FproxyToadlet.java
   trunk/freenet/src/freenet/node/Version.java
   trunk/freenet/src/freenet/node/fcp/ClientGet.java
   trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
   trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java
   trunk/freenet/src/freenet/node/fcp/FCPMessage.java
Log:
362: Inserts work over FCP. (Maybe not always with KSKs though).

Modified: trunk/freenet/src/freenet/client/HighLevelSimpleClient.java
===================================================================
--- trunk/freenet/src/freenet/client/HighLevelSimpleClient.java 2006-01-18 
16:38:29 UTC (rev 7873)
+++ trunk/freenet/src/freenet/client/HighLevelSimpleClient.java 2006-01-18 
17:34:28 UTC (rev 7874)
@@ -41,6 +41,8 @@
        public FreenetURI insertManifest(FreenetURI insertURI, HashMap 
bucketsByName, String defaultName) throws InserterException;

        public FetcherContext getFetcherContext();
+
+       public InserterContext getInserterContext();

        /**
         * Add a ClientEventListener.

Modified: trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
===================================================================
--- trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java     
2006-01-18 16:38:29 UTC (rev 7873)
+++ trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java     
2006-01-18 17:34:28 UTC (rev 7874)
@@ -101,8 +101,7 @@
        }

        public FreenetURI insert(InsertBlock insert, boolean getCHKOnly) throws 
InserterException {
-               InserterContext context = new InserterContext(client, 
bucketFactory, random, INSERT_RETRIES, CONSECUTIVE_RNFS_ASSUME_SUCCESS,
-                               SPLITFILE_INSERT_THREADS, 
SPLITFILE_BLOCKS_PER_SEGMENT, SPLITFILE_CHECK_BLOCKS_PER_SEGMENT, 
globalEventProducer, insertStarter, cacheLocalRequests);
+               InserterContext context = getInserterContext();
                FileInserter i = new FileInserter(context);
                return i.run(insert, false, getCHKOnly, false, null);
        }
@@ -151,4 +150,9 @@
                                MAX_SPLITFILE_BLOCKS_PER_SEGMENT, 
MAX_SPLITFILE_CHECK_BLOCKS_PER_SEGMENT,
                                random, archiveManager, bucketFactory, 
globalEventProducer, requestStarter, cacheLocalRequests);
        }
+
+       public InserterContext getInserterContext() {
+               return new InserterContext(client, bucketFactory, random, 
INSERT_RETRIES, CONSECUTIVE_RNFS_ASSUME_SUCCESS,
+                               SPLITFILE_INSERT_THREADS, 
SPLITFILE_BLOCKS_PER_SEGMENT, SPLITFILE_CHECK_BLOCKS_PER_SEGMENT, 
globalEventProducer, insertStarter, cacheLocalRequests);
+       }
 }

Modified: trunk/freenet/src/freenet/client/InserterContext.java
===================================================================
--- trunk/freenet/src/freenet/client/InserterContext.java       2006-01-18 
16:38:29 UTC (rev 7873)
+++ trunk/freenet/src/freenet/client/InserterContext.java       2006-01-18 
17:34:28 UTC (rev 7874)
@@ -15,7 +15,7 @@
        final boolean dontCompress;
        final RandomSource random;
        final short splitfileAlgorithm;
-       final int maxInsertRetries;
+       public int maxInsertRetries;
        final int maxSplitInsertThreads;
        final int consecutiveRNFsCountAsSuccess;
        final int splitfileSegmentDataBlocks;
@@ -24,6 +24,7 @@
        final RequestStarterClient starterClient;
        /** Interesting tradeoff, see comments at top of Node.java. */
        final boolean cacheLocalRequests;
+       private boolean cancelled;

        public InserterContext(SimpleLowLevelClient client, BucketFactory bf, 
RandomSource random,
                        int maxRetries, int rnfsToSuccess, int maxThreads, int 
splitfileSegmentDataBlocks, int splitfileSegmentCheckBlocks,
@@ -43,4 +44,28 @@
                this.cacheLocalRequests = cacheLocalRequests;
        }

+       public InserterContext(InserterContext ctx) {
+               this.client = ctx.client;
+               this.bf = ctx.bf;
+               this.random = ctx.random;
+               this.dontCompress = ctx.dontCompress;
+               this.splitfileAlgorithm = ctx.splitfileAlgorithm;
+               this.consecutiveRNFsCountAsSuccess = 
ctx.consecutiveRNFsCountAsSuccess;
+               this.maxInsertRetries = ctx.maxInsertRetries;
+               this.maxSplitInsertThreads = ctx.maxSplitInsertThreads;
+               this.eventProducer = ctx.eventProducer;
+               this.splitfileSegmentDataBlocks = 
ctx.splitfileSegmentDataBlocks;
+               this.splitfileSegmentCheckBlocks = 
ctx.splitfileSegmentCheckBlocks;
+               this.starterClient = ctx.starterClient;
+               this.cacheLocalRequests = ctx.cacheLocalRequests;
+       }
+
+       public void cancel() {
+               cancelled = true;
+       }
+
+       public boolean isCancelled() {
+               return cancelled;
+       }
+       
 }

Modified: trunk/freenet/src/freenet/client/InserterException.java
===================================================================
--- trunk/freenet/src/freenet/client/InserterException.java     2006-01-18 
16:38:29 UTC (rev 7873)
+++ trunk/freenet/src/freenet/client/InserterException.java     2006-01-18 
17:34:28 UTC (rev 7874)
@@ -12,6 +12,8 @@
        /** If a non-serious error, the URI */
        public final FreenetURI uri;

+       public final String extra;
+       
        /** Get the failure mode. */
        public int getMode() {
                return mode;
@@ -19,6 +21,7 @@

        public InserterException(int m, String msg, FreenetURI expectedURI) {
                super(getMessage(m)+": "+msg);
+               extra = msg;
                mode = m;
                Logger.minor(this, "Creating InserterException: 
"+getMessage(mode)+": "+msg, this);
                errorCodes = null;
@@ -27,6 +30,7 @@

        public InserterException(int m, FreenetURI expectedURI) {
                super(getMessage(m));
+               extra = null;
                mode = m;
                Logger.minor(this, "Creating InserterException: 
"+getMessage(mode), this);
                errorCodes = null;
@@ -35,6 +39,7 @@

        public InserterException(int mode, Throwable e, FreenetURI expectedURI) 
{
                super(getMessage(mode)+": "+e.getMessage());
+               extra = e.getMessage();
                Logger.minor(this, "Creating InserterException: 
"+getMessage(mode)+": "+e, e);
                this.mode = mode;
                errorCodes = null;
@@ -44,6 +49,7 @@

        public InserterException(int mode, FailureCodeTracker errorCodes, 
FreenetURI expectedURI) {
                super(getMessage(mode));
+               extra = null;
                this.mode = mode;
                Logger.minor(this, "Creating InserterException: 
"+getMessage(mode), this);
                this.errorCodes = errorCodes;
@@ -52,6 +58,7 @@

        public InserterException(int mode) {
                super(getMessage(mode));
+               extra = null;
                this.mode = mode;
                this.errorCodes = null;
                this.uri = null;

Modified: trunk/freenet/src/freenet/clients/http/FproxyToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/FproxyToadlet.java   2006-01-18 
16:38:29 UTC (rev 7873)
+++ trunk/freenet/src/freenet/clients/http/FproxyToadlet.java   2006-01-18 
17:34:28 UTC (rev 7874)
@@ -37,8 +37,11 @@
                        writeReply(ctx, 200, result.getMimeType(), "OK", 
result.asBucket());
                } catch (FetchException e) {
                        String msg = e.getMessage();
+                       String extra = "";
+                       if(e.errorCodes != null)
+                               extra = 
"<pre>"+e.errorCodes.toVerboseString()+"</pre>";
                        this.writeReply(ctx, 500 /* close enough - FIXME 
probably should depend on status code */,
-                                       "text/html", msg, 
"<html><head><title>"+msg+"</title></head><body>Error: 
"+HTMLEncoder.encode(msg)+"</body></html>");
+                                       "text/html", msg, 
"<html><head><title>"+msg+"</title></head><body>Error: 
"+HTMLEncoder.encode(msg)+extra+"</body></html>");
                } catch (Throwable t) {
                        Logger.error(this, "Caught "+t, t);
                        String msg = "<html><head><title>Internal 
Error</title></head><body><h1>Internal Error: please report</h1><pre>";

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-01-18 16:38:29 UTC (rev 
7873)
+++ trunk/freenet/src/freenet/node/Version.java 2006-01-18 17:34:28 UTC (rev 
7874)
@@ -20,7 +20,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       public static final int buildNumber = 361;
+       public static final int buildNumber = 362;

        /** Oldest build of Fred we will talk to */
        public static final int lastGoodBuild = 359;

Modified: trunk/freenet/src/freenet/node/fcp/ClientGet.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientGet.java   2006-01-18 16:38:29 UTC 
(rev 7873)
+++ trunk/freenet/src/freenet/node/fcp/ClientGet.java   2006-01-18 17:34:28 UTC 
(rev 7874)
@@ -62,7 +62,7 @@
                } catch (FetchException e) {
                        // Error
                        Logger.minor(this, "Caught "+e, e);
-                       FCPMessage msg = new FetchErrorMessage(handler, e, 
identifier);
+                       FCPMessage msg = new GetFailedMessage(handler, e, 
identifier);
                        handler.outputHandler.queue(msg);
                }
        }

Added: trunk/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPut.java   2006-01-18 16:38:29 UTC 
(rev 7873)
+++ trunk/freenet/src/freenet/node/fcp/ClientPut.java   2006-01-18 17:34:28 UTC 
(rev 7874)
@@ -0,0 +1,49 @@
+package freenet.node.fcp;
+
+import freenet.client.ClientMetadata;
+import freenet.client.FileInserter;
+import freenet.client.InsertBlock;
+import freenet.client.InserterContext;
+import freenet.client.InserterException;
+import freenet.keys.FreenetURI;
+
+public class ClientPut extends ClientRequest implements Runnable {
+
+       final FreenetURI uri;
+       final FileInserter inserter;
+       final InserterContext ctx;
+       final InsertBlock block;
+       final FCPConnectionHandler handler;
+       final String identifier;
+       
+       public ClientPut(FCPConnectionHandler handler, ClientPutMessage 
message) {
+               this.handler = handler;
+               this.identifier = message.identifier;
+               ctx = new InserterContext(handler.defaultInsertContext);
+               // Now go through the fields one at a time
+               uri = message.uri;
+               String mimeType = message.contentType;
+               block = new InsertBlock(message.bucket, new 
ClientMetadata(mimeType), uri);
+               inserter = new FileInserter(ctx);
+               ctx.maxInsertRetries = message.maxRetries;
+               Thread t = new Thread(this, "FCP inserter for "+uri+" 
("+identifier+") on "+handler);
+               t.setDaemon(true);
+               t.start();
+       }
+
+       public void cancel() {
+               ctx.cancel();
+       }
+
+       public void run() {
+               try {
+                       FreenetURI uri = inserter.run(block, false, false, 
false, null);
+                       FCPMessage msg = new PutSuccessfulMessage(identifier, 
uri);
+                       handler.outputHandler.queue(msg);
+               } catch (InserterException e) {
+                       FCPMessage msg = new PutFailedMessage(e, identifier);
+                       handler.outputHandler.queue(msg);
+               }
+       }
+
+}

Added: trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java    2006-01-18 
16:38:29 UTC (rev 7873)
+++ trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java    2006-01-18 
17:34:28 UTC (rev 7874)
@@ -0,0 +1,96 @@
+package freenet.node.fcp;
+
+import java.net.MalformedURLException;
+
+import freenet.keys.FreenetURI;
+import freenet.node.Node;
+import freenet.support.SimpleFieldSet;
+
+/**
+ * 
+ * ClientPut
+ * URI=CHK@ // could as easily be an insertable SSK URI
+ * Metadata.ContentType=text/html
+ * DataLength=19000 // hex for 100kB
+ * Identifier=Insert-1 // identifier, as always
+ * Verbosity=0 // just report when complete
+ * MaxRetries=999999 // lots of retries
+ * Data
+ * 
+ * Neither IgnoreDS nor DSOnly make sense for inserts.
+ */
+public class ClientPutMessage extends DataCarryingMessage {
+
+       final FreenetURI uri;
+       final String contentType;
+       final long dataLength;
+       final String identifier;
+       final int verbosity;
+       final int maxRetries;
+       
+       public ClientPutMessage(SimpleFieldSet fs) throws 
MessageInvalidException {
+               try {
+                       uri = new FreenetURI(fs.get("URI"));
+               } catch (MalformedURLException e) {
+                       throw new 
MessageInvalidException(ProtocolErrorMessage.URI_PARSE_ERROR, e.getMessage());
+               }
+               identifier = fs.get("Identifier");
+               if(identifier == null)
+                       throw new 
MessageInvalidException(ProtocolErrorMessage.MISSING_FIELD, "No Identifier");
+               String verbosityString = fs.get("Verbosity");
+               if(verbosityString == null)
+                       verbosity = 0;
+               else {
+                       try {
+                               verbosity = Integer.parseInt(verbosityString, 
16);
+                       } catch (NumberFormatException e) {
+                               throw new 
MessageInvalidException(ProtocolErrorMessage.ERROR_PARSING_NUMBER, "Error 
parsing Verbosity field: "+e.getMessage());
+                       }
+               }
+               String dataLengthString = fs.get("DataLength");
+               if(dataLengthString == null)
+                       throw new 
MessageInvalidException(ProtocolErrorMessage.MISSING_FIELD, "Need DataLength on 
a ClientPut");
+               try {
+                       dataLength = Long.parseLong(dataLengthString, 16);
+               } catch (NumberFormatException e) {
+                       throw new 
MessageInvalidException(ProtocolErrorMessage.ERROR_PARSING_NUMBER, "Error 
parsing DataLength field: "+e.getMessage());
+               }
+               contentType = fs.get("Metadata.ContentType");
+               String maxRetriesString = fs.get("MaxRetries");
+               if(maxRetriesString == null)
+                       // default to 0
+                       maxRetries = 0;
+               else {
+                       try {
+                               maxRetries = Integer.parseInt(maxRetriesString, 
16);
+                       } catch (NumberFormatException e) {
+                               throw new 
MessageInvalidException(ProtocolErrorMessage.ERROR_PARSING_NUMBER, "Error 
parsing MaxSize field: "+e.getMessage());
+                       }
+               }
+       }
+
+       public SimpleFieldSet getFieldSet() {
+               SimpleFieldSet sfs = new SimpleFieldSet();
+               sfs.put("URI", uri.toString());
+               sfs.put("Identifier", identifier);
+               sfs.put("DataLength", Long.toHexString(dataLength));
+               sfs.put("Verbosity", Integer.toHexString(verbosity));
+               sfs.put("MaxRetries", Integer.toHexString(maxRetries));
+               sfs.put("Metadata.ContentType", contentType);
+               return sfs;
+       }
+
+       public String getName() {
+               return "ClientPut";
+       }
+
+       public void run(FCPConnectionHandler handler, Node node)
+                       throws MessageInvalidException {
+               handler.startClientPut(this);
+       }
+
+       long dataLength() {
+               return dataLength;
+       }
+
+}

Modified: trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java        
2006-01-18 16:38:29 UTC (rev 7873)
+++ trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java        
2006-01-18 17:34:28 UTC (rev 7874)
@@ -5,6 +5,8 @@
 import java.util.HashMap;

 import freenet.client.FetcherContext;
+import freenet.client.HighLevelSimpleClient;
+import freenet.client.InserterContext;
 import freenet.node.Node;
 import freenet.support.BucketFactory;
 import freenet.support.Logger;
@@ -22,6 +24,7 @@
        final BucketFactory bf;
        final HashMap requestsByIdentifier;
        final FetcherContext defaultFetchContext;
+       public InserterContext defaultInsertContext;

        public FCPConnectionHandler(Socket s, Node node) {
                this.sock = s;
@@ -31,8 +34,9 @@
                isClosed = false;
                this.bf = node.tempBucketFactory;
                requestsByIdentifier = new HashMap();
-               defaultFetchContext = 
-                       node.makeClient((short)0,(short)0).getFetcherContext();
+               HighLevelSimpleClient client = 
node.makeClient((short)0,(short)0);
+               defaultFetchContext = client.getFetcherContext();
+               defaultInsertContext = client.getInserterContext();
        }

        public void close() {
@@ -105,4 +109,21 @@
                        ClientGet cg = new ClientGet(this, message);
                }
        }
+
+       public void startClientPut(ClientPutMessage message) {
+               String id = message.identifier;
+               if(requestsByIdentifier.containsKey(id)) {
+                       Logger.normal(this, "Identifier collision on "+this);
+                       FCPMessage msg = new IdentifierCollisionMessage(id);
+                       outputHandler.queue(msg);
+                       return;
+               }
+               synchronized(this) {
+                       if(isClosed) return;
+                       ClientPut cg = new ClientPut(this, message);
+               }
+               
+               // TODO Auto-generated method stub
+               
+       }
 }

Modified: trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java   
2006-01-18 16:38:29 UTC (rev 7873)
+++ trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java   
2006-01-18 17:34:28 UTC (rev 7874)
@@ -40,6 +40,7 @@
                        SimpleFieldSet fs;
                        // Read a message
                        String messageType = lis.readLine(64, 64);
+                       if(messageType.equals("")) continue;
                        fs = new SimpleFieldSet(lis, 4096, 128);
                        FCPMessage msg;
                        try {

Modified: trunk/freenet/src/freenet/node/fcp/FCPMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPMessage.java  2006-01-18 16:38:29 UTC 
(rev 7873)
+++ trunk/freenet/src/freenet/node/fcp/FCPMessage.java  2006-01-18 17:34:28 UTC 
(rev 7874)
@@ -29,6 +29,8 @@
                        return new ClientHelloMessage(fs);
                if(name.equals("ClientGet"))
                        return new ClientGetMessage(fs);
+               if(name.equals("ClientPut"))
+                       return new ClientPutMessage(fs);
                if(name.equals("Void"))
                        return null;
 //             if(name.equals("ClientPut"))

Deleted: trunk/freenet/src/freenet/node/fcp/FetchErrorMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FetchErrorMessage.java   2006-01-18 
16:38:29 UTC (rev 7873)
+++ trunk/freenet/src/freenet/node/fcp/FetchErrorMessage.java   2006-01-18 
17:34:28 UTC (rev 7874)
@@ -1,45 +0,0 @@
-package freenet.node.fcp;
-
-import freenet.client.FailureCodeTracker;
-import freenet.client.FetchException;
-import freenet.node.Node;
-import freenet.support.SimpleFieldSet;
-
-public class FetchErrorMessage extends FCPMessage {
-
-       final int code;
-       final String codeDescription;
-       final String extraDescription;
-       final FailureCodeTracker tracker;
-       final boolean isFatal;
-       
-       public FetchErrorMessage(FCPConnectionHandler handler, FetchException 
e, String identifier) {
-               this.tracker = e.errorCodes;
-               this.code = e.mode;
-               this.codeDescription = FetchException.getMessage(code);
-               this.extraDescription = e.extraMessage;
-               this.isFatal = e.isFatal();
-       }
-
-       public SimpleFieldSet getFieldSet() {
-               SimpleFieldSet sfs = new SimpleFieldSet();
-               sfs.put("Code", Integer.toHexString(code));
-               sfs.put("CodeDescription", codeDescription);
-               if(extraDescription != null)
-                       sfs.put("ExtraDescription", extraDescription);
-               sfs.put("Fatal", Boolean.toString(isFatal));
-               if(tracker != null) {
-                       tracker.copyToFieldSet(sfs, "Errors.");
-               }
-               return sfs;
-       }
-
-       public String getName() {
-               return "FetchError";
-       }
-
-       public void run(FCPConnectionHandler handler, Node node) throws 
MessageInvalidException {
-               throw new 
MessageInvalidException(ProtocolErrorMessage.INVALID_MESSAGE, "FetchError goes 
from server to client not the other way around");
-       }
-
-}

Copied: trunk/freenet/src/freenet/node/fcp/GetFailedMessage.java (from rev 
7873, trunk/freenet/src/freenet/node/fcp/FetchErrorMessage.java)
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FetchErrorMessage.java   2006-01-18 
16:38:29 UTC (rev 7873)
+++ trunk/freenet/src/freenet/node/fcp/GetFailedMessage.java    2006-01-18 
17:34:28 UTC (rev 7874)
@@ -0,0 +1,48 @@
+package freenet.node.fcp;
+
+import freenet.client.FailureCodeTracker;
+import freenet.client.FetchException;
+import freenet.node.Node;
+import freenet.support.SimpleFieldSet;
+
+public class GetFailedMessage extends FCPMessage {
+
+       final int code;
+       final String codeDescription;
+       final String extraDescription;
+       final FailureCodeTracker tracker;
+       final boolean isFatal;
+       final String identifier;
+       
+       public GetFailedMessage(FCPConnectionHandler handler, FetchException e, 
String identifier) {
+               this.tracker = e.errorCodes;
+               this.code = e.mode;
+               this.codeDescription = FetchException.getMessage(code);
+               this.extraDescription = e.extraMessage;
+               this.isFatal = e.isFatal();
+               this.identifier = identifier;
+       }
+
+       public SimpleFieldSet getFieldSet() {
+               SimpleFieldSet sfs = new SimpleFieldSet();
+               sfs.put("Code", Integer.toHexString(code));
+               sfs.put("CodeDescription", codeDescription);
+               if(extraDescription != null)
+                       sfs.put("ExtraDescription", extraDescription);
+               sfs.put("Fatal", Boolean.toString(isFatal));
+               if(tracker != null) {
+                       tracker.copyToFieldSet(sfs, "Errors.");
+               }
+               sfs.put("Identifier", identifier);
+               return sfs;
+       }
+
+       public String getName() {
+               return "FetchError";
+       }
+
+       public void run(FCPConnectionHandler handler, Node node) throws 
MessageInvalidException {
+               throw new 
MessageInvalidException(ProtocolErrorMessage.INVALID_MESSAGE, "FetchError goes 
from server to client not the other way around");
+       }
+
+}

Added: trunk/freenet/src/freenet/node/fcp/PutFailedMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PutFailedMessage.java    2006-01-18 
16:38:29 UTC (rev 7873)
+++ trunk/freenet/src/freenet/node/fcp/PutFailedMessage.java    2006-01-18 
17:34:28 UTC (rev 7874)
@@ -0,0 +1,51 @@
+package freenet.node.fcp;
+
+import freenet.client.FailureCodeTracker;
+import freenet.client.InserterException;
+import freenet.keys.FreenetURI;
+import freenet.node.Node;
+import freenet.support.SimpleFieldSet;
+
+public class PutFailedMessage extends FCPMessage {
+
+       final int code;
+       final String codeDescription;
+       final String extraDescription;
+       final FailureCodeTracker tracker;
+       final FreenetURI expectedURI;
+       final String identifier;
+       
+       public PutFailedMessage(InserterException e, String identifier) {
+               this.code = e.getMode();
+               this.codeDescription = InserterException.getMessage(code);
+               this.extraDescription = e.extra;
+               this.tracker = e.errorCodes;
+               this.expectedURI = e.uri;
+               this.identifier = identifier;
+       }
+
+       public SimpleFieldSet getFieldSet() {
+               SimpleFieldSet fs = new SimpleFieldSet();
+               fs.put("Identifier", identifier);
+               fs.put("Code", Integer.toHexString(code));
+               fs.put("CodeDescription", codeDescription);
+               if(extraDescription != null)
+                       fs.put("ExtraDescription", extraDescription);
+               if(tracker != null) {
+                       tracker.copyToFieldSet(fs, "Errors.");
+               }
+               if(expectedURI != null)
+                       fs.put("ExpectedURI", expectedURI.toString());
+               return fs;
+       }
+
+       public String getName() {
+               return "PutFailed";
+       }
+
+       public void run(FCPConnectionHandler handler, Node node)
+                       throws MessageInvalidException {
+               throw new 
MessageInvalidException(ProtocolErrorMessage.INVALID_MESSAGE, "PutFailed goes 
from server to client not the other way around");
+       }
+
+}

Added: trunk/freenet/src/freenet/node/fcp/PutSuccessfulMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PutSuccessfulMessage.java        
2006-01-18 16:38:29 UTC (rev 7873)
+++ trunk/freenet/src/freenet/node/fcp/PutSuccessfulMessage.java        
2006-01-18 17:34:28 UTC (rev 7874)
@@ -0,0 +1,33 @@
+package freenet.node.fcp;
+
+import freenet.keys.FreenetURI;
+import freenet.node.Node;
+import freenet.support.SimpleFieldSet;
+
+public class PutSuccessfulMessage extends FCPMessage {
+
+       public final String identifier;
+       public final FreenetURI uri;
+       
+       public PutSuccessfulMessage(String identifier, FreenetURI uri) {
+               this.identifier = identifier;
+               this.uri = uri;
+       }
+
+       public SimpleFieldSet getFieldSet() {
+               SimpleFieldSet fs = new SimpleFieldSet();
+               fs.put("Identifier", identifier);
+               fs.put("URI", uri.toString());
+               return fs;
+       }
+
+       public String getName() {
+               return "InsertSuccessful";
+       }
+
+       public void run(FCPConnectionHandler handler, Node node)
+                       throws MessageInvalidException {
+               throw new 
MessageInvalidException(ProtocolErrorMessage.INVALID_MESSAGE, "InsertSuccessful 
goes from server to client not the other way around");
+       }
+
+}


Reply via email to