FYI for the reverts:

$ svn diff https://emu.freenetproject.org/svn/trunk/freenet at 24157 
https://emu.freenetproject.org/svn/trunk/freenet at 24162
Index: src/freenet/node/Version.java
===================================================================
--- src/freenet/node/Version.java       (revision 24157)
+++ src/freenet/node/Version.java       (revision 24162)
@@ -24,17 +24,17 @@
        public static final String protocolVersion = "1.0";

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

        /** Oldest build of Fred we will talk to */
-       private static final int oldLastGoodBuild = 1188;
-       private static final int newLastGoodBuild = 1190;
+       private static final int oldLastGoodBuild = 1190;
+       private static final int newLastGoodBuild = 1192;
        static final long transitionTime;

        static {
                final Calendar _cal = 
Calendar.getInstance(TimeZone.getTimeZone("GMT"));
                // year, month - 1 (or constant), day, hour, minute, second
-               _cal.set( 2008, Calendar.DECEMBER, 9, 0, 0, 0 );
+               _cal.set( 2008, Calendar.DECEMBER, 12, 0, 0, 0 );
                transitionTime = _cal.getTimeInMillis();
        }



On Wednesday 10 December 2008 00:35, toad at freenetproject.org wrote:
> Author: toad
> Date: 2008-12-10 00:35:38 +0000 (Wed, 10 Dec 2008)
> New Revision: 24162
> 
> Modified:
>    trunk/freenet/
>    trunk/freenet/src/freenet/client/async/USKCallback.java
>    trunk/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
>    trunk/freenet/src/freenet/node/Announcer.java
>    trunk/freenet/src/freenet/node/DarknetPeerNode.java
>    trunk/freenet/src/freenet/node/FNPPacketMangler.java
>    trunk/freenet/src/freenet/node/KeyTracker.java
>    trunk/freenet/src/freenet/node/Node.java
>    trunk/freenet/src/freenet/node/NodeDispatcher.java
>    trunk/freenet/src/freenet/node/OpennetManager.java
>    trunk/freenet/src/freenet/node/OpennetPeerNode.java
>    trunk/freenet/src/freenet/node/OutgoingPacketMangler.java
>    trunk/freenet/src/freenet/node/PacketSender.java
>    trunk/freenet/src/freenet/node/PeerManager.java
>    trunk/freenet/src/freenet/node/PeerNode.java
>    trunk/freenet/src/freenet/node/RequestHandler.java
>    trunk/freenet/src/freenet/node/SeedClientPeerNode.java
>    trunk/freenet/src/freenet/node/SeedServerPeerNode.java
>    trunk/freenet/test/freenet/support/io/MockInputStream.java
> Log:
> Un-revert (exclude Version.java)
> 
> 
> 
> Property changes on: trunk/freenet
> ___________________________________________________________________
> Deleted: svn:mergeinfo
>    - /trunk/freenet:24155
> 
> Modified: trunk/freenet/src/freenet/client/async/USKCallback.java
> ===================================================================
> --- trunk/freenet/src/freenet/client/async/USKCallback.java   2008-12-10 
00:30:31 UTC (rev 24161)
> +++ trunk/freenet/src/freenet/client/async/USKCallback.java   2008-12-10 
00:35:38 UTC (rev 24162)
> @@ -11,9 +11,14 @@
>   */
>  public interface USKCallback {
>  
> -     /** Found the latest edition.
> -      * @param l The edition number.
> -      * @param key The key. */
> +     /**
> +      * Found the latest edition.
> +      * 
> +      * @param l
> +      *            The edition number.
> +      * @param key
> +      *            A copy of the key with new edition set
> +      */
>       void onFoundEdition(long l, USK key);
>       
>       /**
> 
> Modified: 
trunk/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat
> ===================================================================
> --- trunk/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat   
2008-12-10 00:30:31 UTC (rev 24161)
> +++ trunk/freenet/src/freenet/clients/http/staticfiles/defaultbookmarks.dat   
2008-12-10 00:35:38 UTC (rev 24162)
> @@ -7,26 +7,26 @@
>  BookmarkCategory0.Content.Bookmark0.Name=The Ultimate FreeNet Index
>  BookmarkCategory0.Content.Bookmark0.Description=A new one-page index with a 
menu including categories
>  BookmarkCategory0.Content.Bookmark0.hasAnActivelink=true
> -BookmarkCategory0.Content.Bookmark0.URI=USK at 
> 0I8gctpUE32CM0iQhXaYpCMvtPPGfT4pjXm01oid5Zc,3dAcn4fX2LyxO6uCnWFTx-2HKZ89uruurcKwLSCxbZ4,AQACAAE/Ultimate-Freenet-Index/35/
> 
+BookmarkCategory0.Content.Bookmark0.URI=USK at 
0I8gctpUE32CM0iQhXaYpCMvtPPGfT4pjXm01oid5Zc,3dAcn4fX2LyxO6uCnWFTx-2HKZ89uruurcKwLSCxbZ4,AQACAAE/Ultimate-Freenet-Index/37/
>  BookmarkCategory0.Content.Bookmark3.Name=Index des sites Fran?ais
>  BookmarkCategory0.Content.Bookmark3.Description=A small French index with 
descriptions
>  BookmarkCategory0.Content.Bookmark3.hasAnActivelink=true
> -BookmarkCategory0.Content.Bookmark3.URI=USK at 
> RJnh1EnvOSPwOWVRS2nyhC4eIQkKoNE5hcTv7~yY-sM,pOloLxnKWM~AL24iDMHOAvTvCqMlB-p2BO9zK96TOZA,AQACAAE/index_fr/73/
> 
+BookmarkCategory0.Content.Bookmark3.URI=USK at 
RJnh1EnvOSPwOWVRS2nyhC4eIQkKoNE5hcTv7~yY-sM,pOloLxnKWM~AL24iDMHOAvTvCqMlB-p2BO9zK96TOZA,AQACAAE/index_fr/77/
>  BookmarkCategory0.Content.Bookmark2.Name=Freenet Activelink Index (SLOW: 
graphical index, preloads all the sites, so takes *ages* to load)
>  BookmarkCategory0.Content.Bookmark2.hasAnActivelink=true
>  BookmarkCategory0.Content.Bookmark2.Description=A graphical freenet index 
(this will take a long time to load as it preloads the sites)
> -BookmarkCategory0.Content.Bookmark2.URI=USK at 
> qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index/93/
> 
+BookmarkCategory0.Content.Bookmark2.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index/95/
>  BookmarkCategory0.Content.Bookmark1.Name=Freenet Activelink Index Text 
Version (a quick-loading non-graphical index site, no porn)
>  BookmarkCategory0.Content.Bookmark1.hasAnActivelink=true
>  BookmarkCategory0.Content.Bookmark1.Description=Text version of the 
Activelink Index
> -BookmarkCategory0.Content.Bookmark1.URI=USK at 
> qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index-text/54/
> 
+BookmarkCategory0.Content.Bookmark1.URI=USK at 
qd-hk0vHYg7YvK2BQsJMcUD5QSF0tDkgnnF6lnWUH0g,xTFOV9ddCQQk6vQ6G~jfL6IzRUgmfMcZJ6nuySu~NUc,AQACAAE/activelink-index-text/56/
>  BookmarkCategory1.Name=Freenet related software and documentation
>  BookmarkCategory1.Content.BookmarkCategory=0
>  BookmarkCategory1.Content.Bookmark=5
>  BookmarkCategory1.Content.Bookmark0.Name=Freenet Message System
>  BookmarkCategory1.Content.Bookmark0.Description=The official freesite of 
FMS, a spam resistant message board system for Freenet
>  BookmarkCategory1.Content.Bookmark0.hasAnActivelink=true
> -BookmarkCategory1.Content.Bookmark0.URI=USK at 
> 0npnMrqZNKRCRoGojZV93UNHCMN-6UU3rRSAmP6jNLE,~BG-edFtdCC1cSH4O3BWdeIYa8Sw5DfyrSV-TKdO5ec,AQACAAE/fms/84/
> 
+BookmarkCategory1.Content.Bookmark0.URI=USK at 
0npnMrqZNKRCRoGojZV93UNHCMN-6UU3rRSAmP6jNLE,~BG-edFtdCC1cSH4O3BWdeIYa8Sw5DfyrSV-TKdO5ec,AQACAAE/fms/85/
>  BookmarkCategory1.Content.Bookmark1.Name=Freemail
>  BookmarkCategory1.Content.Bookmark1.Description=The official site for 
Freemail - email over Freenet
>  BookmarkCategory1.Content.Bookmark1.hasAnActivelink=true
> @@ -39,7 +39,7 @@
>  BookmarkCategory1.Content.Bookmark3.Name=Freesite HOWTO
>  BookmarkCategory1.Content.Bookmark3.Description=A more detailed explanation 
of publishing freesites
>  BookmarkCategory1.Content.Bookmark3.hasAnActivelink=true
> -BookmarkCategory1.Content.Bookmark4.URI=USK at 
> ugb~uuscsidMI-Ze8laZe~o3BUIb3S50i25RIwDH99M,9T20t3xoG-dQfMO94LGOl9AxRTkaz~TykFY-voqaTQI,AQACAAE/FAFS/4/
> 
+BookmarkCategory1.Content.Bookmark4.URI=USK at 
ugb~uuscsidMI-Ze8laZe~o3BUIb3S50i25RIwDH99M,9T20t3xoG-dQfMO94LGOl9AxRTkaz~TykFY-voqaTQI,AQACAAE/FAFS/44/
>  BookmarkCategory1.Content.Bookmark4.hasAnActivelink=true
>  BookmarkCategory1.Content.Bookmark4.Name=The Freenet Applications Freesite
>  BookmarkCategory1.Content.Bookmark4.Description=Various links to Freenet 
applications, and instructions for using them
> 
> Modified: trunk/freenet/src/freenet/node/Announcer.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/Announcer.java     2008-12-10 00:30:31 UTC 
(rev 24161)
> +++ trunk/freenet/src/freenet/node/Announcer.java     2008-12-10 00:35:38 UTC 
(rev 24162)
> @@ -331,7 +331,7 @@
>                                       }
>                                       if(enoughPeers()) {
>                                               for(SeedServerPeerNode pn : 
node.peers.getConnectedSeedServerPeersVector(null)) {
> -                                                     
> node.peers.disconnect(pn, true, true);
> +                                                     
> node.peers.disconnect(pn, true, true, false);
>                                               }
>                                               // Re-check every minute. 
> Something bad might happen (e.g. cpu 
starvation), causing us to have to reseed.
>                                               
> node.getTicker().queueTimedJob(new Runnable() {
> @@ -511,7 +511,7 @@
>                               // If it takes more than COOLING_OFF_PERIOD to 
> disconnect, we might not 
be able to reannounce to this
>                               // node. However, we can't reannounce to it 
> anyway until announcedTo is 
cleared, which probably will
>                               // be more than that period in the future.
> -                             node.peers.disconnect(seed, true, false);
> +                             node.peers.disconnect(seed, true, false, false);
>                               System.out.println("Announcement to 
> "+seed.userToString()+" 
completed.");
>                               if(announceNow)
>                                       maybeSendAnnouncement();
> 
> Modified: trunk/freenet/src/freenet/node/DarknetPeerNode.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/DarknetPeerNode.java       2008-12-10 
> 00:30:31 
UTC (rev 24161)
> +++ trunk/freenet/src/freenet/node/DarknetPeerNode.java       2008-12-10 
> 00:35:38 
UTC (rev 24162)
> @@ -16,6 +16,7 @@
>  import java.util.LinkedHashSet;
>  
>  import freenet.client.DefaultMIMETypes;
> +import freenet.crypt.BlockCipher;
>  import freenet.io.comm.DMT;
>  import freenet.io.comm.DisconnectedException;
>  import freenet.io.comm.FreenetInetAddress;
> @@ -772,6 +773,7 @@
>        */
>       @Override
>       protected void onConnect() {
> +             super.onConnect();
>               sendQueuedN2NMs();
>       }
>  
> @@ -1596,4 +1598,5 @@
>       public final boolean shouldDisconnectAndRemoveNow() {
>               return false;
>       }
> +     
>  }
> 
> Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/FNPPacketMangler.java      2008-12-10 
> 00:30:31 
UTC (rev 24161)
> +++ trunk/freenet/src/freenet/node/FNPPacketMangler.java      2008-12-10 
> 00:35:38 
UTC (rev 24162)
> @@ -303,7 +303,7 @@
>               OpennetManager opennet = node.getOpennet();
>               if(opennet != null) {
>                       // Try old opennet connections.
> -                     if(opennet.wantPeer(null, false, true)) {
> +                     if(opennet.wantPeer(null, false, true, true)) {
>                               // We want a peer.
>                               // Try old connections.
>                               PeerNode[] oldPeers = opennet.getOldPeers();
> @@ -1201,9 +1201,14 @@
>                               Logger.normal(this, "Dumping incoming 
> old-opennet peer as opennet just 
turned off: "+pn+".");
>                               return;
>                       }
> -                     if(!opennet.wantPeer(pn, true, false)) {
> +                     /* When an old-opennet-peer connects, add it at the top 
> of the LRU, so 
that it isn't
> +                      * immediately dropped when there is no droppable peer 
> to drop. If it 
was dropped 
> +                      * from the bottom of the LRU list, we would not have 
> added it to the 
LRU; so it was
> +                      * somewhere in the middle. */
> +                     if(!opennet.wantPeer(pn, false, false, true)) {
>                               Logger.normal(this, "No longer want peer "+pn+" 
> - dumping it after 
connecting");
>                               dontWant = true;
> +                             opennet.purgeOldOpennetPeer(pn);
>                       }
>                       // wantPeer will call node.peers.addPeer(), we don't 
> have to.
>               }
> @@ -1217,7 +1222,7 @@
>                                       c, Ke, Ka, authenticator, hisRef, pn, 
> replyTo, unknownInitiator, 
setupType, newTrackerID, newTrackerID == trackerID);
>                       
>                       if(dontWant)
> -                             node.peers.disconnect(pn, true, false); // Let 
> it connect then tell it 
to remove it.
> +                             node.peers.disconnect(pn, true, false, true); 
> // Let it connect then 
tell it to remove it.
>                       else
>                               pn.maybeSendInitialMessages();
>               } else {
> @@ -1417,9 +1422,14 @@
>                               Logger.normal(this, "Dumping incoming 
> old-opennet peer as opennet just 
turned off: "+pn+".");
>                               return true;
>                       }
> -                     if(!opennet.wantPeer(pn, true, false)) {
> +                     /* When an old-opennet-peer connects, add it at the top 
> of the LRU, so 
that it isn't
> +                      * immediately dropped when there is no droppable peer 
> to drop. If it 
was dropped 
> +                      * from the bottom of the LRU list, we would not have 
> added it to the 
LRU; so it was
> +                      * somewhere in the middle. */
> +                     if(!opennet.wantPeer(pn, false, false, true)) {
>                               Logger.normal(this, "No longer want peer "+pn+" 
> - dumping it after 
connecting");
>                               dontWant = true;
> +                             opennet.purgeOldOpennetPeer(pn);
>                       }
>                       // wantPeer will call node.peers.addPeer(), we don't 
> have to.
>               }
> @@ -1428,7 +1438,7 @@
>               c.initialize(pn.jfkKs);
>               if(pn.completedHandshake(bootID, hisRef, 0, hisRef.length, c, 
> pn.jfkKs, 
replyTo, false, negType, trackerID, true, reusedTracker) >= 0) {
>                       if(dontWant)
> -                             node.peers.disconnect(pn, true, false);
> +                             node.peers.disconnect(pn, true, false, true);
>                       else
>                               pn.maybeSendInitialMessages();
>               } else {
> @@ -1486,6 +1496,7 @@
>                       else trackerID = pn.getReusableTrackerID();
>                       System.arraycopy(Fields.longToBytes(trackerID), 0, 
> data, ptr, 8);
>                       ptr += 8;
> +                     if(logMINOR) Logger.minor(this, "Sending tracker ID 
> "+trackerID+" in 
JFK(3)");
>               }
>               System.arraycopy(Fields.longToBytes(node.bootID), 0, data, ptr, 
> 8);
>               ptr += 8;
> @@ -2835,7 +2846,7 @@
>       /* (non-Javadoc)
>        * @see 
freenet.node.OutgoingPacketMangler#sendHandshake(freenet.node.PeerNode)
>        */
> -     public void sendHandshake(PeerNode pn) {
> +     public void sendHandshake(PeerNode pn, boolean notRegistered) {
>               int negType = pn.selectNegType(this);
>               if(negType == -1) {
>                       // Pick a random negType from what I do support
> @@ -2847,13 +2858,13 @@
>               
>               Peer peer = pn.getHandshakeIP();
>               if(peer == null) {
> -                     pn.couldNotSendHandshake();
> +                     pn.couldNotSendHandshake(notRegistered);
>                       return;
>               }
>               sendJFKMessage1(pn, peer, pn.handshakeUnknownInitiator(), 
pn.handshakeSetupType(), negType);
>               if(logMINOR)
>                       Logger.minor(this, "Sending handshake to "+peer+" for 
> "+pn);
> -             pn.sentHandshake();
> +             pn.sentHandshake(notRegistered);
>       }
>  
>       /* (non-Javadoc)
> @@ -2870,7 +2881,7 @@
>       }
>  
>       public int[] supportedNegTypes() {
> -             return new int[] { 2, 3, 4 };
> +             return new int[] { 2, 4 };
>       }
>  
>       public int fullHeadersLengthOneMessage() {
> 
> Modified: trunk/freenet/src/freenet/node/KeyTracker.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/KeyTracker.java    2008-12-10 00:30:31 UTC 
(rev 24161)
> +++ trunk/freenet/src/freenet/node/KeyTracker.java    2008-12-10 00:35:38 UTC 
(rev 24162)
> @@ -33,5 +33,9 @@
>               this.sessionCipher = cipher;
>               this.sessionKey = sessionKey;
>       }
> +     
> +     public String toString() {
> +             return super.toString()+":"+packets.toString();
> +     }
>  
>  }
> 
> Modified: trunk/freenet/src/freenet/node/Node.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/Node.java  2008-12-10 00:30:31 UTC (rev 
24161)
> +++ trunk/freenet/src/freenet/node/Node.java  2008-12-10 00:35:38 UTC (rev 
24162)
> @@ -3263,7 +3263,7 @@
>       }
>       
>       public void removePeerConnection(PeerNode pn) {
> -             peers.disconnect(pn, true, false);
> +             peers.disconnect(pn, true, false, false);
>       }
>  
>       public void onConnectedPeer() {
> 
> Modified: trunk/freenet/src/freenet/node/NodeDispatcher.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/NodeDispatcher.java        2008-12-10 
> 00:30:31 
UTC (rev 24161)
> +++ trunk/freenet/src/freenet/node/NodeDispatcher.java        2008-12-10 
> 00:35:38 
UTC (rev 24162)
> @@ -314,7 +314,7 @@
>               // Otherwise just dump all current connection state and keep 
> trying to 
connect.
>               boolean remove = m.getBoolean(DMT.REMOVE);
>               if(remove)
> -                     node.peers.disconnect(source, false, false);
> +                     node.peers.disconnect(source, false, false, false);
>               // If true, purge all references to this node. Otherwise, we 
> can keep the 
node
>               // around in secondary tables etc in order to more easily 
> reconnect 
later. 
>               // (Mostly used on opennet)
> 
> Modified: trunk/freenet/src/freenet/node/OpennetManager.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/OpennetManager.java        2008-12-10 
> 00:30:31 
UTC (rev 24161)
> +++ trunk/freenet/src/freenet/node/OpennetManager.java        2008-12-10 
> 00:35:38 
UTC (rev 24162)
> @@ -58,7 +58,7 @@
>        * if we have no other option. */
>       private final LRUQueue oldPeers;
>       /** Maximum number of old peers */
> -     static final int MAX_OLD_PEERS = 50;
> +     static final int MAX_OLD_PEERS = 25;
>       /** Time at which last dropped a peer */
>       private long timeLastDropped;
>       /** Number of successful CHK requests since last added a node */
> @@ -101,6 +101,8 @@
>       public static final int MIN_PEERS_FOR_SCALING = 10;
>       /** Maximum number of peers */
>       public static final int MAX_PEERS_FOR_SCALING = 20;
> +     /** Stop trying to reconnect to an old-opennet-peer after a month. */
> +     public static final long MAX_TIME_ON_OLD_OPENNET_PEERS = 31 * 24 * 60 * 
> 60 
* 1000;
>       
>       private final long creationTime;
>      
> @@ -246,7 +248,7 @@
>                       if(logMINOR) Logger.minor(this, "Not adding 
> "+pn.userToString()+" to 
opennet list as already there");
>                       return null;
>               }
> -             if(wantPeer(pn, true, false)) return pn;
> +             if(wantPeer(pn, true, false, false)) return pn;
>               else return null;
>               // Start at bottom. Node must prove itself.
>       }
> @@ -265,6 +267,10 @@
>               dropExcessPeers();
>       }
>       
> +     private long timeLastAddedOldOpennetPeer = -1;
> +     
> +     private static final int OLD_OPENNET_PEER_INTERVAL = 30*1000;
> +     
>       /**
>        * Trim the peers list and possibly add a new node. Note that if we are 
not adding a new node,
>        * we will only return true every MIN_TIME_BETWEEN_OFFERS, to prevent 
problems caused by many
> @@ -273,11 +279,19 @@
>        * @param addAtLRU If there is a node to add, add it at the bottom 
> rather 
than the top. Normally
>        * we set this on new path folded nodes so that they will be replaced 
> if 
during the trial period,
>        * plus the time it takes to get a new path folding offer, they don't 
> have 
a successful request.
> -      * @param justChecking If true, and nodeToAddNow == null, we don't 
actually send an offer, we
> -      * just want to know if there is space for a node.
> +      * @param justChecking If true, we want to know whether there is space 
> for 
a node to be added
> +      * RIGHT NOW. If false, the normal behaviour applies: if nodeToAddNow 
> is 
passed in, we decide
> +      * whether to add that node, if it's null, we decide whether to send an 
offer subject to the
> +      * inter-offer time.
> +      * @param oldOpennetPeer If true, we are trying to add an 
> old-opennet-peer 
which has reconnected.
> +      * There is a throttle, we accept no more than one old-opennet-peer 
> every 
30 seconds. On receiving
> +      * a packet, we call once to decide whether to try to parse it against 
> the 
old-opennet-peers, and
> +      * then again to decide whether it is worth keeping; in the latter case 
> if 
we decide not, the
> +      * old-opennet-peer will be told to disconnect and go away, but 
> normally 
we don't reach that point
> +      * because of the first check.
>        * @return True if the node was added / should be added.
>        */
> -     public boolean wantPeer(PeerNode nodeToAddNow, boolean addAtLRU, 
> boolean 
justChecking) {
> +     public boolean wantPeer(PeerNode nodeToAddNow, boolean addAtLRU, 
> boolean 
justChecking, boolean oldOpennetPeer) {
>               boolean notMany = false;
>               boolean noDisconnect;
>               synchronized(this) {
> @@ -301,6 +315,9 @@
>                               if(nodeToAddNow != null || !justChecking)
>                                       timeLastOffered = 
> System.currentTimeMillis();
>                               notMany = true;
> +                             // Don't check timeLastAddedOldOpennetPeer, 
> since we want it anyway. 
But do update it.
> +                             if(oldOpennetPeer)
> +                                     timeLastAddedOldOpennetPeer = 
> System.currentTimeMillis();
>                       }
>                       noDisconnect = successCount < 
> MIN_SUCCESS_BETWEEN_DROP_CONNS;
>               }
> @@ -316,13 +333,13 @@
>                       // If we have dropped a disconnected peer, then the 
> inter-peer offer 
cooldown doesn't apply: we can accept immediately.
>                       boolean hasDisconnected = false;
>                       if(peersLRU.size() == maxPeers && nodeToAddNow == null) 
> {
> -                             PeerNode toDrop = peerToDrop(true);
> +                             PeerNode toDrop = peerToDrop(true, false);
>                               if(toDrop != null)
>                                       hasDisconnected = !toDrop.isConnected();
>                       } else while(peersLRU.size() > maxPeers - (nodeToAddNow 
> == null ? 0 : 
1)) {
>                               OpennetPeerNode toDrop;
>                               // can drop peers which are over the limit
> -                             toDrop = peerToDrop(noDisconnect || 
> nodeToAddNow == null);
> +                             toDrop = peerToDrop(noDisconnect || 
> nodeToAddNow == null, false);
>                               if(toDrop == null) {
>                                       if(logMINOR)
>                                               Logger.minor(this, "No more 
> peers to drop, still "+peersLRU.size()+" 
peers, cannot accept peer"+(nodeToAddNow == null ? "" : 
nodeToAddNow.toString()));
> @@ -336,8 +353,12 @@
>                               peersLRU.remove(toDrop);
>                               dropList.add(toDrop);
>                       }
> -                     if(canAdd) {
> -                             long now = System.currentTimeMillis();
> +                     long now = System.currentTimeMillis();
> +                     if(canAdd && oldOpennetPeer) {
> +                             if(timeLastAddedOldOpennetPeer > 0 && now - 
> timeLastAddedOldOpennetPeer 
> OLD_OPENNET_PEER_INTERVAL)
> +                                     canAdd = false;
> +                     }
> +                     if(canAdd && !justChecking) {
>                               if(nodeToAddNow != null) {
>                                       successCount = 0;
>                                       if(addAtLRU)
> @@ -348,6 +369,8 @@
>                                       oldPeers.remove(nodeToAddNow);
>                                       if(!dropList.isEmpty())
>                                               timeLastDropped = now;
> +                                     if(oldOpennetPeer)
> +                                             timeLastAddedOldOpennetPeer = 
> now;
>                               } else {
>                                       if(now - timeLastOffered <= 
> MIN_TIME_BETWEEN_OFFERS 
&& !hasDisconnected) {
>                                               if(logMINOR)
> @@ -374,26 +397,27 @@
>               }
>               for(OpennetPeerNode pn : dropList) {
>                       if(logMINOR) Logger.minor(this, "Dropping LRU opennet 
> peer: "+pn);
> -                     node.peers.disconnect(pn, true, true);
> +                     node.peers.disconnect(pn, true, true, true);
>               }
>               return canAdd;
>       }
>  
> -     private void dropExcessPeers() {
> +     void dropExcessPeers() {
>               while(peersLRU.size() > getNumberOfConnectedPeersToAim()) {
>                       if(logMINOR)
>                               Logger.minor(this, "Dropping opennet peers: 
currently "+peersLRU.size());
>                       PeerNode toDrop;
> -                     toDrop = peerToDrop(false);
> +                     toDrop = peerToDrop(false, false);
> +                     if(toDrop == null) toDrop = peerToDrop(false, true);
>                       if(toDrop == null) return;
>                       peersLRU.remove(toDrop);
>                       if(logMINOR)
>                               Logger.minor(this, "Dropping "+toDrop);
> -                     node.peers.disconnect(toDrop, true, true);
> +                     node.peers.disconnect(toDrop, true, true, true);
>               }
>       }
>       
> -     synchronized OpennetPeerNode peerToDrop(boolean noDisconnect) {
> +     synchronized OpennetPeerNode peerToDrop(boolean noDisconnect, boolean 
force) {
>               if(peersLRU.size() < getNumberOfConnectedPeersToAim()) {
>                       // Don't drop any peers
>                       return null;
> @@ -403,11 +427,12 @@
>                       for(int i=0;i<peers.length;i++) {
>                               OpennetPeerNode pn = peers[i];
>                               if(pn == null) continue;
> -                             if(!pn.isDroppable()) continue;
> +                             if((!pn.isDroppable(false)) && !force) continue;
>                               // LOCKING: Always take the OpennetManager lock 
> first
>                               if(!pn.isConnected()) {
>                                       if(Logger.shouldLog(Logger.MINOR, this))
>                                               Logger.minor(this, "Possibly 
> dropping opennet peer "+pn+" as is 
disconnected");
> +                                     pn.setWasDropped();
>                                       return pn;
>                               }
>                       }
> @@ -417,10 +442,11 @@
>                       for(int i=0;i<peers.length;i++) {
>                               OpennetPeerNode pn = peers[i];
>                               if(pn == null) continue;
> -                             if(!pn.isDroppable()) continue;
> +                             if((!pn.isDroppable(false)) && !force) continue;
>                               if(Logger.shouldLog(Logger.MINOR, this))
>                                       Logger.minor(this, "Possibly dropping 
> opennet peer "+pn+" "+
>                                                       
> (System.currentTimeMillis() - timeLastDropped)+" ms since last 
dropped peer");
> +                             pn.setWasDropped();
>                               return pn;
>                       }
>               }
> @@ -439,16 +465,19 @@
>                               // Re-add it: nasty race condition when we have 
> few peers
>                       }
>               }
> -             if(!wantPeer(pn, false, false)) // Start at top as it just 
> succeeded
> -                     node.peers.disconnect(pn, true, false);
> +             if(!wantPeer(pn, false, false, false)) // Start at top as it 
> just 
succeeded
> +                     node.peers.disconnect(pn, true, false, true);
>       }
>  
>       public void onRemove(OpennetPeerNode pn) {
>               synchronized (this) {
>                       peersLRU.remove(pn);
> -                     oldPeers.push(pn);
> -                     while (oldPeers.size() > MAX_OLD_PEERS)
> -                             oldPeers.pop();
> +                     if(pn.isDroppable(true) && !pn.grabWasDropped()) {
> +                             if(logMINOR) Logger.minor(this, "onRemove() for 
> "+pn);
> +                             oldPeers.push(pn);
> +                             while (oldPeers.size() > MAX_OLD_PEERS)
> +                                     oldPeers.pop();
> +                     }
>               }
>       }
>  
> 
> Modified: trunk/freenet/src/freenet/node/OpennetPeerNode.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/OpennetPeerNode.java       2008-12-10 
> 00:30:31 
UTC (rev 24161)
> +++ trunk/freenet/src/freenet/node/OpennetPeerNode.java       2008-12-10 
> 00:35:38 
UTC (rev 24162)
> @@ -35,13 +35,14 @@
>               return true;
>       }
>       
> -     public boolean isDroppable() {
> +     public boolean isDroppable(boolean ignoreDisconnect) {
>               long now = System.currentTimeMillis();
>               if(now - getPeerAddedTime() < OpennetManager.DROP_MIN_AGE)
>                       return false; // New node
>               if(now - node.usm.getStartedTime() < 
> OpennetManager.DROP_STARTUP_DELAY)
>                       return false; // Give them time to connect after we 
> startup
>               int status = getPeerNodeStatus();
> +             if(!ignoreDisconnect) {
>               synchronized(this) {
>                       if((status == 
> PeerManager.PEER_NODE_STATUS_DISCONNECTED) && 
(!super.neverConnected()) && 
>                                       now - timeLastDisconnect < 
> OpennetManager.DROP_DISCONNECT_DELAY &&
> @@ -50,6 +51,7 @@
>                               return false;
>                       }
>               }
> +             }
>               return true;
>       }
>       
> @@ -116,7 +118,24 @@
>  
>       @Override
>       protected void onConnect() {
> +             super.onConnect();
>               
opennet.crypto.socket.getAddressTracker().setPresumedGuiltyAt(System.currentTimeMillis()+60*60*1000);
>       }
>       
> +     private boolean wasDropped;
> +
> +     synchronized void setWasDropped() {
> +             wasDropped = true;
> +     }
> +     
> +     synchronized boolean wasDropped() {
> +             return wasDropped;
> +     }
> +     
> +     synchronized boolean grabWasDropped() {
> +             boolean ret = wasDropped;
> +             wasDropped = false;
> +             return ret;
> +     }
> +     
>  }
> 
> Modified: trunk/freenet/src/freenet/node/OutgoingPacketMangler.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/OutgoingPacketMangler.java 2008-12-10 
00:30:31 UTC (rev 24161)
> +++ trunk/freenet/src/freenet/node/OutgoingPacketMangler.java 2008-12-10 
00:35:38 UTC (rev 24162)
> @@ -77,7 +77,7 @@
>        * Send a handshake, if possible, to the node.
>        * @param pn
>        */
> -     public void sendHandshake(PeerNode pn);
> +     public void sendHandshake(PeerNode pn, boolean notRegistered);
>  
>       /**
>        * Is a peer disconnected?
> 
> Modified: trunk/freenet/src/freenet/node/PacketSender.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/PacketSender.java  2008-12-10 00:30:31 UTC 
(rev 24161)
> +++ trunk/freenet/src/freenet/node/PacketSender.java  2008-12-10 00:35:38 UTC 
(rev 24162)
> @@ -236,7 +236,7 @@
>                       pn.maybeOnConnect();
>                       if(pn.shouldDisconnectAndRemoveNow() && 
> !pn.isDisconnecting()) {
>                               // Might as well do it properly.
> -                             node.peers.disconnect(pn, true, true);
> +                             node.peers.disconnect(pn, true, true, false);
>                       }
>                       if(pn.shouldThrottle() && !canSendThrottled)
>                               continue;
> @@ -261,7 +261,7 @@
>                               }
>                               
>                               try {
> -                             if(pn.maybeSendPacket(now, rpiTemp, rpiIntTemp) 
> && canSendThrottled) {
> +                             if(canSendThrottled && pn.maybeSendPacket(now, 
> rpiTemp, rpiIntTemp)) {
>                                       canSendThrottled = false;
>                                       count = node.outputThrottle.getCount();
>                                       if(count > MAX_PACKET_SIZE)
> @@ -295,7 +295,7 @@
>                       if(pn.shouldSendHandshake()) {
>                               // Send handshake if necessary
>                               long beforeHandshakeTime = 
> System.currentTimeMillis();
> -                             pn.getOutgoingMangler().sendHandshake(pn);
> +                             pn.getOutgoingMangler().sendHandshake(pn, 
> false);
>                               long afterHandshakeTime = 
> System.currentTimeMillis();
>                               if((afterHandshakeTime - beforeHandshakeTime) > 
> (2 * 1000))
>                                       Logger.error(this, "afterHandshakeTime 
> is more than 2 seconds past 
beforeHandshakeTime (" + (afterHandshakeTime - beforeHandshakeTime) + ") in 
PacketSender working with " + pn.userToString());
> @@ -307,28 +307,39 @@
>               }
>               brokeAt = newBrokeAt;
>  
> -             // Consider sending connect requests to our opennet old-peers.
> -             // No point if they are NATed, of course... but we don't know 
> whether 
they are.
> +             /* Attempt to connect to old-opennet-peers.
> +              * Constantly send handshake packets, in order to get through a 
> NAT.
> +              * Most JFK(1)'s are less than 300 bytes. 25*300/15 = avg 
> 500B/sec 
bandwidth cost.
> +              * Well worth it to allow us to reconnect more quickly. */
> +             
>               OpennetManager om = node.getOpennet();
> -             if(om != null) {
> -                     int connCount = node.peers.quickCountConnectedPeers();
> -                     int minDelay = connCount == 0 ? 
> MIN_OLD_OPENNET_CONNECT_DELAY_NO_CONNS : 
MIN_OLD_OPENNET_CONNECT_DELAY;
> -                     if(logDEBUG)
> -                             Logger.debug(this, "Conns " + connCount + " 
> minDelay " + minDelay + " 
old opennet peers " + om.countOldOpennetPeers() + " last sent " + (now - 
timeLastSentOldOpennetConnectAttempt) + " startup " + (now - 
node.startupTime));
> -                     if(now - timeLastSentOldOpennetConnectAttempt > 
> minDelay &&
> -                             connCount <= 
> MIN_CONNECTIONS_TRY_OLD_OPENNET_PEERS &&
> -                             om.countOldOpennetPeers() > 0 &&
> -                             now - node.startupTime > 
> OpennetManager.DROP_STARTUP_DELAY) {
> -                             PeerNode pn = om.randomOldOpennetNode();
> -                             if(pn != null) {
> -                                     if(logMINOR)
> -                                             Logger.minor(this, "Sending 
> old-opennet connect attempt to " + pn);
> -                                     
> pn.getOutgoingMangler().sendHandshake(pn);
> -                                     timeLastSentOldOpennetConnectAttempt = 
> now;
> -                                     if(pn.noContactDetails() && 
> node.getPeerNodes().length > 0 && 
connCount > 0 && node.random.nextBoolean())
> -                                             pn.startARKFetcher();
> +             if(om != null && node.getUptime() > 30*1000) {
> +                     PeerNode[] peers = om.getOldPeers();
> +                     
> +                     for(PeerNode pn : peers) {
> +                             if(pn.timeLastConnected() <= 0)
> +                                     Logger.error(this, "Last connected is 
> zero or negative for 
old-opennet-peer "+pn);
> +                             // Will be removed by next line.
> +                             if(now - pn.timeLastConnected() > 
OpennetManager.MAX_TIME_ON_OLD_OPENNET_PEERS) {
> +                                     om.purgeOldOpennetPeer(pn);
> +                                     if(logMINOR) Logger.minor(this, 
> "Removing old opennet peer (too 
old): "+pn);
> +                                     continue;
>                               }
> +                             if(pn.isConnected()) continue; // Race 
> condition??
> +                             if(pn.noContactDetails()) {
> +                                     pn.startARKFetcher();
> +                                     continue;
> +                             }
> +                             if(pn.shouldSendHandshake()) {
> +                                     // Send handshake if necessary
> +                                     long beforeHandshakeTime = 
> System.currentTimeMillis();
> +                                     
> pn.getOutgoingMangler().sendHandshake(pn, true);
> +                                     long afterHandshakeTime = 
> System.currentTimeMillis();
> +                                     if((afterHandshakeTime - 
> beforeHandshakeTime) > (2 * 1000))
> +                                             Logger.error(this, 
> "afterHandshakeTime is more than 2 seconds past 
beforeHandshakeTime (" + (afterHandshakeTime - beforeHandshakeTime) + ") in 
PacketSender working with " + pn.userToString());
> +                             }
>                       }
> +                     
>               }
>  
>               if(now - lastClearedOldSwapChains > 10000) {
> 
> Modified: trunk/freenet/src/freenet/node/PeerManager.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/PeerManager.java   2008-12-10 00:30:31 UTC 
(rev 24161)
> +++ trunk/freenet/src/freenet/node/PeerManager.java   2008-12-10 00:35:38 UTC 
(rev 24162)
> @@ -477,7 +477,7 @@
>       /**
>        * Disconnect from a specified node
>        */
> -     public void disconnect(final PeerNode pn, boolean 
> sendDisconnectMessage, 
final boolean waitForAck) {
> +     public void disconnect(final PeerNode pn, boolean 
> sendDisconnectMessage, 
final boolean waitForAck, boolean purge) {
>               if(logMINOR)
>                       Logger.minor(this, "Disconnecting " + 
> pn.shortToString());
>               synchronized(this) {
> @@ -486,7 +486,7 @@
>               }
>               pn.notifyDisconnecting();
>               if(sendDisconnectMessage) {
> -                     Message msg = DMT.createFNPDisconnect(true, false, -1, 
> new 
ShortBuffer(new byte[0]));
> +                     Message msg = DMT.createFNPDisconnect(true, purge, -1, 
> new 
ShortBuffer(new byte[0]));
>                       try {
>                               pn.sendAsync(msg, new AsyncMessageCallback() {
>  
> @@ -1768,6 +1768,7 @@
>                               continue;
>                       count++;
>               }
> +             if(logMINOR) Logger.minor(this, "countConnectedDarknetPeers() 
returning "+count);
>               return count;
>       }
>  
> 
> Modified: trunk/freenet/src/freenet/node/PeerNode.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/PeerNode.java      2008-12-10 00:30:31 UTC 
(rev 24161)
> +++ trunk/freenet/src/freenet/node/PeerNode.java      2008-12-10 00:35:38 UTC 
(rev 24162)
> @@ -166,7 +166,7 @@
>       private boolean isRoutable;
>  
>       /** Used by maybeOnConnect */
> -     private boolean wasDisconnected;
> +     private boolean wasDisconnected = true;
>       /**
>       * ARK fetcher.
>       */
> @@ -1364,25 +1364,25 @@
>               if(isBurstOnly())
>                       return calcNextHandshakeBurstOnly(now);
>               synchronized(this) {
> -             long delay;
> -             if(unroutableOlderVersion || unroutableNewerVersion || 
> disableRouting) {
> -                     // Let them know we're here, but have no hope of 
> routing general data to 
them.
> -                     delay = Node.MIN_TIME_BETWEEN_VERSION_SENDS + 
node.random.nextInt(Node.RANDOMIZED_TIME_BETWEEN_VERSION_SENDS);
> -             } else if(invalidVersion() && !firstHandshake) {
> -                     delay = Node.MIN_TIME_BETWEEN_VERSION_PROBES + 
node.random.nextInt(Node.RANDOMIZED_TIME_BETWEEN_VERSION_PROBES);
> -             } else {
> -                     delay = Node.MIN_TIME_BETWEEN_HANDSHAKE_SENDS + 
node.random.nextInt(Node.RANDOMIZED_TIME_BETWEEN_HANDSHAKE_SENDS);
> +                     long delay;
> +                     if(unroutableOlderVersion || unroutableNewerVersion || 
> disableRouting) {
> +                             // Let them know we're here, but have no hope 
> of routing general data 
to them.
> +                             delay = Node.MIN_TIME_BETWEEN_VERSION_SENDS + 
node.random.nextInt(Node.RANDOMIZED_TIME_BETWEEN_VERSION_SENDS);
> +                     } else if(invalidVersion() && !firstHandshake) {
> +                             delay = Node.MIN_TIME_BETWEEN_VERSION_PROBES + 
node.random.nextInt(Node.RANDOMIZED_TIME_BETWEEN_VERSION_PROBES);
> +                     } else {
> +                             delay = Node.MIN_TIME_BETWEEN_HANDSHAKE_SENDS + 
node.random.nextInt(Node.RANDOMIZED_TIME_BETWEEN_HANDSHAKE_SENDS);
> +                     }
> +                     // FIXME proper multi-homing support!
> +                     delay /= (handshakeIPs == null ? 1 : 
> handshakeIPs.length);
> +                     if(delay < 3000) delay = 3000;
> +                     sendHandshakeTime = now + delay;
> +                     
> +                     if(successfulHandshakeSend)
> +                             firstHandshake = false;
> +                     handshakeCount++;
> +                     return handshakeCount == MAX_HANDSHAKE_COUNT;
>               }
> -             sendHandshakeTime = now + delay;
> -             // FIXME proper multi-homing support!
> -             delay /= (handshakeIPs == null ? 1 : handshakeIPs.length);
> -             if(delay < 3000) delay = 3000;
> -             
> -             if(successfulHandshakeSend)
> -                     firstHandshake = false;
> -             handshakeCount++;
> -             return handshakeCount == MAX_HANDSHAKE_COUNT;
> -             }
>       }
>  
>       private synchronized boolean calcNextHandshakeBurstOnly(long now) {
> @@ -1414,11 +1414,12 @@
>               return fetchARKFlag;
>       }
>  
> -     protected void calcNextHandshake(boolean successfulHandshakeSend, 
> boolean 
dontFetchARK) {
> +     protected void calcNextHandshake(boolean successfulHandshakeSend, 
> boolean 
dontFetchARK, boolean notRegistered) {
>               long now = System.currentTimeMillis();
>               boolean fetchARKFlag = false;
>               fetchARKFlag = innerCalcNextHandshake(successfulHandshakeSend, 
dontFetchARK, now);
> -             setPeerNodeStatus(now);  // Because of isBursting being set 
> above and it 
can't hurt others
> +             if(!notRegistered)
> +                     setPeerNodeStatus(now);  // Because of isBursting being 
> set above and it 
can't hurt others
>               // Don't fetch ARKs for peers we have verified (through 
> handshake) to be 
incompatible with us
>               if(fetchARKFlag && !dontFetchARK) {
>                       long arkFetcherStartTime1 = System.currentTimeMillis();
> @@ -1457,20 +1458,20 @@
>       * Call this method when a handshake request has been
>       * sent.
>       */
> -     public void sentHandshake() {
> +     public void sentHandshake(boolean notRegistered) {
>               if(logMINOR)
>                       Logger.minor(this, "sentHandshake(): " + this);
> -             calcNextHandshake(true, false);
> +             calcNextHandshake(true, false, notRegistered);
>       }
>  
>       /**
>       * Call this method when a handshake request could not be sent (i.e. no 
> IP 
address available)
>       * sent.
>       */
> -     public void couldNotSendHandshake() {
> +     public void couldNotSendHandshake(boolean notRegistered) {
>               if(logMINOR)
>                       Logger.minor(this, "couldNotSendHandshake(): " + this);
> -             calcNextHandshake(false, false);
> +             calcNextHandshake(false, false, notRegistered);
>       }
>  
>       /**
> @@ -1830,7 +1831,7 @@
>  
>               // Update sendHandshakeTime; don't send another handshake for a 
> while.
>               // If unverified, "a while" determines the timeout; if not, 
> it's just 
good practice to avoid a race below.
> -             calcNextHandshake(true, true);
> +             calcNextHandshake(true, true, false);
>               stopARKFetcher();
>               try {
>                       // First, the new noderef
> @@ -1905,7 +1906,6 @@
>                       } else if(bootIDChanged && logMINOR)
>                               Logger.minor(this, "Changed boot ID from " + 
> bootID + " to " + 
thisBootID + " for " + getPeer());
>                       this.bootID = thisBootID;
> -                     boolean newPacketTracker = false;
>                       if(currentTracker != null && 
> currentTracker.packets.trackerID == 
trackerID && !currentTracker.packets.isDeprecated()) {
>                               if(isJFK4 && !jfk4SameAsOld)
>                                       Logger.error(this, "In JFK(4), found 
> tracker ID "+trackerID+" but 
other side says is new! for "+this);
> @@ -1923,7 +1923,6 @@
>                       } else if(trackerID == -1) {
>                               // Create a new tracker unconditionally
>                               packets = new PacketTracker(this);
> -                             newPacketTracker = true;
>                               if(logMINOR) Logger.minor(this, "Creating new 
> PacketTracker as 
instructed for "+this);
>                       } else if(trackerID == -2 && !bootIDChanged) {
>                               // Reuse if not deprecated and not boot ID 
> changed
> @@ -1935,7 +1934,6 @@
>                                       if(logMINOR) Logger.minor(this, 
> "Re-using packet tracker (not given an 
ID): "+packets.trackerID+" on "+this+" from prev "+previousTracker);
>                               } else {
>                                       packets = new PacketTracker(this);
> -                                     newPacketTracker = true;
>                                       if(logMINOR) Logger.minor(this, "Cannot 
> reuse trackers (not given an 
ID) on "+this);
>                               }
>                       } else {
> @@ -1946,11 +1944,9 @@
>                                       packets = new PacketTracker(this, 
> trackerID);
>                               } else
>                                       packets = new PacketTracker(this);
> -                             newPacketTracker = true;
>                               if(logMINOR) Logger.minor(this, "Creating new 
> tracker (last resort) 
on "+this);
>                       }
>                       if(bootIDChanged) {
> -                             newPacketTracker = true;
>                               oldPrev = previousTracker;
>                               oldCur = currentTracker;
>                               previousTracker = null;
> @@ -1964,7 +1960,7 @@
>                               // else it's a rekey
>                       }
>                       newTracker = new KeyTracker(this, packets, encCipher, 
> encKey);
> -                     if(logMINOR) Logger.minor(this, "New key tracker in 
completedHandshake: "+newTracker+" for "+shortToString()+" neg 
type "+negType+" new packet tracker: "+newPacketTracker);
> +                     if(logMINOR) Logger.minor(this, "New key tracker in 
completedHandshake: "+newTracker+" for "+packets+" for "+shortToString()+" 
neg type "+negType);
>                       if(unverified) {
>                               if(unverifiedTracker != null) {
>                                       // Keep the old unverified tracker if 
> possible.
> @@ -2031,7 +2027,7 @@
>                       node.peers.disconnected(this);
>               else if(!wasARekey) {
>                       node.peers.addConnectedPeer(this);
> -                     onConnect();
> +                     maybeOnConnect();
>               }
>               
>               return packets.trackerID;
> @@ -2236,6 +2232,7 @@
>               maybeSendInitialMessages();
>               setPeerNodeStatus(now);
>               node.peers.addConnectedPeer(this);
> +             maybeOnConnect();
>               if(completelyDeprecatedTracker != null) {
>                       if(completelyDeprecatedTracker.packets != 
> tracker.packets)
>                               
> completelyDeprecatedTracker.packets.completelyDeprecated(tracker);
> @@ -3303,7 +3300,9 @@
>        * A method to be called once at the beginning of every time 
> isConnected() 
is true
>        */
>       protected void onConnect() {
> -             // Do nothing in the default impl
> +             OpennetManager om = node.getOpennet();
> +             if(om != null)
> +                     om.dropExcessPeers();
>       }
>  
>       public void onFound(long edition, FetchResult result) {
> @@ -4254,8 +4253,15 @@
>               synchronized(this) {
>                       cur = currentTracker;
>               }
> -             if(cur == null) return -1;
> -             if(cur.packets.isDeprecated()) return -1;
> +             if(cur == null) {
> +                     if(logMINOR) Logger.minor(this, 
> "getReusableTrackerID(): cur = null 
on "+this);
> +                     return -1;
> +             }
> +             if(cur.packets.isDeprecated()) {
> +                     if(logMINOR) Logger.minor(this, 
> "getReusableTrackerID(): 
cur.packets.isDeprecated on "+this);
> +                     return -1;
> +             }
> +             if(logMINOR) 
Logger.minor(this, "getReusableTrackerID(): "+cur.packets.trackerID+" 
on "+this);
>               return cur.packets.trackerID;
>       }
>  }
> 
> Modified: trunk/freenet/src/freenet/node/RequestHandler.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/RequestHandler.java        2008-12-10 
> 00:30:31 
UTC (rev 24161)
> +++ trunk/freenet/src/freenet/node/RequestHandler.java        2008-12-10 
> 00:35:38 
UTC (rev 24162)
> @@ -558,7 +558,7 @@
>       private boolean finishOpennetNoRelayInner(OpennetManager om) {
>               if(logMINOR)
>                       Logger.minor(this, "Finishing opennet: sending own 
> reference");
> -             if(!om.wantPeer(null, false, false))
> +             if(!om.wantPeer(null, false, false, false))
>                       return false; // Don't want a reference
>  
>               try {
> 
> Modified: trunk/freenet/src/freenet/node/SeedClientPeerNode.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/SeedClientPeerNode.java    2008-12-10 
00:30:31 UTC (rev 24161)
> +++ trunk/freenet/src/freenet/node/SeedClientPeerNode.java    2008-12-10 
00:35:38 UTC (rev 24162)
> @@ -85,7 +85,7 @@
>       @Override
>       public boolean disconnected(boolean dumpMessageQueue, boolean 
dumpTrackers) {
>               boolean ret = super.disconnected(dumpMessageQueue, 
> dumpTrackers);
> -             node.peers.disconnect(this, false, false);
> +             node.peers.disconnect(this, false, false, false);
>               return ret;
>       }
>  
> 
> Modified: trunk/freenet/src/freenet/node/SeedServerPeerNode.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/SeedServerPeerNode.java    2008-12-10 
00:30:31 UTC (rev 24161)
> +++ trunk/freenet/src/freenet/node/SeedServerPeerNode.java    2008-12-10 
00:35:38 UTC (rev 24162)
> @@ -73,7 +73,7 @@
>               final OpennetManager om = node.getOpennet();
>               if(om == null) {
>                       Logger.normal(this, "Opennet turned off while 
> connecting to seednodes");
> -                     node.peers.disconnect(this, true, true);
> +                     node.peers.disconnect(this, true, true, true);
>               } else {
>                       // Wait 5 seconds. Another node may connect first, we 
> don't want all the
>                       // announcements to go to the node which we connect to 
> most quickly.
> @@ -113,7 +113,7 @@
>       @Override
>       public boolean disconnected(boolean dumpMessageQueue, boolean 
dumpTrackers) {
>               boolean ret = super.disconnected(dumpMessageQueue, 
> dumpTrackers);
> -             node.peers.disconnect(this, false, false);
> +             node.peers.disconnect(this, false, false, false);
>               return ret;
>       }
>  
> 
> 
> Property changes on: 
trunk/freenet/test/freenet/support/io/MockInputStream.java
> ___________________________________________________________________
> Added: svn:mergeinfo
>    + 
> 
> _______________________________________________
> cvs mailing list
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: not available
URL: 
<https://emu.freenetproject.org/pipermail/devl/attachments/20081210/69136451/attachment.pgp>

Reply via email to