Author: toad
Date: 2006-07-25 20:13:46 +0000 (Tue, 25 Jul 2006)
New Revision: 9761

Modified:
   trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
   trunk/freenet/src/freenet/client/async/SplitFileInserter.java
   trunk/freenet/src/freenet/node/PacketSender.java
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/RequestSender.java
   trunk/freenet/src/freenet/node/Version.java
   trunk/freenet/src/freenet/node/fcp/ClientPut.java
Log:
900: Various bugfixes.

Modified: trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleFileFetcher.java       
2006-07-25 20:03:22 UTC (rev 9760)
+++ trunk/freenet/src/freenet/client/async/SingleFileFetcher.java       
2006-07-25 20:13:46 UTC (rev 9761)
@@ -303,8 +303,6 @@
                                } catch (MalformedURLException e) {
                                        throw new 
FetchException(FetchException.INVALID_URI, e);
                                }
-                               if((key instanceof ClientCHK) && 
!((ClientCHK)key).isMetadata())
-                                       rcb.onBlockSetFinished(this);
                                LinkedList newMetaStrings = 
uri.listMetaStrings();

                                // Move any new meta strings to beginning of 
our list of remaining meta strings
@@ -315,6 +313,8 @@

                                // **FIXME** Is key in the call to 
SingleFileFetcher here supposed to be this.key or the same key used in the try 
block above?  MultiLevelMetadataCallback.onSuccess() below uses this.key, thus 
the question
                                SingleFileFetcher f = new 
