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;


Reply via email to