Author: toad
Date: 2006-03-11 16:42:27 +0000 (Sat, 11 Mar 2006)
New Revision: 8227

Modified:
   trunk/freenet/src/freenet/node/Version.java
   trunk/freenet/src/freenet/node/fcp/ClientPutComplexDirMessage.java
   trunk/freenet/src/freenet/node/fcp/DirPutFile.java
   trunk/freenet/src/freenet/node/fcp/DirectDirPutFile.java
   trunk/freenet/src/freenet/node/fcp/DiskDirPutFile.java
   trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
   trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java
   trunk/freenet/src/freenet/support/SimpleFieldSet.java
Log:
525:
ClientPutComplexDir works, but some bugs to fix.

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-03-11 12:35:26 UTC (rev 
8226)
+++ trunk/freenet/src/freenet/node/Version.java 2006-03-11 16:42:27 UTC (rev 
8227)
@@ -20,7 +20,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 524;
+       private static final int buildNumber = 525;

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

Modified: trunk/freenet/src/freenet/node/fcp/ClientPutComplexDirMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPutComplexDirMessage.java  
2006-03-11 12:35:26 UTC (rev 8226)
+++ trunk/freenet/src/freenet/node/fcp/ClientPutComplexDirMessage.java  
2006-03-11 16:42:27 UTC (rev 8227)
@@ -7,8 +7,10 @@
 import java.util.Iterator;
 import java.util.LinkedList;

+import freenet.client.async.ManifestElement;
 import freenet.node.Node;
 import freenet.support.BucketFactory;
+import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;

 /**
@@ -23,12 +25,16 @@
  * Files.2.UploadFrom=disk
  * Files.2.Filename=something.pdf
  *  ( upload something.pdf, guess the mime type from the filename )
- * Files.AnythingNotIncludingADotInIt.Name=toad.jpeg
- * Files.AnythingNotIncludingADotInIt.UploadFrom=redirect
- * Files.AnythingNotIncludingADotInIt.TargetURI=CHK at ...,...,...
- * Files.AnythingNotIncludingADotInIt.Metadata.ContentType=image/jpeg
+ * Files.3.Name=toad.jpeg
+ * Files.3.UploadFrom=redirect
+ * Files.3.TargetURI=CHK at ...,...,...
+ * Files.3.Metadata.ContentType=image/jpeg
  *  ( not yet supported, but would be really useful! FIXME ! )
+ * (note that the Files.x must always be a decimal integer. We use these for 
sort 
+ *  order for UploadFrom=direct. they must be sequential and start at 1).
  * ...
+ * End
+ * <data from above direct uploads, ***in alphabetical order***>
  */
 public class ClientPutComplexDirMessage extends ClientPutDirMessage {

@@ -50,14 +56,17 @@
                SimpleFieldSet files = fs.subset("Files");
                if(files == null)
                        throw new 
MessageInvalidException(ProtocolErrorMessage.MISSING_FIELD, "Missing Files 
section", identifier);
-               Iterator i = files.directSubsetNameIterator();
-               while(i.hasNext()) {
-                       String name = (String) i.next();
+               for(int i=1;;i++) {
+                       String name = Integer.toString(i);
                        SimpleFieldSet subset = files.subset(name);
+                       if(subset == null) break;
                        DirPutFile f = DirPutFile.create(subset, identifier, 
(persistenceType == ClientRequest.PERSIST_FOREVER) ? bfPersistent : bfTemp);
                        addFile(f);
+                       Logger.minor(this, "Adding "+f);
                        if(f instanceof DirectDirPutFile) {
                                totalBytes += 
((DirectDirPutFile)f).bytesToRead();
+                               filesToRead.addLast(f);
+                               Logger.minor(this, "totalBytes now 
"+totalBytes);
                        }
                }
                attachedBytes = totalBytes;
@@ -121,8 +130,34 @@
        }

        public void run(FCPConnectionHandler handler, Node node) throws 
MessageInvalidException {
-               // TODO Auto-generated method stub
-               
+               // Convert the hierarchical hashmap's of DirPutFile's to 
hierarchical hashmap's
+               // of ManifestElement's.
+               // Then simply create the ClientPutDir.
+               HashMap manifestElements = new HashMap();
+               convertFilesByNameToManifestElements(filesByName, 
manifestElements);
+               handler.startClientPutDir(this, manifestElements);
        }

+       /**
+        * Convert a hierarchy of HashMap's containing DirPutFile's into a 
hierarchy of
+        * HashMap's containing ManifestElement's.
+        */
+       private void convertFilesByNameToManifestElements(HashMap filesByName, 
HashMap manifestElements) {
+               Iterator i = filesByName.keySet().iterator();
+               while(i.hasNext()) {
+                       String name = (String) (i.next());
+                       Object val = filesByName.get(name);
+                       if(val instanceof HashMap) {
+                               HashMap h = (HashMap) val;
+                               HashMap manifests = new HashMap();
+                               manifestElements.put(name, manifests);
+                               convertFilesByNameToManifestElements(h, 
manifests);
+                       } else {
+                               DirPutFile f = (DirPutFile) val;
+                               ManifestElement e = new ManifestElement(name, 
f.getData(), f.getMIMEType());
+                               manifestElements.put(name, e);
+                       }
+               }
+       }
+
 }

Modified: trunk/freenet/src/freenet/node/fcp/DirPutFile.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/DirPutFile.java  2006-03-11 12:35:26 UTC 
(rev 8226)
+++ trunk/freenet/src/freenet/node/fcp/DirPutFile.java  2006-03-11 16:42:27 UTC 
(rev 8227)
@@ -2,6 +2,7 @@

 import freenet.client.ClientMetadata;
 import freenet.client.DefaultMIMETypes;
+import freenet.support.Bucket;
 import freenet.support.BucketFactory;
 import freenet.support.SimpleFieldSet;

@@ -49,4 +50,10 @@
                return name;
        }

+       public String getMIMEType() {
+               return meta.getMIMEType();
+       }
+
+       public abstract Bucket getData();
+
 }