SingleFileFetcher((ClientGetter)parent, rcb, clientMetadata, key, metaStrings, 
ctx, actx, maxRetries, recursionLevel, false, null, true, returnBucket);
+                               if((key instanceof ClientCHK) && 
!((ClientCHK)key).isMetadata())
+                                       rcb.onBlockSetFinished(this);
                                if(metadata.isCompressed()) {
                                        Compressor codec = 
Compressor.getCompressionAlgorithmByMetadataID(metadata.getCompressionCodec());
                                        f.addDecompressor(codec);

Modified: trunk/freenet/src/freenet/client/async/SplitFileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileInserter.java       
2006-07-25 20:03:22 UTC (rev 9760)
+++ trunk/freenet/src/freenet/client/async/SplitFileInserter.java       
2006-07-25 20:13:46 UTC (rev 9761)
@@ -227,7 +227,6 @@

        public void segmentHasURIs(SplitFileInserterSegment segment) {
                if(haveSentMetadata) {
-                       Logger.error(this, "WTF? Already sent metadata");
                        return;
                }


Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java    2006-07-25 20:03:22 UTC 
(rev 9760)
+++ trunk/freenet/src/freenet/node/PacketSender.java    2006-07-25 20:13:46 UTC 
(rev 9761)
@@ -163,7 +163,7 @@

                 // Is the node dead?
                 if(now - pn.lastReceivedPacketTime() > 
pn.maxTimeBetweenReceivedPackets()) {
-                       Logger.error(this, "Disconnecting from "+pn+" - haven't 
received packets recently");
+                       Logger.normal(this, "Disconnecting from "+pn+" - 
haven't received packets recently");
                     pn.disconnected();
                     continue;
                 }

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-07-25 20:03:22 UTC 
(rev 9760)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-07-25 20:13:46 UTC 
(rev 9761)
@@ -752,7 +752,7 @@
     public boolean isConnected(){
        long now = System.currentTimeMillis();
        synchronized(this) {
-               if( isConnected ) {
+               if( isConnected && currentTracker != null ) {
                        timeLastConnected = now;
                        return true;
                }
@@ -1243,13 +1243,14 @@
                } catch (FSParseException e1) {
                        synchronized(this) {
                                bogusNoderef = true;
+                               // Disconnect, something broke
+                               isConnected = false;
                        }
                        Logger.error(this, "Failed to parse new noderef for 
"+this+": "+e1, e1);
-                       // Treat as invalid version
                }
-       synchronized(this) {
-               isRoutable = true;
-        }
+               boolean routable = true;
+               boolean newer = false;
+               boolean older = false;
                if(reverseInvalidVersion()) {
                        try {
                                
node.setNewestPeerLastGoodVersion(Version.getArbitraryBuildNumber(getLastGoodVersion()));
@@ -1257,68 +1258,45 @@
                                // ignore
                        }
                        Logger.normal(this, "Not connecting to "+this+" - 
reverse invalid version "+Version.getVersionString()+" for peer's 
lastGoodversion: "+getLastGoodVersion());
-               synchronized(this) {
-                               verifiedIncompatibleNewerVersion = true;
-                               isRoutable = false;
-                       }
-                       node.peers.disconnected(this);
+                       newer = true;
                } else {
-               synchronized(this) {
-                               verifiedIncompatibleNewerVersion = false;
-                       }
+                       newer = false;
                }
                if(invalidVersion()) {
                        Logger.normal(this, "Not connecting to "+this+" - 
invalid version "+getVersion());
-               synchronized(this) {
-                               verifiedIncompatibleOlderVersion = true;
-                               isRoutable = false;
-                       }
-                       node.peers.disconnected(this);
+                       older = true;
+                       routable = false;
                } else {
-               synchronized(this) {
-                               verifiedIncompatibleOlderVersion = false;
-                       }
+                       older = false;
                }
-               setPeerNodeStatus(now);
+       synchronized(this) {
+               isRoutable = routable;
+               verifiedIncompatibleNewerVersion = newer;
+               verifiedIncompatibleOlderVersion = older;
+        }
                KeyTracker newTracker = new KeyTracker(this, encCipher, encKey);
                changedIP(replyTo);
                boolean bootIDChanged = false;
        synchronized(this) {
                        bootIDChanged = (thisBootID != this.bootID);
+                       if(bootIDChanged)
+                               Logger.minor(this, "Changed boot ID from 
"+bootID+" to "+thisBootID+" for "+getPeer());
                        this.bootID = thisBootID;
+                       connectedTime = now;
                }
                if(bootIDChanged) {
-               synchronized(this) {
-                               connectedTime = now;
-                               Logger.minor(this, "Changed boot ID from 
"+bootID+" to "+thisBootID+" for "+getPeer());
-                       }
-                       boolean previousTrackerIsNull = true;
+                       KeyTracker oldPrev = null;
+                       KeyTracker oldCur = null;
                        synchronized(this) {
-                               previousTrackerIsNull = (previousTracker == 
null);
+                               oldPrev = previousTracker;
+                               oldCur = currentTracker;
+                               previousTracker = currentTracker = null;
                        }
-                       if(!previousTrackerIsNull) {
-                               KeyTracker old = null;
-                               synchronized(this) {
-                                       old = previousTracker;
-                                       previousTracker = null;
-                               }
-                               old.completelyDeprecated(newTracker);
+                       if(oldPrev != null) {
+                               oldPrev.completelyDeprecated(newTracker);
                        }
-                       synchronized(this) {
-                               previousTracker = null;
-                       }
-                       boolean currentTrackerIsNull = true;
-                       synchronized(this) {
-                               currentTrackerIsNull = (currentTracker == null);
-                       }
-                       if(!currentTrackerIsNull) {
-                               KeyTracker old = null;
-                               synchronized(this) {
-                                       old = currentTracker;
-                                       currentTracker = null;
-                               }
-                               old.completelyDeprecated(newTracker);
-                       }
+                       if(oldCur != null)
+                               oldCur.completelyDeprecated(newTracker);
                        node.lm.lostOrRestartedNode(this);
                } // else it's a rekey

@@ -1330,33 +1308,20 @@
                        Logger.minor(this, "sentHandshake() being called for 
unverifiedTracker: "+getPeer());
                        sentHandshake();
                } else {
+                       KeyTracker prev;
                        synchronized(this) {
-                               previousTracker = currentTracker;
+                               prev = currentTracker;
+                               previousTracker = prev;
                                currentTracker = newTracker;
                                unverifiedTracker = null;
-                       }
-                       boolean previousTrackerIsNull = true;
-                       synchronized(this) {
-                               previousTrackerIsNull = (previousTracker == 
null);
-                       }
-                       if(!previousTrackerIsNull) {
-                               KeyTracker localPreviousTracker = null;
-                               synchronized(this) {
-                                       localPreviousTracker = previousTracker;
-                               }
-                               localPreviousTracker.deprecated();
-                       }
-                       synchronized(this) {
                                neverConnected = false;
                                peerAddedTime = 0;  // don't store anymore
-                       }
-                       setPeerNodeStatus(now);
-                       synchronized(this) {
                                ctx = null;
                        }
+                       if(prev != null)
+                               prev.deprecated();
+                       setPeerNodeStatus(now);
                }
-               if(!isConnected())
-                       node.peers.disconnected(this);
                synchronized(this) {
                        Logger.normal(this, "Completed handshake with "+this+" 
on "+replyTo+" - current: "+currentTracker+" old: "+previousTracker+" 
unverified: "+unverifiedTracker+" bootID: "+thisBootID+" getName(): 
"+getName());
                }
@@ -1366,9 +1331,11 @@
                        Logger.error(this, "Disconnected in completedHandshake 
with "+this);
                        return true; // i suppose
                }
-               if(isConnected()) {
-                       node.peers.addConnectedPeer(this);
-               }
+       if(newer || older || !isConnected())
+               node.peers.disconnected(this);
+       else 
+               node.peers.addConnectedPeer(this);
+               setPeerNodeStatus(now);
                synchronized(this) {
                        sentInitialMessages = false;
                }
@@ -1401,7 +1368,7 @@
                         sendAsync(locMsg, null, 0, null);
             sendAsync(ipMsg, null, 0, null);
         } catch (NotConnectedException e) {
-            Logger.error(this, "Completed handshake with "+getPeer()+" but 
disconnected!!!", new Exception("error"));
+            Logger.error(this, "Completed handshake with "+getPeer()+" but 
disconnected ("+isConnected+":"+currentTracker+"!!!: "+e, e);
         }
     }


Modified: trunk/freenet/src/freenet/node/RequestSender.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestSender.java   2006-07-25 20:03:22 UTC 
(rev 9760)
+++ trunk/freenet/src/freenet/node/RequestSender.java   2006-07-25 20:13:46 UTC 
(rev 9761)
@@ -74,7 +74,12 @@
     public String toString() {
         return super.toString()+" for "+uid;
     }
-    
+
+    /**
+     * RequestSender constructor.
+     * @param key The key to request. Its public key should have been looked up
+     * already; RequestSender will not look it up.
+     */
     public RequestSender(Key key, DSAPublicKey pubKey, short htl, long uid, 
Node n, double nearestLoc, 
             PeerNode source) {
         this.key = key;
@@ -85,6 +90,7 @@
         this.source = source;
         this.nearestLoc = nearestLoc;
         target = key.toNormalizedDouble();
+        node.addRequestSender(key, htl, this);
     }

     public void start() {
@@ -96,12 +102,9 @@
     public void run() {
         if((key instanceof NodeSSK) && (pubKey == null)) {
                pubKey = ((NodeSSK)key).getPubKey();
-               if(pubKey == null)
-                       pubKey = node.getKey(((NodeSSK)key).getPubKeyHash());
         }

         short origHTL = htl;
-        node.addRequestSender(key, htl, this);
         HashSet nodesRoutedTo = new HashSet();
         HashSet nodesNotIgnored = new HashSet();
         try {

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-07-25 20:03:22 UTC (rev 
9760)
+++ trunk/freenet/src/freenet/node/Version.java 2006-07-25 20:13:46 UTC (rev 
9761)
@@ -18,7 +18,7 @@
        public static final String protocolVersion = "1.0";

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

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

Modified: trunk/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPut.java   2006-07-25 20:03:22 UTC 
(rev 9760)
+++ trunk/freenet/src/freenet/node/fcp/ClientPut.java   2006-07-25 20:13:46 UTC 
(rev 9761)
@@ -115,7 +115,7 @@
                        targetURI = null;
                } else if(uploadFrom == ClientPutMessage.UPLOAD_FROM_DIRECT) {
                        origFilename = null;
-                       if(!succeeded) {
+                       if(!finished) {
                                byte[] key = 
HexUtil.hexToBytes(fs.get("TempBucket.DecryptKey"));
                                String fnam = fs.get("TempBucket.Filename");
                                long sz = 
Long.parseLong(fs.get("TempBucket.Size"));
@@ -180,12 +180,14 @@
                fs.put("UploadFrom", 
ClientPutMessage.uploadFromString(uploadFrom));
                if(uploadFrom == ClientPutMessage.UPLOAD_FROM_DISK) {
                        fs.put("Filename", origFilename.getPath());
-               }  else if(uploadFrom == ClientPutMessage.UPLOAD_FROM_DIRECT) {
-                       // the bucket is a persistent encrypted temp bucket
-                       PaddedEphemerallyEncryptedBucket bucket = 
(PaddedEphemerallyEncryptedBucket) data;
-                       fs.put("TempBucket.DecryptKey", 
HexUtil.bytesToHex(bucket.getKey()));
-                       fs.put("TempBucket.Filename", 
((FileBucket)(bucket.getUnderlying())).getName());
-                       fs.put("TempBucket.Size", Long.toString(bucket.size()));
+               } else if(uploadFrom == ClientPutMessage.UPLOAD_FROM_DIRECT) {
+                       if(!finished) {
+                               // the bucket is a persistent encrypted temp 
bucket
+                               PaddedEphemerallyEncryptedBucket bucket = 
(PaddedEphemerallyEncryptedBucket) data;
+                               fs.put("TempBucket.DecryptKey", 
HexUtil.bytesToHex(bucket.getKey()));
+                               fs.put("TempBucket.Filename", 
((FileBucket)(bucket.getUnderlying())).getName());
+                               fs.put("TempBucket.Size", 
Long.toString(bucket.size()));
+                       }
                } else if(uploadFrom == ClientPutMessage.UPLOAD_FROM_REDIRECT) {
                        fs.put("TargetURI", targetURI.toString());
                }


Reply via email to