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



Reply via email to