On Wednesday 03 December 2008 00:07, Daniel Cheng wrote:
> On Wed, Dec 3, 2008 at 2:51 AM,  <toad at freenetproject.org> wrote:
> > Author: toad
> > Date: 2008-12-02 18:51:25 +0000 (Tue, 02 Dec 2008)
> > New Revision: 24014
> >
> > Modified:
> >   trunk/freenet/src/freenet/node/FNPPacketMangler.java
> >   trunk/freenet/src/freenet/node/PacketTracker.java
> >   trunk/freenet/src/freenet/node/PeerNode.java
> > Log:
> > New negotiation type 3. If we connect with neg type 3, we don't change the 
PacketTracker on rekeying.
> > Should help a lot with bug #2692.
> >
> 
> Will we remove type 2 any time soon?

No. Not before 6 months IMHO. If we remove type 2 then even UOM won't work: 
nodes that have been offline for a while won't be able to auto-update, the 
user will have to manually update them.

What's a good compatibility period? 6 months? 12 months?
> 
> >
> > Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
> > ===================================================================
> > --- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2008-12-02 
13:55:19 UTC (rev 24013)
> > +++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2008-12-02 
18:51:25 UTC (rev 24014)
> > @@ -533,7 +533,7 @@
> >                        Logger.error(this, "Decrypted auth packet but 
invalid version: "+version);
> >                        return;
> >                }
> > -               if(negType != 2) {
> > +               if(!(negType == 2 || negType == 3)) {
> >                        Logger.error(this, "Unknown neg type: "+negType);
> >                        return;
> >                }
> > @@ -549,10 +549,10 @@
> >
> >                if(packetType == 0) {
> >                        // Phase 1
> > -                       processJFKMessage1(payload,4,null,replyTo, true, 
setupType);
> > +                       processJFKMessage1(payload,4,null,replyTo, true, 
setupType, negType);
> >                } else if(packetType == 2) {
> >                        // Phase 3
> > -                       processJFKMessage3(payload, 4, null, replyTo, 
false, true, setupType);
> > +                       processJFKMessage3(payload, 4, null, replyTo, 
false, true, setupType, negType);
> >                } else {
> >                        Logger.error(this, "Invalid phase "+packetType+" 
for anonymous-initiator (we are the responder)");
> >                }
> > @@ -577,7 +577,7 @@
> >                        Logger.error(this, "Decrypted auth packet but 
invalid version: "+version);
> >                        return;
> >                }
> > -               if(negType != 2) {
> > +               if(!(negType == 2 || negType == 3)) {
> >                        Logger.error(this, "Unknown neg type: "+negType);
> >                        return;
> >                }
> > @@ -593,10 +593,10 @@
> >
> >                if(packetType == 1) {
> >                        // Phase 2
> > -                       processJFKMessage2(payload, 4, pn, replyTo, true, 
setupType);
> > +                       processJFKMessage2(payload, 4, pn, replyTo, true, 
setupType, negType);
> >                } else if(packetType == 3) {
> >                        // Phase 4
> > -                       processJFKMessage4(payload, 4, pn, replyTo, false, 
true, setupType);
> > +                       processJFKMessage4(payload, 4, pn, replyTo, false, 
true, setupType, negType);
> >                } else {
> >                        Logger.error(this, "Invalid phase "+packetType+" 
for anonymous-initiator (we are the responder)");
> >                }
> > @@ -642,7 +642,7 @@
> >                } else if (negType == 1) {
> >                        Logger.error(this, "Old StationToStation (negType 
1) not supported.");
> >                        return;
> > -               } else if (negType==2){
> > +               } else if (negType==2 || negType == 3){ // negType == 3 => 
no new PacketTracker when rekeying
> >                        /*
> >                         * We implement Just Fast Keying key management 
protocol with active identity protection
> >                         * for the initiator and no identity protection for 
the responder
> > @@ -673,7 +673,7 @@
> >                                 * session key will be different,can be 
used to differentiate between
> >                                 * parallel sessions
> >                                 */
> > -                               processJFKMessage1
(payload,3,pn,replyTo,false,-1);
> > +                               processJFKMessage1
(payload,3,pn,replyTo,false,-1,negType);
> >
> >                        }
> >                        else if(packetType==1){
> > @@ -682,7 +682,7 @@
> >                                 * nonce and an authenticator calculated 
from a transient hash key private
> >                                 * to the responder.
> >                                 */
> > -                               processJFKMessage2
(payload,3,pn,replyTo,false,-1);
> > +                               processJFKMessage2
(payload,3,pn,replyTo,false,-1,negType);
> >                        }
> >                        else if(packetType==2){
> >                                /*
> > @@ -690,7 +690,7 @@
> >                                 * cached by the Responder.Receiving a 
duplicate message simply causes
> >                                 * the responder to Re-transmit the 
corresponding message4
> >                                 */
> > -                               processJFKMessage3(payload, 3, pn, 
replyTo, oldOpennetPeer, false, -1);
> > +                               processJFKMessage3(payload, 3, pn, 
replyTo, oldOpennetPeer, false, -1, negType);
> >                        }
> >                        else if(packetType==3){
> >                                /*
> > @@ -698,7 +698,7 @@
> >                                 * using the same keys as in the previous 
message.
> >                                 * The signature is non-message recovering
> >                                 */
> > -                               processJFKMessage4(payload, 3, pn, 
replyTo, oldOpennetPeer, false, -1);
> > +                               processJFKMessage4(payload, 3, pn, 
replyTo, oldOpennetPeer, false, -1, negType);
> >                        }
> >                } else {
> >                        Logger.error(this, "Decrypted auth packet but 
unknown negotiation type "+negType+" from "+replyTo+" possibly from "+pn);
> > @@ -729,7 +729,7 @@
> >         * ACM Transactions on Information and System Security, Vol 7 No 2, 
May 2004, Pages 1-30.
> >         *
> >         */
> > -       private void processJFKMessage1(byte[] payload,int offset,PeerNode 
pn,Peer replyTo, boolean unknownInitiator, int setupType)
> > +       private void processJFKMessage1(byte[] payload,int offset,PeerNode 
pn,Peer replyTo, boolean unknownInitiator, int setupType, int negType)
> >        {
> >                long t1=System.currentTimeMillis();
> >                if(logMINOR) Logger.minor(this, "Got a JFK(1) message, 
processing it - "+pn);
> > @@ -760,7 +760,7 @@
> >
> >                NativeBigInteger _hisExponential = new 
NativeBigInteger(1,hisExponential);
> >                
if(DiffieHellman.checkDHExponentialValidity(this.getClass(), 
_hisExponential)) {
> > -                       sendJFKMessage2(nonceInitiator, hisExponential, 
pn, replyTo, unknownInitiator, setupType);
> > +                       sendJFKMessage2(nonceInitiator, hisExponential, 
pn, replyTo, unknownInitiator, setupType, negType);
> >                }else
> >                        Logger.error(this, "We can't accept the 
exponential "+pn+" sent us!! REDFLAG: IT CAN'T HAPPEN UNLESS AGAINST AN 
ACTIVE ATTACKER!!");
> >
> > @@ -777,7 +777,7 @@
> >         * know the responder in all cases.
> >         * @param replyTo The peer to send the actual packet to.
> >         */
> > -       private void sendJFKMessage1(PeerNode pn, Peer replyTo, boolean 
unknownInitiator, int setupType) {
> > +       private void sendJFKMessage1(PeerNode pn, Peer replyTo, boolean 
unknownInitiator, int setupType, int negType) {
> >                if(logMINOR) Logger.minor(this, "Sending a JFK(1) message 
to "+replyTo+" for "+pn.getPeer());
> >                final long now = System.currentTimeMillis();
> >                DiffieHellmanLightContext ctx = (DiffieHellmanLightContext) 
pn.getKeyAgreementSchemeContext();
> > @@ -804,9 +804,9 @@
> >                if(unknownInitiator) {
> >                        offset += modulusLength;
> >                        System.arraycopy(pn.identityHash, 0, message1, 
offset, pn.identityHash.length);
> > -                       
sendAnonAuthPacket(1,2,0,setupType,message1,pn,replyTo,pn.anonymousInitiatorSetupCipher);
> > +                       
sendAnonAuthPacket(1,negType,0,setupType,message1,pn,replyTo,pn.anonymousInitiatorSetupCipher);
> >                } else {
> > -                       sendAuthPacket(1,2,0,message1,pn,replyTo);
> > +                       sendAuthPacket(1,negType,0,message1,pn,replyTo);
> >                }
> >                long t2=System.currentTimeMillis();
> >                if((t2-now)>500)
> > @@ -824,7 +824,7 @@
> >         * @param pn The node to encrypt the message for. CAN BE NULL if 
anonymous-initiator.
> >         * @param replyTo The peer to send the packet to.
> >         */
> > -       private void sendJFKMessage2(byte[] nonceInitator, byte[] 
hisExponential, PeerNode pn, Peer replyTo, boolean unknownInitiator, int 
setupType) {
> > +       private void sendJFKMessage2(byte[] nonceInitator, byte[] 
hisExponential, PeerNode pn, Peer replyTo, boolean unknownInitiator, int 
setupType, int negType) {
> >                if(logMINOR) Logger.minor(this, "Sending a JFK(2) message 
to "+pn);
> >                DiffieHellmanLightContext ctx = 
getLightDiffieHellmanContext();
> >                // g^r
> > @@ -857,9 +857,9 @@
> >                System.arraycopy(authenticator, 0, message2, offset, 
HASH_LENGTH);
> >
> >                if(unknownInitiator)
> > -                       
sendAnonAuthPacket(1,2,1,setupType,message2,pn,replyTo,crypto.anonSetupCipher);
> > +                       
sendAnonAuthPacket(1,negType,1,setupType,message2,pn,replyTo,crypto.anonSetupCipher);
> >                else
> > -                       sendAuthPacket(1,2,1,message2,pn,replyTo);
> > +                       sendAuthPacket(1,negType,1,message2,pn,replyTo);
> >        }
> >
> >        /*
> > @@ -896,7 +896,7 @@
> >         * @param pn The peerNode we are talking to. Cannot be null as we 
are the initiator.
> >         */
> >
> > -       private void processJFKMessage2(byte[] payload,int 
inputOffset,PeerNode pn,Peer replyTo, boolean unknownInitiator, int 
setupType)
> > +       private void processJFKMessage2(byte[] payload,int 
inputOffset,PeerNode pn,Peer replyTo, boolean unknownInitiator, int 
setupType, int negType)
> >        {
> >                long t1=System.currentTimeMillis();
> >                if(logMINOR) Logger.minor(this, "Got a JFK(2) message, 
processing it - "+pn.getPeer());
> > @@ -939,7 +939,7 @@
> >                }
> >                if(message3 != null) {
> >                        Logger.normal(this, "We replayed a message from the 
cache (shouldn't happen often) - "+pn.getPeer());
> > -                       sendAuthPacket(1, 2, 3, (byte[]) message3, pn, 
replyTo);
> > +                       sendAuthPacket(1, negType, 3, (byte[]) message3, 
pn, replyTo);
> >                        return;
> >                }
> >
> > @@ -977,7 +977,7 @@
> >                // At this point we know it's from the peer, so we can 
report a packet received.
> >                pn.receivedPacket(true, false);
> >
> > -               sendJFKMessage3(1, 2, 3, nonceInitiator, nonceResponder, 
hisExponential, authenticator, pn, replyTo, unknownInitiator, setupType);
> > +               sendJFKMessage3(1, negType, 3, nonceInitiator, 
nonceResponder, hisExponential, authenticator, pn, replyTo, unknownInitiator, 
setupType);
> >
> >                long t2=System.currentTimeMillis();
> >                if((t2-t1)>500)
> > @@ -1008,7 +1008,7 @@
> >         * responder.
> >         * @return byte Message3
> >         */
> > -       private void processJFKMessage3(byte[] payload, int inputOffset, 
PeerNode pn,Peer replyTo, boolean oldOpennetPeer, boolean unknownInitiator, 
int setupType)
> > +       private void processJFKMessage3(byte[] payload, int inputOffset, 
PeerNode pn,Peer replyTo, boolean oldOpennetPeer, boolean unknownInitiator, 
int setupType, int negType)
> >        {
> >                final long t1 = System.currentTimeMillis();
> >                if(logMINOR) Logger.minor(this, "Got a JFK(3) message, 
processing it - "+pn);
> > @@ -1071,9 +1071,9 @@
> >                        // We are replaying a JFK(4).
> >                        // Therefore if it is anon-initiator it is 
encrypted with our setup key.
> >                        if(unknownInitiator)
> > -                               sendAnonAuthPacket(1,2,3,setupType, 
(byte[]) message4, null, replyTo, crypto.anonSetupCipher);
> > +                               sendAnonAuthPacket(1,negType,3,setupType, 
(byte[]) message4, null, replyTo, crypto.anonSetupCipher);
> >                        else
> > -                               sendAuthPacket(1, 2, 3, (byte[]) message4, 
pn, replyTo);
> > +                               sendAuthPacket(1, negType, 3, (byte[]) 
message4, pn, replyTo);
> >                        return;
> >                } else {
> >                        if(logDEBUG) Logger.debug(this, "No message4 found 
for "+HexUtil.bytesToHex(authenticator)+" 
responderExponential "+Fields.hashCode(responderExponential)+" 
initiatorExponential "+Fields.hashCode(initiatorExponential)+" 
nonceResponder "+Fields.hashCode(nonceResponder)+" 
nonceInitiator "+Fields.hashCode(nonceInitiator)+" 
address "+HexUtil.bytesToHex(replyTo.getAddress().getAddress()));
> > @@ -1155,7 +1155,7 @@
> >                pn.receivedPacket(true, false);
> >
> >                // Send reply
> > -               sendJFKMessage4(1, 2, 3, nonceInitiator, 
nonceResponder,initiatorExponential, responderExponential,
> > +               sendJFKMessage4(1, negType, 3, nonceInitiator, 
nonceResponder,initiatorExponential, responderExponential,
> >                                c, Ke, Ka, authenticator, hisRef, pn, 
replyTo, unknownInitiator, setupType);
> >
> >                c.initialize(Ks);
> > @@ -1175,7 +1175,7 @@
> >                        // wantPeer will call node.peers.addPeer(), we 
don't have to.
> >                }
> >
> > -               if(pn.completedHandshake(bootID, hisRef, 0, hisRef.length, 
c, Ks, replyTo, true)) {
> > +               if(pn.completedHandshake(bootID, hisRef, 0, hisRef.length, 
c, Ks, replyTo, true, negType)) {
> >                        if(dontWant)
> >                                node.peers.disconnect(pn, true, false);
> >                        else
> > @@ -1240,7 +1240,7 @@
> >         * @param pn The PeerNode we are talking to. Cannot be null as we 
are the initiator.
> >         * @param replyTo The Peer we are replying to.
> >         */
> > -       private boolean processJFKMessage4(byte[] payload, int 
inputOffset, PeerNode pn, Peer replyTo, boolean oldOpennetPeer, boolean 
unknownInitiator, int setupType)
> > +       private boolean processJFKMessage4(byte[] payload, int 
inputOffset, PeerNode pn, Peer replyTo, boolean oldOpennetPeer, boolean 
unknownInitiator, int setupType, int negType)
> >        {
> >                final long t1 = System.currentTimeMillis();
> >                if(logMINOR) Logger.minor(this, "Got a JFK(4) message, 
processing it - "+pn.getPeer());
> > @@ -1370,7 +1370,7 @@
> >
> >                // We change the key
> >                c.initialize(pn.jfkKs);
> > -               if(pn.completedHandshake(bootID, data, 8, data.length - 8, 
c, pn.jfkKs, replyTo, false)) {
> > +               if(pn.completedHandshake(bootID, data, 8, data.length - 8, 
c, pn.jfkKs, replyTo, false, negType)) {
> >                        if(dontWant)
> >                                node.peers.disconnect(pn, true, false);
> >                        else
> > @@ -1411,7 +1411,7 @@
> >         * @param replyTo The Peer to send the packet to.
> >         */
> >
> > -       private void sendJFKMessage3(int version,int negType,int 
phase,byte[] nonceInitiator,byte[] nonceResponder,byte[] hisExponential, 
byte[] authenticator, final PeerNode pn, final Peer replyTo, final boolean 
unknownInitiator, final int setupType)
> > +       private void sendJFKMessage3(int version,final int negType,int 
phase,byte[] nonceInitiator,byte[] nonceResponder,byte[] hisExponential, 
byte[] authenticator, final PeerNode pn, final Peer replyTo, final boolean 
unknownInitiator, final int setupType)
> >        {
> >                if(logMINOR) Logger.minor(this, "Sending a JFK(3) message 
to "+pn.getPeer());
> >                long t1=System.currentTimeMillis();
> > @@ -1503,18 +1503,18 @@
> >                                authenticatorCache.put(new 
ByteArrayWrapper(authenticator),message3);
> >                }
> >                if(unknownInitiator)
> > -                       sendAnonAuthPacket(1, 2, 2, setupType, message3, 
pn, replyTo, pn.anonymousInitiatorSetupCipher);
> > +                       sendAnonAuthPacket(1, negType, 2, setupType, 
message3, pn, replyTo, pn.anonymousInitiatorSetupCipher);
> >                else
> > -                       sendAuthPacket(1, 2, 2, message3, pn, replyTo);
> > +                       sendAuthPacket(1, negType, 2, message3, pn, 
replyTo);
> >
> >                /* Re-send the packet after 5sec if we don't get any reply 
*/
> >                node.getTicker().queueTimedJob(new Runnable() {
> >                        public void run() {
> >                                if(pn.timeLastConnected() >= 
pn.lastReceivedPacketTime()) {
> >                                        if(unknownInitiator)
> > -                                               sendAnonAuthPacket(1, 2, 
2, setupType, message3, pn, replyTo, pn.anonymousInitiatorSetupCipher);
> > +                                               sendAnonAuthPacket(1, 
negType, 2, setupType, message3, pn, replyTo, 
pn.anonymousInitiatorSetupCipher);
> >                                        else
> > -                                               sendAuthPacket(1, 2, 2, 
message3, pn, replyTo);
> > +                                               sendAuthPacket(1, negType, 
2, message3, pn, replyTo);
> >                                }
> >                        }
> >                }, 5*1000);
> > @@ -1599,9 +1599,9 @@
> >                }
> >
> >                if(unknownInitiator)
> > -                       sendAnonAuthPacket(1, 2, 3, setupType, message4, 
pn, replyTo, crypto.anonSetupCipher);
> > +                       sendAnonAuthPacket(1, negType, 3, setupType, 
message4, pn, replyTo, crypto.anonSetupCipher);
> >                else
> > -                       sendAuthPacket(1, 2, 3, message4, pn, replyTo);
> > +                       sendAuthPacket(1, negType, 3, message4, pn, 
replyTo);
> >                long t2=System.currentTimeMillis();
> >                if((t2-t1)>500)
> >                        Logger.error(this,"Message4 timeout error:Sending 
packet for"+pn.getPeer());
> > @@ -2774,7 +2774,7 @@
> >                        pn.couldNotSendHandshake();
> >                        return;
> >                }
> > -               sendJFKMessage1(pn, peer, pn.handshakeUnknownInitiator(), 
pn.handshakeSetupType());
> > +               sendJFKMessage1(pn, peer, pn.handshakeUnknownInitiator(), 
pn.handshakeSetupType(), negType);
> >                if(logMINOR)
> >                        Logger.minor(this, "Sending handshake to "+peer+" 
for "+pn);
> >                pn.sentHandshake();
> > @@ -2794,7 +2794,7 @@
> >        }
> >
> >        public int[] supportedNegTypes() {
> > -               return new int[] { 2 };
> > +               return new int[] { 2, 3 };
> >        }
> >
> >        public int fullHeadersLengthOneMessage() {
> >
> > Modified: trunk/freenet/src/freenet/node/PacketTracker.java
> > ===================================================================
> > --- trunk/freenet/src/freenet/node/PacketTracker.java   2008-12-02 
13:55:19 UTC (rev 24013)
> > +++ trunk/freenet/src/freenet/node/PacketTracker.java   2008-12-02 
18:51:25 UTC (rev 24014)
> > @@ -107,6 +107,7 @@
> >         */
> >        public void deprecated() {
> >                logMINOR = Logger.shouldLog(Logger.MINOR, this);
> > +               if(logMINOR) Logger.minor(this, "Deprecated: "+this);
> >                isDeprecated = true;
> >                sentPacketsContents.interrupt();
> >        }
> > @@ -1009,6 +1010,10 @@
> >         * *** Must only be called if the KeyTracker is not to be kept. 
Otherwise, we may receive some packets twice. ***
> >         */
> >        public void completelyDeprecated(KeyTracker newTracker) {
> > +               if(newTracker.packets == this) {
> > +                       Logger.error(this, "Completely deprecated in 
favour of self!");
> > +                       return;
> > +               }
> >                if(logMINOR)
> >                        Logger.minor(this, "Completely deprecated: " + this 
+ " in favour of " + newTracker);
> >                LimitedRangeIntByteArrayMapElement[] elements = clear();
> >
> > Modified: trunk/freenet/src/freenet/node/PeerNode.java
> > ===================================================================
> > --- trunk/freenet/src/freenet/node/PeerNode.java        2008-12-02 
13:55:19 UTC (rev 24013)
> > +++ trunk/freenet/src/freenet/node/PeerNode.java        2008-12-02 
18:51:25 UTC (rev 24014)
> > @@ -1805,7 +1805,7 @@
> >        * @param replyTo The IP the handshake came in on.
> >        * @return True unless we rejected the handshake, or it failed to 
parse.
> >        */
> > -       public boolean completedHandshake(long thisBootID, byte[] data, 
int offset, int length, BlockCipher encCipher, byte[] encKey, Peer replyTo, 
boolean unverified) {
> > +       public boolean completedHandshake(long thisBootID, byte[] data, 
int offset, int length, BlockCipher encCipher, byte[] encKey, Peer replyTo, 
boolean unverified, int negType) {
> >                logMINOR = Logger.shouldLog(Logger.MINOR, PeerNode.class);
> >                long now = System.currentTimeMillis();
> >
> > @@ -1852,15 +1852,13 @@
> >                        routable = false;
> >                } else
> >                        older = false;
> > -               PacketTracker packets = new PacketTracker(this);
> > -               KeyTracker newTracker = new KeyTracker(this, packets, 
encCipher, encKey);
> > -               if(logMINOR) Logger.minor(this, "New key tracker in 
completedHandshake: "+newTracker+" for "+shortToString());
> >                changedIP(replyTo);
> >                boolean bootIDChanged = false;
> >                boolean wasARekey = false;
> >                KeyTracker oldPrev = null;
> >                KeyTracker oldCur = null;
> >                KeyTracker prev = null;
> > +               KeyTracker newTracker;
> >                MessageItem[] messagesTellDisconnected = null;
> >                synchronized(this) {
> >                        handshakeCount = 0;
> > @@ -1887,7 +1885,11 @@
> >                        } else if(bootIDChanged && logMINOR)
> >                                Logger.minor(this, "Changed boot ID from " 
+ bootID + " to " + thisBootID + " for " + getPeer());
> >                        this.bootID = thisBootID;
> > +                       PacketTracker packets;
> > +                       boolean newPacketTracker = false;
> >                        if(bootIDChanged) {
> > +                               packets = new PacketTracker(this);
> > +                               newPacketTracker = true;
> >                                oldPrev = previousTracker;
> >                                oldCur = currentTracker;
> >                                previousTracker = null;
> > @@ -1897,7 +1899,22 @@
> >                                // connection initial messages by 
maybeOnConnect().
> >                                messagesTellDisconnected = 
grabQueuedMessageItems();
> >                                this.offeredMainJarVersion = 0;
> > -                       } // else it's a rekey
> > +                       } else {
> > +                               // else it's a rekey
> > +                               if(currentTracker != null && 
currentTracker.packets.isDeprecated()) {
> > +                                       packets = new PacketTracker(this);
> > +                                       newPacketTracker = true;
> > +                               } else if(currentTracker != null && 
negType >= 3)
> > +                                       packets = currentTracker.packets;
> > +                               else if(previousTracker != null && negType 
>= 3)
> > +                                       packets = previousTracker.packets;
> > +                               else {
> > +                                       packets = new PacketTracker(this);
> > +                                       newPacketTracker = true;
> > +                               }
> > +                       }
> > +                       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(unverified) {
> >                                if(unverifiedTracker != null) {
> >                                        // Keep the old unverified tracker 
if possible.
> > @@ -1941,11 +1958,11 @@
> >                        node.lm.lostOrRestartedNode(this);
> >                        node.usm.onRestart(this);
> >                }
> > -               if(oldPrev != null)
> > +               if(oldPrev != null && oldPrev.packets != 
newTracker.packets)
> >                        oldPrev.packets.completelyDeprecated(newTracker);
> > -               if(oldCur != null)
> > +               if(oldCur != null && oldCur.packets != newTracker.packets)
> >                        oldCur.packets.completelyDeprecated(newTracker);
> > -               if(prev != null)
> > +               if(prev != null && prev.packets != newTracker.packets)
> >                        prev.packets.deprecated();
> >        PacketThrottle throttle;
> >        synchronized(this) {
> > @@ -1979,6 +1996,7 @@
> >         */
> >        private synchronized void maybeSwapTrackers() {
> >                if(currentTracker == null || previousTracker == null) 
return;
> > +               if(currentTracker.packets == previousTracker.packets) 
return;
> >                long delta = Math.abs(currentTracker.packets.createdTime - 
previousTracker.packets.createdTime);
> >                if(previousTracker != null && 
(!previousTracker.packets.isDeprecated()) &&
> >                                delta < 
CHECK_FOR_SWAPPED_TRACKERS_INTERVAL) {
> > @@ -2006,9 +2024,9 @@
> >                                KeyTracker temp = previousTracker;
> >                                previousTracker = currentTracker;
> >                                currentTracker = temp;
> > -                               if(logMINOR) Logger.minor(this, "Swapped 
KeyTracker's on "+this+" cur "+currentTracker+" prev "+previousTracker);
> > +                               if(logMINOR) Logger.minor(this, "Swapped 
KeyTracker's on "+this+" cur "+currentTracker+" prev "+previousTracker+" 
delta "+delta+" cur.deprecated="+currentTracker.packets.isDeprecated()+" 
prev.deprecated="+previousTracker.packets.isDeprecated());
> >                        } else {
> > -                               if(logMINOR) Logger.minor(this, "Not 
swapping KeyTracker's on "+this+" cur "+currentTracker+" 
prev "+previousTracker);
> > +                               if(logMINOR) Logger.minor(this, "Not 
swapping KeyTracker's on "+this+" cur "+currentTracker+" 
prev "+previousTracker+" delta "+delta+" 
cur.deprecated="+currentTracker.packets.isDeprecated()+" 
prev.deprecated="+previousTracker.packets.isDeprecated());
> >                        }
> >                } else {
> >                        if (logMINOR)
> > @@ -2160,7 +2178,7 @@
> >                                peerAddedTime = 0;  // don't store anymore
> >                                ctx = null;
> >                                maybeSwapTrackers();
> > -                               if(previousTracker != null)
> > +                               if(previousTracker != null && 
previousTracker.packets != currentTracker.packets)
> >                                        
previousTracker.packets.deprecated();
> >                        } else
> >                                return;
> >
> > _______________________________________________
> > cvs mailing list
> > cvs at freenetproject.org
> > http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
> >
> _______________________________________________
> Devl mailing list
> Devl at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
> 
> 
-------------- 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/20081203/8f27d189/attachment.pgp>

Reply via email to