Modified: trunk/freenet/src/freenet/node/fcp/DirectDirPutFile.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/DirectDirPutFile.java    2006-03-11 
12:35:26 UTC (rev 8226)
+++ trunk/freenet/src/freenet/node/fcp/DirectDirPutFile.java    2006-03-11 
16:42:27 UTC (rev 8227)
@@ -46,4 +46,8 @@
                BucketTools.copyTo(data, os, length);
        }

+       public Bucket getData() {
+               return data;
+       }
+
 }

Modified: trunk/freenet/src/freenet/node/fcp/DiskDirPutFile.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/DiskDirPutFile.java      2006-03-11 
12:35:26 UTC (rev 8226)
+++ trunk/freenet/src/freenet/node/fcp/DiskDirPutFile.java      2006-03-11 
16:42:27 UTC (rev 8227)
@@ -3,7 +3,9 @@
 import java.io.File;

 import freenet.client.DefaultMIMETypes;
+import freenet.support.Bucket;
 import freenet.support.SimpleFieldSet;
+import freenet.support.io.FileBucket;

 public class DiskDirPutFile extends DirPutFile {

@@ -25,4 +27,8 @@
                return mime;
        }

+       public Bucket getData() {
+               return new FileBucket(file, true, false, false, false);
+       }
+
 }

Modified: trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java        
2006-03-11 12:35:26 UTC (rev 8226)
+++ trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java        
2006-03-11 16:42:27 UTC (rev 8227)
@@ -174,7 +174,7 @@
                }
        }

-       public void startClientPutDir(ClientPutDiskDirMessage message, HashMap 
buckets) {
+       public void startClientPutDir(ClientPutDirMessage message, HashMap 
buckets) {
                String id = message.identifier;
                ClientPutDir cp = null;
                boolean success;

Modified: trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java   
2006-03-11 12:35:26 UTC (rev 8226)
+++ trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java   
2006-03-11 16:42:27 UTC (rev 8227)
@@ -49,7 +49,7 @@
                                return;
                        }
                        if(messageType.equals("")) continue;
-                       fs = new SimpleFieldSet(lis, 4096, 128, false, false);
+                       fs = new SimpleFieldSet(lis, 4096, 128, true, false);
                        FCPMessage msg;
                        try {
                                msg = FCPMessage.create(messageType, fs, 
handler.bf, handler.server.node.persistentTempBucketFactory);

Modified: trunk/freenet/src/freenet/support/SimpleFieldSet.java
===================================================================
--- trunk/freenet/src/freenet/support/SimpleFieldSet.java       2006-03-11 
12:35:26 UTC (rev 8226)
+++ trunk/freenet/src/freenet/support/SimpleFieldSet.java       2006-03-11 
16:42:27 UTC (rev 8227)
@@ -10,6 +10,7 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
+import java.util.Vector;

 import freenet.support.io.LineReader;

@@ -392,4 +393,12 @@
                }
        }

+       public String[] namesOfDirectSubsets() {
+               Iterator i = new DirectSubsetNameIterator();
+               Vector v = new Vector();
+               while(i.hasNext()) v.add(i.next());
+               return (String[]) v.toArray(new String[v.size()]);
+       }
+       
+
 }


Reply via email to