Update of /cvsroot/freenet/freenet/src/freenet/client
In directory sc8-pr-cvs1:/tmp/cvs-serv25857/src/freenet/client

Modified Files:
      Tag: stable
        AutoBackoffNodeRequester.java AutoRequester.java 
        ClientCore.java ClientEventListener.java 
        ClientMessageHandler.java ClientSVK.java 
        ControlRequestProcess.java FCPClient.java FNPClient.java 
        FreenetURI.java GetRequestProcess.java InternalClient.java 
        PutRequestProcess.java RequestManager.java 
Log Message:
5029: Merge from unstable after months of work. MASSIVE changes.
Highlights:
* Next Generation Routing, massive related changes
* Major changes to handling of messages and connections (PeerHandler and related 
changes)
* Even more non-blocking I/O
* Documentation improvements
* Lots of new diagnostics and config options
* Lots of bug fixes and performance tweaking
* Probably lots of new bugs too!


Index: AutoBackoffNodeRequester.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/client/AutoBackoffNodeRequester.java,v
retrieving revision 1.3.2.3.2.4
retrieving revision 1.3.2.3.2.5
diff -u -w -r1.3.2.3.2.4 -r1.3.2.3.2.5
--- AutoBackoffNodeRequester.java       12 Jul 2003 01:50:22 -0000      1.3.2.3.2.4
+++ AutoBackoffNodeRequester.java       28 Oct 2003 20:20:23 -0000      1.3.2.3.2.5
@@ -49,7 +49,7 @@
        this.hopsToLive = hopsToLive;
        this.uri = uri;
        this.inserting = inserting;
-       logDEBUG = Core.logger.shouldLog(Logger.DEBUG);
+       logDEBUG = Core.logger.shouldLog(Logger.DEBUG,this);
        Core.logger.log(this, "Starting internal request: "+uri,
                        Core.logger.MINOR);
     }

Index: AutoRequester.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/client/AutoRequester.java,v
retrieving revision 1.6.4.11.2.12
retrieving revision 1.6.4.11.2.13
diff -u -w -r1.6.4.11.2.12 -r1.6.4.11.2.13
--- AutoRequester.java  23 Jul 2003 01:56:50 -0000      1.6.4.11.2.12
+++ AutoRequester.java  28 Oct 2003 20:20:24 -0000      1.6.4.11.2.13
@@ -182,7 +182,7 @@
             // Not all RequestProcess implementations abort
             // immediately.  Hunt down and clean up the 
             // important ones.
-           boolean logDEBUG = Core.logger.shouldLog(Logger.DEBUG);
+           boolean logDEBUG = Core.logger.shouldLog(Logger.DEBUG,this);
            if(logDEBUG) Core.logger.log(this, "Cancelling current request process",
                                         Logger.DEBUG);
             currentRequestProcess.abort();
@@ -607,7 +607,7 @@
                 return false;
             }
             currentRequestProcess = rp;
-           if(Core.logger.shouldLog(Logger.DEBUG))
+           if(Core.logger.shouldLog(Logger.DEBUG,this))
                Core.logger.log(this, "Starting process: "+rp+" for "+this,
                                Logger.DEBUG);
             currentClient = null;
@@ -641,7 +641,7 @@
        
        finished = false;
        
-       boolean logDEBUG = Core.logger.shouldLog(Logger.DEBUG);
+       boolean logDEBUG = Core.logger.shouldLog(Logger.DEBUG,this);
        
        if(logDEBUG) Core.logger.log(this, "executeProcess() on "+this+" at "+
                                     System.currentTimeMillis(), Logger.DEBUG);
