Author: toad
Date: 2006-04-01 13:57:27 +0000 (Sat, 01 Apr 2006)
New Revision: 8420
Added:
trunk/freenet/src/freenet/node/fcp/GetResultsMessage.java
Modified:
trunk/freenet/src/freenet/node/fcp/ClientGet.java
trunk/freenet/src/freenet/node/fcp/ClientPut.java
trunk/freenet/src/freenet/node/fcp/ClientPutBase.java
trunk/freenet/src/freenet/node/fcp/ClientRequest.java
trunk/freenet/src/freenet/node/fcp/FCPClient.java
trunk/freenet/src/freenet/node/fcp/FCPMessage.java
trunk/freenet/src/freenet/node/fcp/FCPServer.java
trunk/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
Log:
604: FCPv2 PROTOCOL CHANGE:
1. Add GetResults message. This gets current status, including AllData if
necessary, for a request.
2. Persistent requests do not send AllData any more, unless you ask them for it.
Bugfix: We were using an encrypted bucket wrapping an encrypted bucket wrapping
a file bucket.
This caused persistent direct requests to fail to serialize.
Modified: trunk/freenet/src/freenet/node/fcp/ClientGet.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientGet.java 2006-03-31 23:18:22 UTC
(rev 8419)
+++ trunk/freenet/src/freenet/node/fcp/ClientGet.java 2006-04-01 13:57:27 UTC
(rev 8420)
@@ -105,7 +105,7 @@
client.register(this);
getter = new ClientGetter(this, client.node.chkFetchScheduler,
client.node.sskFetchScheduler, uri, fctx, priorityClass, client, returnBucket);
if(persistenceType != PERSIST_CONNECTION && handler != null)
- sendPendingMessages(handler.outputHandler, true);
+ sendPendingMessages(handler.outputHandler, true, true);
}
@@ -274,8 +274,9 @@
private void trySendAllDataMessage(AllDataMessage msg,
FCPConnectionOutputHandler handler) {
if(persistenceType != ClientRequest.PERSIST_CONNECTION) {
allDataPending = msg;
+ } else {
+ client.queueClientRequestMessage(msg, 0);
}
- client.queueClientRequestMessage(msg, 0);
}
private void trySendProgress(SimpleProgressMessage msg,
FCPConnectionOutputHandler handler) {
@@ -285,7 +286,7 @@
client.queueClientRequestMessage(msg,
VERBOSITY_SPLITFILE_PROGRESS);
}
- public void sendPendingMessages(FCPConnectionOutputHandler handler,
boolean includePersistentRequest) {
+ public void sendPendingMessages(FCPConnectionOutputHandler handler,
boolean includePersistentRequest, boolean includeData) {
if(persistenceType == ClientRequest.PERSIST_CONNECTION) {
Logger.error(this, "WTF?
persistenceType="+persistenceType, new Exception("error"));
return;
@@ -298,7 +299,7 @@
handler.queue(progressPending);
if(finished)
trySendDataFoundOrGetFailed(handler);
- if(allDataPending != null)
+ if(includeData && allDataPending != null)
handler.queue(allDataPending);
}
@@ -380,8 +381,9 @@
// 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",
((FileBucket)b.getUnderlying()).getName());
+ fs.put("ReturnBucket.Filename", underlying.getName());
}
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-03-31 23:18:22 UTC
(rev 8419)
+++ trunk/freenet/src/freenet/node/fcp/ClientPut.java 2006-04-01 13:57:27 UTC
(rev 8420)
@@ -2,16 +2,13 @@
import java.io.File;
import java.io.IOException;
-import java.io.OutputStream;
import freenet.client.ClientMetadata;
-import freenet.client.InsertBlock;
import freenet.client.InserterException;
import freenet.client.Metadata;
import freenet.client.async.ClientPutter;
import freenet.keys.FreenetURI;
import freenet.support.Bucket;
-import freenet.support.Fields;
import freenet.support.HexUtil;
import freenet.support.Logger;
import freenet.support.PaddedEphemerallyEncryptedBucket;
@@ -61,7 +58,7 @@
ctx, client.node.chkPutScheduler,
client.node.sskPutScheduler, priorityClass,
getCHKOnly, isMetadata, client);
if(persistenceType != PERSIST_CONNECTION && handler != null)
- sendPendingMessages(handler.outputHandler, true);
+ sendPendingMessages(handler.outputHandler, true, false);
}
/**
Modified: trunk/freenet/src/freenet/node/fcp/ClientPutBase.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPutBase.java 2006-03-31
23:18:22 UTC (rev 8419)
+++ trunk/freenet/src/freenet/node/fcp/ClientPutBase.java 2006-04-01
13:57:27 UTC (rev 8420)
@@ -186,7 +186,7 @@
client.queueClientRequestMessage(msg, verbosity);
}
- public void sendPendingMessages(FCPConnectionOutputHandler handler,
boolean includePersistentRequest) {
+ public void sendPendingMessages(FCPConnectionOutputHandler handler,
boolean includePersistentRequest, boolean includeData) {
if(persistenceType == PERSIST_CONNECTION) {
Logger.error(this, "WTF?
persistenceType="+persistenceType, new Exception("error"));
return;
Modified: trunk/freenet/src/freenet/node/fcp/ClientRequest.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientRequest.java 2006-03-31
23:18:22 UTC (rev 8419)
+++ trunk/freenet/src/freenet/node/fcp/ClientRequest.java 2006-04-01
13:57:27 UTC (rev 8420)
@@ -81,7 +81,7 @@
public abstract void onLostConnection();
/** Send any pending messages for a persistent request e.g. after
reconnecting */
- public abstract void sendPendingMessages(FCPConnectionOutputHandler
handler, boolean includePersistentRequest);
+ public abstract void sendPendingMessages(FCPConnectionOutputHandler
handler, boolean includePersistentRequest, boolean includeData);
// Persistence
Modified: trunk/freenet/src/freenet/node/fcp/FCPClient.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPClient.java 2006-03-31 23:18:22 UTC
(rev 8419)
+++ trunk/freenet/src/freenet/node/fcp/FCPClient.java 2006-04-01 13:57:27 UTC
(rev 8420)
@@ -111,7 +111,7 @@
reqs = completedUnackedRequests.toArray();
}
for(int i=0;i<reqs.length;i++)
-
((ClientRequest)reqs[i]).sendPendingMessages(outputHandler, true);
+
((ClientRequest)reqs[i]).sendPendingMessages(outputHandler, true, false);
}
/**
@@ -123,7 +123,7 @@
reqs = runningPersistentRequests.toArray();
}
for(int i=0;i<reqs.length;i++)
-
((ClientRequest)reqs[i]).sendPendingMessages(outputHandler, true);
+
((ClientRequest)reqs[i]).sendPendingMessages(outputHandler, true, false);
}
public void register(ClientRequest cg) throws
IdentifierCollisionException {
Modified: trunk/freenet/src/freenet/node/fcp/FCPMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPMessage.java 2006-03-31 23:18:22 UTC
(rev 8419)
+++ trunk/freenet/src/freenet/node/fcp/FCPMessage.java 2006-04-01 13:57:27 UTC
(rev 8420)
@@ -52,6 +52,8 @@
return new ClientPutComplexDirMessage(fs, bfTemp,
bfPersistent);
if(name.equals(SubscribeUSKMessage.name))
return new SubscribeUSKMessage(fs);
+ if(name.equals(GetResultsMessage.name))
+ return new GetResultsMessage(fs);
if(name.equals("Void"))
return null;
throw new
MessageInvalidException(ProtocolErrorMessage.INVALID_MESSAGE, "Unknown message
name "+name, null);
Modified: trunk/freenet/src/freenet/node/fcp/FCPServer.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPServer.java 2006-03-31 23:18:22 UTC
(rev 8419)
+++ trunk/freenet/src/freenet/node/fcp/FCPServer.java 2006-04-01 13:57:27 UTC
(rev 8420)
@@ -382,9 +382,13 @@
}
if(killed) return;
}
+ storeNow = false;
}
- storeNow = false;
- storePersistentRequests();
+ try {
+ storePersistentRequests();
+ } catch (Throwable t) {
+ Logger.error(this, "Caught "+t, t);
+ }
}
}
@@ -403,6 +407,7 @@
public void storePersistentRequests() {
Logger.minor(this, "Storing persistent requests");
ClientRequest[] persistentRequests = getPersistentRequests();
+ Logger.minor(this, "Persistent requests count:
"+persistentRequests.length);
synchronized(persistenceSync) {
try {
FileOutputStream fos = new
FileOutputStream(persistentDownloadsTempFile);
@@ -424,6 +429,7 @@
Logger.error(this, "Cannot write persistent
requests to disk: "+e);
}
}
+ Logger.minor(this, "Stored persistent requests");
}
private void loadPersistentRequests() {
Added: trunk/freenet/src/freenet/node/fcp/GetResultsMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/GetResultsMessage.java 2006-03-31
23:18:22 UTC (rev 8419)
+++ trunk/freenet/src/freenet/node/fcp/GetResultsMessage.java 2006-04-01
13:57:27 UTC (rev 8420)
@@ -0,0 +1,41 @@
+package freenet.node.fcp;
+
+import freenet.node.Node;
+import freenet.support.SimpleFieldSet;
+
+public class GetResultsMessage extends FCPMessage {
+
+ final String identifier;
+ final static String name = "GetResults";
+
+ GetResultsMessage(String id) {
+ this.identifier = id;
+ }
+
+ public GetResultsMessage(SimpleFieldSet fs) {
+ this.identifier = fs.get("Identifier");
+ }
+
+ public SimpleFieldSet getFieldSet() {
+ SimpleFieldSet fs = new SimpleFieldSet(true);
+ fs.put("Identifier", identifier);
+ return fs;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void run(FCPConnectionHandler handler, Node node)
+ throws MessageInvalidException {
+ ClientRequest req = (ClientRequest)
+ handler.getClient().getRequest(identifier);
+ if(req == null) {
+ ProtocolErrorMessage msg = new
ProtocolErrorMessage(ProtocolErrorMessage.NO_SUCH_IDENTIFIER, false, null,
identifier);
+ handler.outputHandler.queue(msg);
+ } else {
+ req.sendPendingMessages(handler.outputHandler, true,
true);
+ }
+ }
+
+}
Modified: trunk/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
===================================================================
--- trunk/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
2006-03-31 23:18:22 UTC (rev 8419)
+++ trunk/freenet/src/freenet/support/io/PersistentTempBucketFactory.java
2006-04-01 13:57:27 UTC (rev 8420)
@@ -100,7 +100,7 @@
}
public Bucket makeEncryptedBucket() throws IOException {
- Bucket b = makeBucket(-1);
+ Bucket b = makeRawBucket(-1);
return new PaddedEphemerallyEncryptedBucket(b, 1024, rand,
false);
}