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