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