@@ -697,7 +697,7 @@
     }
     
     private boolean endValue(RequestProcess rp) {
-       boolean logDEBUG = Core.logger.shouldLog(Logger.DEBUG);
+       boolean logDEBUG = Core.logger.shouldLog(Logger.DEBUG,this);
        if(logDEBUG) Core.logger.log(this, "endValue("+rp+") on "+this,
                                     Logger.DEBUG);
        if(rp == null) 
@@ -725,7 +725,7 @@
        //          hack only works if none of the
        //          requests spawn threads.
        // Hmmm... I think I put this hack in.
-       boolean logDEBUG = Core.logger.shouldLog(Logger.DEBUG);
+       boolean logDEBUG = Core.logger.shouldLog(Logger.DEBUG,this);
        if(logDEBUG) Core.logger.log(this, "handleNextRequest() on "+
                                     this, Logger.DEBUG);
        removeListeners(prevRequest);
@@ -765,7 +765,7 @@
     volatile boolean finished = false;
     
     private void doFinish(boolean success) {
-       if(Core.logger.shouldLog(Logger.DEBUG))
+       if(Core.logger.shouldLog(Logger.DEBUG,this))
            Core.logger.log(this, "doFinish("+success+") for "+
                            this, Logger.DEBUG);
        requestSucceeded = success;
@@ -776,7 +776,7 @@
     }
     
     private void cleanFinish() {
-       if(Core.logger.shouldLog(Logger.DEBUG)) 
+       if(Core.logger.shouldLog(Logger.DEBUG,this)) 
            Core.logger.log(this, "Cleanly Finished Request "+this,
                            Logger.DEBUG);
        
@@ -796,7 +796,7 @@
        removeListeners(curRequest);
        error = "Request failed due to error: " + t;
        origThrowable = t;
-       if(Core.logger.shouldLog(Logger.DEBUG))
+       if(Core.logger.shouldLog(Logger.DEBUG,this))
            Core.logger.log(this, "RequestProcess: "+currentRequestProcess+
                            " failed with error: "+t+" for "+this, t, 
                            Logger.DEBUG);
@@ -804,7 +804,7 @@
     }
     
     private void onReachedState(StateReachedEvent sr) {
-       if(Core.logger.shouldLog(Logger.DEBUG))
+       if(Core.logger.shouldLog(Logger.DEBUG,this))
            Core.logger.log(this, "Got StateReachedEvent: "+sr.getDescription()+" for 
"+
                            this, Logger.DEBUG);
        if(currentRequestProcess == null) {
@@ -847,7 +847,7 @@
     
     private class AutoListener extends DoneListener {
        public void receive(ClientEvent ce) {
-           if(Core.logger.shouldLog(Logger.DEBUG)) {
+           if(Core.logger.shouldLog(Logger.DEBUG,this)) {
                Core.logger.log(this, "Received event: "+ce.getDescription()+
                                " for "+toString(), new Exception("debug"),
                                Logger.DEBUG);

Index: ClientCore.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/client/ClientCore.java,v
retrieving revision 1.4
retrieving revision 1.4.4.1
diff -u -w -r1.4 -r1.4.4.1
--- ClientCore.java     28 Oct 2002 00:42:56 -0000      1.4
+++ ClientCore.java     28 Oct 2003 20:20:24 -0000      1.4.4.1
@@ -45,7 +45,7 @@
         throws ListenException {
 
         DSAAuthentity auth = new DSAAuthentity(Global.DSAgroupC, 
-                                               Core.randSource);
+                                               Core.getRandSource());
         return newInstance(auth, myAddress, lm, p);
     }
 

Index: ClientEventListener.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/client/ClientEventListener.java,v
retrieving revision 1.1.1.1
retrieving revision 1.1.1.1.6.1
diff -u -w -r1.1.1.1 -r1.1.1.1.6.1
--- ClientEventListener.java    13 Jan 2002 05:24:04 -0000      1.1.1.1
+++ ClientEventListener.java    28 Oct 2003 20:20:24 -0000      1.1.1.1.6.1
@@ -1,7 +1,7 @@
 package freenet.client;
 
 /**
- * Event handeling for clients.
+ * Event handling for clients.
  *
  * @author oskar
  **/
@@ -10,7 +10,7 @@
 public interface ClientEventListener {
 
     /**
-     * Hears and event.
+     * Hears an event.
      **/
     public void receive(ClientEvent ce);
 

Index: ClientMessageHandler.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/client/ClientMessageHandler.java,v
retrieving revision 1.2.4.1.2.1
retrieving revision 1.2.4.1.2.2
diff -u -w -r1.2.4.1.2.1 -r1.2.4.1.2.2
--- ClientMessageHandler.java   4 Jul 2003 02:45:05 -0000       1.2.4.1.2.1
+++ ClientMessageHandler.java   28 Oct 2003 20:20:24 -0000      1.2.4.1.2.2
@@ -56,8 +56,12 @@
      * Message it is put in a queue and can be checked out with getNextReply.
      * Non Message MessageObjects are ignored.
      * @param mo   The MessageObject to handle.
+     * @param onlyIfCanRunFast Must be true.
+     * @returns true.
+     * @see MessageHandler
      **/
-    public void handle(MessageObject mo) {
+    public boolean handle(MessageObject mo, boolean onlyIfCanRunFast) {
+       if(onlyIfCanRunFast) return false;
         if (mo instanceof ClientMessageObject) {
            MessageQueue mq = getQueue(mo.id());
            synchronized(mq) {
@@ -67,6 +71,7 @@
        } else {
            Core.logger.log(this,"Got a MessageObject that I can't handle: " + 
mo,Logger.NORMAL);
        }
+       return true;
     }
 
     /**

Index: ClientSVK.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/client/ClientSVK.java,v
retrieving revision 1.1.1.1.4.2.2.2
retrieving revision 1.1.1.1.4.2.2.3
diff -u -w -r1.1.1.1.4.2.2.2 -r1.1.1.1.4.2.2.3
--- ClientSVK.java      3 Jul 2003 01:37:22 -0000       1.1.1.1.4.2.2.2
+++ ClientSVK.java      28 Oct 2003 20:20:24 -0000      1.1.1.1.4.2.2.3
@@ -43,8 +43,8 @@
     protected SVK svk;
     protected byte[] cryptoKey;
     protected String docName;
-    protected DSAPrivateKey sk;
-    protected DSAPublicKey pk;
+    protected DSAPrivateKey sk; //Should always be set to the private key for the 
public key below 
+    protected DSAPublicKey pk;  //Should always be set to the public key for the 
private key above
 
     public ClientSVK(byte[] val, byte[] cryptoKey, String docName) 
        throws KeyException {
@@ -137,7 +137,7 @@
             storables.setDocumentName(Util.hashString(SHA1.getInstance(), 
                                                      getDocumentName()));
         }
-        storables.sign(r, sk, pk.getGroup());
+        storables.sign(r, sk, pk);
         svk = new SVK(storables, SVK.SVK_LOG2_MAXSIZE);
         return ret;
     }

Index: ControlRequestProcess.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/client/ControlRequestProcess.java,v
retrieving revision 1.3.4.3.2.2
retrieving revision 1.3.4.3.2.3
diff -u -w -r1.3.4.3.2.2 -r1.3.4.3.2.3
--- ControlRequestProcess.java  1 Jul 2003 02:27:11 -0000       1.3.4.3.2.2
+++ ControlRequestProcess.java  28 Oct 2003 20:20:24 -0000      1.3.4.3.2.3
@@ -149,6 +149,6 @@
     }
     
     public String toString() {
-       return getClass().getName() + ":"+uri+"@"+htl+","+nextLevel;
+       return super.toString() + ":"+uri+"@"+htl+","+nextLevel;
     }
 }

Index: FCPClient.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/client/FCPClient.java,v
retrieving revision 1.7.4.3.2.4
retrieving revision 1.7.4.3.2.5
diff -u -w -r1.7.4.3.2.4 -r1.7.4.3.2.5
--- FCPClient.java      22 Apr 2003 20:07:28 -0000      1.7.4.3.2.4
+++ FCPClient.java      28 Oct 2003 20:20:24 -0000      1.7.4.3.2.5
@@ -389,7 +389,7 @@
                 RawMessage m = getResponse();
                 if (m.messageType.equals("Restarted")) {
                     long time = (m.fs.get("Timeout") == null
-                                 ? -1 : Fields.stringToLong(m.fs.get("Timeout")));
+                                 ? -1 : Fields.hexToLong(m.fs.get("Timeout")));
                     return false;
                 }
                 else if (!m.messageType.equals("DataChunk")) {
@@ -403,7 +403,7 @@
                 // got DataChunk
                 long size;
                 try {
-                    size = Fields.stringToLong(m.fs.get("Length"));
+                    size = Fields.hexToLong(m.fs.get("Length"));
                 }
                 catch (Exception e) {
                     throw new TerminalMessageException(
@@ -827,7 +827,7 @@
                 }
                 else if (m.messageType.equals("Restarted")) {
                     long time = (m.fs.get("Timeout") == null
-                                 ? -1 : Fields.stringToLong(m.fs.get("Timeout")));
+                                 ? -1 : Fields.hexToLong(m.fs.get("Timeout")));
                     req.produceEvent(new RestartedEvent(time));
                 }
                 else if (m.messageType.equals("DataNotFound")) {
@@ -876,14 +876,14 @@
             
             long dlen, mlen;
             try {
-                dlen = Fields.stringToLong(fs.get("DataLength"));
+                dlen = Fields.hexToLong(fs.get("DataLength"));
             }
             catch (Exception e) {
                 throw new TerminalMessageException("bad DataLength field in 
DataFound");
             }
             try {
                 if (fs.get("MetadataLength") != null)
-                    mlen = Fields.stringToLong(fs.get("MetadataLength"));
+                    mlen = Fields.hexToLong(fs.get("MetadataLength"));
                 else
                     mlen = 0;
             }
@@ -916,7 +916,7 @@
                 RawMessage m = getResponse();
                 if (m.messageType.equals("Restarted")) {
                     long time = (m.fs.get("Timeout") == null
-                                 ? -1 : Fields.stringToLong(m.fs.get("Timeout")));
+                                 ? -1 : Fields.hexToLong(m.fs.get("Timeout")));
                     req.produceEvent(new RestartedEvent(time));
                     return false;
                 }
@@ -931,7 +931,7 @@
                 // got DataChunk
                 long size;
                 try {
-                    size = Fields.stringToLong(m.fs.get("Length"));
+                    size = Fields.hexToLong(m.fs.get("Length"));
                 }
                 catch (Exception e) {
                     throw new TerminalMessageException(
@@ -1322,10 +1322,10 @@
                 int i;
                 for (i = 0; i < req.headers.length; i++) {
                     // Write header
-                    RawMessage m = req.headers[i].toRawMessage(protocol);
+                    RawMessage m = req.headers[i].toRawMessage(protocol,null);
                     m.writeMessage(dataOut);
                     // Write map
-                    m = req.maps[i].toRawMessage(protocol);
+                    m = req.maps[i].toRawMessage(protocol,null);
                     m.writeMessage(dataOut);
                 }
                 dataOut.close();
@@ -1482,7 +1482,7 @@
     }
 
     private final static void dumpHeader(SegmentHeader header, Bucket bucket) throws 
IOException {
-        RawMessage m = header.toRawMessage(protocol);
+        RawMessage m = header.toRawMessage(protocol,null);
         OutputStream o = null;
         try {
             o = bucket.getOutputStream();

Index: FNPClient.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/client/FNPClient.java,v
retrieving revision 1.3.4.1.2.3
retrieving revision 1.3.4.1.2.4
diff -u -w -r1.3.4.1.2.3 -r1.3.4.1.2.4
--- FNPClient.java      1 Jul 2003 02:27:11 -0000       1.3.4.1.2.3
+++ FNPClient.java      28 Oct 2003 20:20:24 -0000      1.3.4.1.2.4
@@ -51,7 +51,7 @@
     protected FNPClient(ClientCore core, BucketFactory ctBuckets) {
         this.core = core;
         this.ctBuckets = ctBuckets;
-        vc = new VirtualClient(null, core.randSource, ctBuckets);
+        vc = new VirtualClient(null, core.getRandSource(), ctBuckets);
     }
 
     protected FNPClient(ClientCore core) {
@@ -102,7 +102,7 @@
 
         BInstance(Request req) throws KeyException {
             this.req = req;
-            id = core.randSource.nextLong();
+            id = core.getRandSource().nextLong();
         }
 
         public final void start() {
@@ -143,8 +143,11 @@
             else return false;
         }
         
-        OutputStream sendMessage(Message m) throws CommunicationException {
-            OutputStream out = core.makeConnection(target).sendMessage(m);
+        OutputStream sendMessage(Message m, long timeout)
+           throws CommunicationException {
+           TrailerWriter tw = 
+               core.sendMessage(m, target, timeout);
+            OutputStream out = new TrailerWriterOutputStream(tw);
             req.produceEvent(new SendEvent(target,m,""));
             return out;
         }
@@ -219,7 +222,7 @@
             DataRequest dr = new DataRequest(id, req.htl, key,
                                              core.getNodeReference());
 
-            sendMessage(dr);
+            sendMessage(dr, Core.hopTime(1));
 
             getResponse();
         }
@@ -368,7 +371,7 @@
 
             super(req);
             this.req = req;
-            ckey = AbstractClientKey.createFromInsertURI(core.randSource,
+            ckey = AbstractClientKey.createFromInsertURI(core.getRandSource(),
                                                          req.uri);
             try {
                 ckey.setCipher(req.cipherName);
@@ -414,7 +417,7 @@
             
             InsertRequest ir = new InsertRequest(id, req.htl, key, 
                                                  core.getNodeReference());
-            sendMessage(ir);
+            sendMessage(ir, Core.hopTime(1));
 
             long waitTime = Core.hopTime(1);
             boolean accepted = false, sentData = false;
@@ -450,7 +453,7 @@
                     DataInsert di = 
                         new DataInsert(id, root,  
                                        ckey.getTotalLength());
-                    OutputStream out = sendMessage(di);
+                    OutputStream out = sendMessage(di, waitTime);
                     req.produceEvent(new TransferStartedEvent(di.length()));
                     try {
                         writeData(out, ckey.getTotalLength());

Index: FreenetURI.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/client/FreenetURI.java,v
retrieving revision 1.1.1.1.4.1
retrieving revision 1.1.1.1.4.1.2.1
diff -u -w -r1.1.1.1.4.1 -r1.1.1.1.4.1.2.1
--- FreenetURI.java     14 Dec 2002 17:52:52 -0000      1.1.1.1.4.1
+++ FreenetURI.java     28 Oct 2003 20:20:24 -0000      1.1.1.1.4.1.2.1
@@ -224,11 +224,16 @@
      * Returns a copy of this URI with the those meta strings appended.
      */
     public FreenetURI addMetaStrings(String[] strs) {
+       if(strs == null) return this; // legal noop, since getMetaStrings can return 
null
         String[] newMetaStr;
         if (metaStr == null)
             return setMetaString(strs);
         else {
-            newMetaStr = new String[metaStr.length + strs.length];
+           // metaStr could be null... couldn't it? I don't really know this file..
+           // - amphibian
+           int curLen = (metaStr == null) ? 0 : metaStr.length;
+            newMetaStr = new String[curLen + strs.length];
+           if(metaStr != null)
             System.arraycopy(metaStr, 0, newMetaStr, 0, metaStr.length);
             System.arraycopy(strs, 0, newMetaStr, metaStr.length, 
                              strs.length);

Index: GetRequestProcess.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/client/GetRequestProcess.java,v
retrieving revision 1.7.4.7.2.7
retrieving revision 1.7.4.7.2.8
diff -u -w -r1.7.4.7.2.7 -r1.7.4.7.2.8
--- GetRequestProcess.java      2 Aug 2003 02:36:18 -0000       1.7.4.7.2.7
+++ GetRequestProcess.java      28 Oct 2003 20:20:25 -0000      1.7.4.7.2.8
@@ -61,7 +61,7 @@
     }
     
     public synchronized Request getNextRequest(boolean followContainer) {
-       boolean logDEBUG = Core.logger.shouldLog(Logger.DEBUG);
+       boolean logDEBUG = Core.logger.shouldLog(Logger.DEBUG,this);
        if(logDEBUG) 
            Core.logger.log(this, "In getNextRequest() for "+this, Logger.DEBUG);
         if (aborted || failed) {
@@ -133,11 +133,13 @@
                        String mimeType=metadata.getMimeType(null);
                        if(mimeType != null && followContainer) {
                            if(mimeType.equalsIgnoreCase("application/x-java-archive") 
|| mimeType.equalsIgnoreCase("application/zip")) {
+//                             System.err.println("Handling ZIP");
                                if(handleZip()) return null;
                            }
                        }
                        
                        
+                       
                         // Extract the checksum CHK from the info part.
                         // If more than one value is specified, we
                         // favor the one that is closest to the end
@@ -152,6 +154,7 @@
                         }
                         //System.err.println("LALA GOT MD: " + metadata);
                         if (follow) {
+//                         System.err.println("Following...");
                             //System.err.println("GRP L: " +
                             //                   recursionLevel + 
                             //                   " uri: " + uri);
@@ -160,6 +163,7 @@
                                                  null : 
                                                  metadata.getDocument(mds));
                             FreenetURI nuri;
+//                         System.err.println("d = "+d+", mds = "+mds);
                             if (d != null) {
                                 nuri = uri.popMetaString();
                             } else {
@@ -170,8 +174,9 @@
                             //                   recursionLevel + 
                             //                   " d: " + d + 
                             //                   " mds: " + mds);
-                            
+//                             System.err.println("d now = "+d);
                             if (d != null) {
+//                             System.err.println("Redirecting");
                                r.produceEvent(new 
RedirectFollowedEvent(d.getControlPart()));
                                 next = d.getGetProcess(nuri, htl, data, 
                                                        ptBuckets, 
@@ -183,6 +188,7 @@
                                 // there was a metastring left, and
                                 // there are no more control documents
                                 // to apply it to.
+//                             System.err.println("Key not found in manifest");
                                error = "Key not found in manifest";
                                origThrowable = new 
                                    KeyNotInManifestException();
@@ -190,6 +196,7 @@
                                 return null;
                             }
                         }
+//                     System.err.println("Finishing");
                     } catch (IOException e) {
                         return null;
                     } catch (InvalidPartException e) {
@@ -238,7 +245,9 @@
                     return null;
                 }
             }
+//         System.err.println("Still finishing");
             if (next != null) {
+//             System.err.println("Almost finished");
                 Request rr = next.getNextRequest();
                 failed = next.failed();
                if(failed) {
@@ -266,11 +275,14 @@
        // FIXME: this is slow
        // FIXME: the other version CRASHES THE JVM (1.4.1_04, 1.4.2)
        String containerFile=uri.getMetaString();
+       boolean notFound = false;
        // follow the jar
        // Check if we need to de-container this file
        // FIXME: cache jar's
+//     System.err.println("Handling zip("+containerFile+")");
        if(containerFile != null) {
            if(data.size()>1024*1024) {
+//             System.err.println("Too big");
                error = "This container is too large for me to process.";
                origThrowable = new 
                    KeyNotInManifestException();
@@ -297,12 +309,12 @@
                try {
                    ent=myJis.getNextJarEntry();
                    if(ent==null) {
+//                     System.err.println("No more entries");
                        if(!done) {
                            // No file of this name
-                           origThrowable = new 
-                               KeyNotInManifestException();
-                           failed = true;
-                           return true;
+//                         System.err.println("No key of this name");
+                           notFound = true;
+                           break;
                        } else {
                            // no metadata
                            metadone=true;
@@ -337,30 +349,43 @@
                        } while(!metadone);
                    }
                } catch (ZipException e) {
-                   error = "Key not found in JAR Container";
-                   origThrowable = new 
-                       KeyNotInManifestException();
-                   failed = true;
-                   return true;
+                   notFound = true;
+                   break;
                }
            } while(!done || !metadone);
            metadata = 
                new Metadata(metadataBucket.getInputStream(),
                             msettings);
-           data.resetWrite();
-           BucketTools.copy(newData, data);
+//         System.err.println("After handling zip, metadata=\n"+metadata);
+           if(notFound && (metadata.getDocument(containerFile) == null)) {
+               error = "Key not found in JAR Container";
+               origThrowable = new 
+                   KeyNotInManifestException();
+               failed = true;
+               return true;
+           } // otherwise it's just metadata which can be handled...
+           
+           
            if(metafound) {
+//             System.err.println("Found metadata");
                // check that this document exists in the metadata
                // and ignore the metadata if it doens't, to prevent
                // big scary monsters eating you and, more importantly,
                // throwing a key not in metadata exception
                //
                // 
+//             System.err.println("metadata currently:\n"+metadata);
                DocumentCommand dc=metadata.getDocument(containerFile);
+               if(dc != null) {
+//                 System.err.println("dc: "+dc);
                metadata=new Metadata(msettings);
                dc.setName("");
                metadata.addDocument(dc);
+//                 System.err.println("metadata:\n"+metadata);
+               }
            }
+           data.resetWrite();
+           BucketTools.copy(newData, data);
            uri=uri.popMetaString();
        }
        return false;

Index: InternalClient.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/client/InternalClient.java,v
retrieving revision 1.10.4.5.2.8
retrieving revision 1.10.4.5.2.9
diff -u -w -r1.10.4.5.2.8 -r1.10.4.5.2.9
--- InternalClient.java 15 Aug 2003 03:05:45 -0000      1.10.4.5.2.8
+++ InternalClient.java 28 Oct 2003 20:20:25 -0000      1.10.4.5.2.9
@@ -30,7 +30,7 @@
        if(node == null) 
            throw new IllegalArgumentException("null node pointer to "+
                                               "InternalClient");
-        vc = new VirtualClient(node, node.randSource, node.bf);
+        vc = new VirtualClient(node, node.getRandSource(), node.bf);
     }
     
     public boolean isOverloaded() {
@@ -45,13 +45,13 @@
                                                 IOException, KeyException {
         if (req instanceof GetRequest) {
             return new ClientMessageVector(
-                new NewInternalGet(node.randSource.nextLong(),
+                new NewInternalGet(node.getRandSource().nextLong(),
                                    new InternalGetToken((GetRequest) req))
             );
         }
         else if (req instanceof PutRequest) {
             return new ClientMessageVector(
-                new NewInternalPut(node.randSource.nextLong(),
+                new NewInternalPut(node.getRandSource().nextLong(),
                                    new InternalPutToken((PutRequest) req))
             );
         }
@@ -180,6 +180,9 @@
         //
         // Send an event to the listeners.
         final void unlockedProduceEvent(ClientEvent evt) {
+           if(Core.logger.shouldLog(Logger.DEBUG, this))
+               Core.logger.log(this, "Producing event: "+evt+" ("+this+")",
+                               Logger.DEBUG);
             if (evt == null) {
                 return;
             }
@@ -215,7 +218,8 @@
         
         public void queryRejected(Node n, int htl, String reason,
                                   FieldSet fs, int unreachable,
-                                  int restarted, int rejected)
+                                  int restarted, int rejected,
+                                 MessageSendCallback cb)
             throws SendFailedException {
             ClientEvent evt = null;
             synchronized (InternalFeedbackToken.this) {
@@ -228,7 +232,9 @@
             unlockedProduceEvent(evt);
         }
 
-        public synchronized void restarted(Node n, long millis) throws 
SendFailedException {
+        public synchronized void restarted(Node n, long millis,
+                                          MessageSendCallback cb) 
+           throws SendFailedException {
             synchronized (InternalFeedbackToken.this) {
                 checkAlive();
             }
@@ -238,7 +244,7 @@
                        if(dcos.chunkPos > skipBytes) {
                            skipBytes = dcos.chunkPos;
                            if(skipBytes != 0)
-                               if(Core.logger.shouldLog(Logger.DEBUG))
+                               if(Core.logger.shouldLog(Logger.DEBUG,this))
                                Core.logger.log(this, "Restarting InternalClient 
request for "+clientKey+", next pass will skip first "+skipBytes, Core.logger.MINOR);
                                else
                                Core.logger.log(this, "Restarting InternalClient 
request for a clientKey, next pass will skip first "+skipBytes, Core.logger.MINOR);
@@ -326,7 +332,7 @@
             }
         }
 
-        public synchronized OutputStream dataFound(Node n, Storables storables,
+        public synchronized TrailerWriter dataFound(Node n, Storables storables,
                                                    long transLength)
             throws SendFailedException {
             Document doc;
@@ -385,7 +391,7 @@
             unlockedProduceEvent(transferEvt);
             unlockedProduceEvent(exceptionEvt);
             unlockedProduceEvent(failedEvt);
-            return ret;
+            return new OutputStreamTrailerWriter(ret);
         }
     }
     
@@ -430,8 +436,10 @@
             unlockedProduceEvent(evt);
         }
         
-        public synchronized OutputStream dataFound(Node n, Storables storables,
+        public synchronized TrailerWriter dataFound(Node n, Storables storables,
                                                    long ctLength) throws 
SendFailedException {
+           if(Core.logger.shouldLog(Logger.DEBUG, this))
+               Core.logger.log(this, "dataFound() on "+this, Logger.DEBUG);
             ClientEvent uriEvt = null;
             ClientEvent collisionEvt = null;
             ClientEvent terminalEvt = null;
@@ -511,7 +519,7 @@
                 throw new BadStateException("Not a ClientMessageVector: "+mo);
             }
            
-           if(Core.logger.shouldLog(Logger.DEBUG))
+           if(Core.logger.shouldLog(Logger.DEBUG,this))
                Core.logger.log(this, "Received: "+mo+" for "+this, 
                                Logger.DEBUG);
            
@@ -548,7 +556,7 @@
             this.ft = ft;
             
             // set up ClientKey
-            ft.clientKey = AbstractClientKey.createFromInsertURI(node.randSource, 
ft.req.uri);
+            ft.clientKey = 
AbstractClientKey.createFromInsertURI(node.getRandSource(), ft.req.uri);
             try {
                 ft.clientKey.setCipher(ft.req.cipherName);
             }

Index: PutRequestProcess.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/client/PutRequestProcess.java,v
retrieving revision 1.3.4.5.2.5
retrieving revision 1.3.4.5.2.6
diff -u -w -r1.3.4.5.2.5 -r1.3.4.5.2.6
--- PutRequestProcess.java      17 May 2003 19:31:10 -0000      1.3.4.5.2.5
+++ PutRequestProcess.java      28 Oct 2003 20:20:25 -0000      1.3.4.5.2.6
@@ -41,7 +41,8 @@
               ms);
        if(ms == null) throw new NullPointerException("ms NULL!");
         this.metadata = metadata;
-        //        System.err.println("LALA a: " + this.metadata);
+//         System.err.println("Creating PutRequestProcess (a): " +
+//                        this.metadata+" ("+this+"): "+descend);
         this.cipherName = cipherName;
         nextLevel = true; // puts start at the next level.
         this.skipDS = skipDS;
@@ -51,7 +52,9 @@
         if (aborted || failed)
             return null;
         if (nextLevel) {
-            if (next == null && metadata != null) {
+            if (next == null && metadata != null && follow) {
+//             System.err.println("Getting document, uri. uri="+uri+
+//                                ", metadata="+metadata);
                 DocumentCommand d = 
                     (uri.getMetaString() == null ? 
                      null : 
@@ -67,6 +70,7 @@
                     next = d.getPutProcess(nuri, htl, cipherName, data, 
                                            ptBuckets, recursionLevel, 
                                            follow);
+//             System.err.println("next = "+next+", d = "+d+", nuri = "+nuri);
             }
             //System.err.println(recursionLevel +  " LALA " + next);
 
@@ -177,7 +181,7 @@
             return null;
         } else {
             //System.err.println("WAITING:  " + recursionLevel);
-           if(Core.logger.shouldLog(Logger.DEBUG)) {
+           if(Core.logger.shouldLog(Logger.DEBUG,this)) {
                Core.logger.log(this, "Waiting for "+this, Logger.DEBUG);
            }
            bufferEvents = true;

Index: RequestManager.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/client/RequestManager.java,v
retrieving revision 1.7.2.6.2.6
retrieving revision 1.7.2.6.2.7
diff -u -w -r1.7.2.6.2.6 -r1.7.2.6.2.7
--- RequestManager.java 4 Jul 2003 02:45:05 -0000       1.7.2.6.2.6
+++ RequestManager.java 28 Oct 2003 20:20:25 -0000      1.7.2.6.2.7
@@ -243,7 +243,7 @@
     // or you may hit nasty deadlock bugs in 
     // internal client.
     protected void cancelAll() {
-       boolean logDEBUG = Core.logger.shouldLog(Logger.DEBUG);
+       boolean logDEBUG = Core.logger.shouldLog(Logger.DEBUG,this);
        if(logDEBUG) Core.logger.log(this, "cancelAll()", 
                                     Logger.DEBUG); // FIXME
         // REDFLAG: Send failed events for all queued requests

_______________________________________________
cvs mailing list
[EMAIL PROTECTED]
http://dodo.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to