Author: toad
Date: 2006-01-25 23:39:26 +0000 (Wed, 25 Jan 2006)
New Revision: 7929
Modified:
branches/async-client/src/freenet/client/HighLevelSimpleClientImpl.java
branches/async-client/src/freenet/client/async/SimpleManifestPutter.java
Log:
Manifest inserts working.
Modified:
branches/async-client/src/freenet/client/HighLevelSimpleClientImpl.java
===================================================================
--- branches/async-client/src/freenet/client/HighLevelSimpleClientImpl.java
2006-01-25 22:07:20 UTC (rev 7928)
+++ branches/async-client/src/freenet/client/HighLevelSimpleClientImpl.java
2006-01-25 23:39:26 UTC (rev 7929)
@@ -5,6 +5,7 @@
import freenet.client.async.ClientGetter;
import freenet.client.async.ClientPutter;
+import freenet.client.async.SimpleManifestPutter;
import freenet.client.events.ClientEventListener;
import freenet.client.events.ClientEventProducer;
import freenet.client.events.EventLogger;
@@ -126,7 +127,10 @@
}
public FreenetURI insertManifest(FreenetURI insertURI, HashMap
bucketsByName, String defaultName) throws InserterException {
- throw new UnsupportedOperationException();
+ PutWaiter pw = new PutWaiter();
+ SimpleManifestPutter putter =
+ new SimpleManifestPutter(pw, node.putScheduler,
bucketsByName, priorityClass, insertURI, defaultName, getInserterContext(),
false);
+ return pw.waitForCompletion();
}
public void addGlobalHook(ClientEventListener listener) {
Modified:
branches/async-client/src/freenet/client/async/SimpleManifestPutter.java
===================================================================
--- branches/async-client/src/freenet/client/async/SimpleManifestPutter.java
2006-01-25 22:07:20 UTC (rev 7928)
+++ branches/async-client/src/freenet/client/async/SimpleManifestPutter.java
2006-01-25 23:39:26 UTC (rev 7929)
@@ -115,11 +115,15 @@
private boolean insertedAllFiles;
private boolean insertedManifest;
private ClientPutState currentMetadataInserterState;
+ private final String defaultName;
+ private final static String[] defaultDefaultNames =
+ new String[] { "index.html", "index.htm", "default.html",
"default.htm" };
public SimpleManifestPutter(ClientCallback cb, ClientRequestScheduler
sched,
HashMap bucketsByName, short prioClass, FreenetURI
target,
String defaultName, InserterContext ctx, boolean
getCHKOnly) throws InserterException {
super(prioClass, sched);
+ this.defaultName = defaultName;
this.targetURI = target;
this.cb = cb;
this.ctx = ctx;
@@ -148,7 +152,7 @@
runningPutHandlers.add(ph);
putHandlersWaitingForMetadata.add(ph);
}
- it = bucketsByName.keySet().iterator();
+ it = putHandlersByName.values().iterator();
while(it.hasNext()) {
PutHandler ph = (PutHandler) it.next();
try {
@@ -178,6 +182,23 @@
byte[] meta = ph.metadata;
namesToByteArrays.put(name, meta);
}
+ if(defaultName != null) {
+ byte[] meta = (byte[])
namesToByteArrays.get(defaultName);
+ if(meta == null) {
+ fail(new
InserterException(InserterException.INVALID_URI, "Default name "+defaultName+"
does not exist", null));
+ return;
+ }
+ namesToByteArrays.put("", meta);
+ } else {
+ for(int j=0;j<defaultDefaultNames.length;j++) {
+ String name = defaultDefaultNames[j];
+ byte[] meta = (byte[])
namesToByteArrays.get(name);
+ if(meta != null) {
+ namesToByteArrays.put("", meta);
+ break;
+ }
+ }
+ }
Metadata meta =
Metadata.mkRedirectionManifestWithMetadata(namesToByteArrays);
Bucket bucket;