Author: zothar
Date: 2006-05-24 23:44:20 +0000 (Wed, 24 May 2006)
New Revision: 8860

Modified:
   trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/PacketSender.java
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
- DarknetConnectionsToadlet no longer "computes" the status of a node, but 
instead gets it from a new status tracking variable on PeerNode
- The current CONNECTED/DISCONNECTED/etc status is now logged at level MINOR 
once per second
- Several reasons for our node rejecting a peer are now logged at level MINOR


Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-05-24 21:58:12 UTC (rev 8859)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-05-24 23:44:20 UTC (rev 8860)
@@ -110,12 +110,6 @@
                        buf.append(buf2);
                }
                else {
-                       final Integer CONNECTED = new Integer(0);
-                       final Integer BACKED_OFF = new Integer(1);
-                       final Integer TOO_NEW = new Integer(2);
-                       final Integer INCOMPATIBLE = new Integer(3);
-                       final Integer DISCONNECTED = new Integer(4);
-                       
                        int numberOfConnected = 0;
                        int numberOfBackedOff = 0;
                        int numberOfTooNew = 0;
@@ -135,20 +129,7 @@
                                Object[] row = new Object[9];  // where [0] is 
the pn object!
                                rows[i] = row;

-                               Object status;
-                               if(pn.isConnected()) {
-                                       status = CONNECTED;
-                                       if(routingBackedOffNow) {
-                                               status = BACKED_OFF;
-                                       }
-                               } else if(pn.hasCompletedHandshake() && 
pn.isVerifiedIncompatibleNewerVersion()) {
-                                       status = TOO_NEW;
-                               } else if(pn.hasCompletedHandshake() && 
!Version.checkGoodVersion(pn.getVersion())) {
-                                       status = INCOMPATIBLE;
-                               } else {
-                                       status = DISCONNECTED;
-                               }
-                               
+                               Object status = new 
Integer(pn.getPeerNodeStatus());
                                String lastBackoffReasonOutputString = "/";
                                String backoffReason = 
pn.getLastBackoffReason();
                                if( backoffReason != null ) {
@@ -182,24 +163,24 @@
                        // Convert status codes into status strings
                        for(int i=0;i<rows.length;i++) {
                                Object[] row = rows[i];
-                               Integer x = (Integer) row[1];
-                               if(x == CONNECTED) {
+                               int x = ((Integer) row[1]).intValue();
+                               if(x == Node.PEER_NODE_STATUS_CONNECTED) {
                                        row[1] = "<span 
class=\"peer_connected\">CONNECTED</span>";
                                        numberOfConnected++;
                                }
-                               else if(x == BACKED_OFF) {
+                               else if(x == 
Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF) {
                                        row[1] = "<span 
class=\"peer_backedoff\">BACKED OFF</span>";
                                        numberOfBackedOff++;
                                }
-                               else if(x == TOO_NEW) {
+                               else if(x == Node.PEER_NODE_STATUS_TOO_NEW) {
                                        row[1] = "<span 
class=\"peer_too_new\">TOO NEW</span>";
                                        numberOfTooNew++;
                                }
-                               else if(x == INCOMPATIBLE) {
+                               else if(x == Node.PEER_NODE_STATUS_TOO_OLD) {
                                        row[1] = "<span 
class=\"peer_incompatible\">INCOMPATIBLE</span>";
                                        numberOfIncompatible++;
                                }
-                               else if(x == DISCONNECTED) {
+                               else if(x == 
Node.PEER_NODE_STATUS_DISCONNECTED) {
                                        row[1] = "<span 
class=\"peer_disconnected\">DISCONNECTED</span>";
                                        numberOfDisconnected++;
                                }

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-05-24 21:58:12 UTC (rev 
8859)
+++ trunk/freenet/src/freenet/node/Node.java    2006-05-24 23:44:20 UTC (rev 
8860)
@@ -464,8 +464,24 @@
     private long myARKNumber;
     /** FetcherContext for ARKs */
     public final FetcherContext arkFetcherContext;
+    /** ARK currently inserting? */
+    private boolean arkCurrentlyInserting = false;
     /** ARKFetcher's currently running, by identity */
     private final HashMap arkFetchers;
+    /** Next time to log the PeerNode status summary */
+    private long nextPeerNodeStatusLogTime = -1;
+    /** PeerNode status summary log interval (milliseconds) */
+    private final long peerNodeStatusLogInterval = 1000;
+    /** PeerNodes in CONNECTED status, by identity */
+    private final HashMap statusConnectedPeerNodes;
+    /** PeerNodes in BACKED_OFF status, by identity */
+    private final HashMap statusRoutingBackedOffPeerNodes;
+    /** PeerNodes in TOO_NEW status, by identity */
+    private final HashMap statusTooNewPeerNodes;
+    /** PeerNodes in INCOMPATIBLE status, by identity */
+    private final HashMap statusTooOldPeerNodes;
+    /** PeerNodes in DISCONNECTED status, by identity */
+    private final HashMap statusDisconnectedPeerNodes;

     private final HashSet runningUIDs;

@@ -514,6 +530,11 @@
        static final int EXIT_COULD_NOT_START_TMCI = 19;
        public static final int EXIT_DATABASE_REQUIRES_RESTART = 20;
        public static final int EXIT_COULD_NOT_START_UPDATER = 21;
+    public static final int PEER_NODE_STATUS_CONNECTED = 1;
+    public static final int PEER_NODE_STATUS_ROUTING_BACKED_OFF = 2;
+    public static final int PEER_NODE_STATUS_TOO_NEW = 3;
+    public static final int PEER_NODE_STATUS_TOO_OLD = 4;
+    public static final int PEER_NODE_STATUS_DISCONNECTED = 5;

     public final long bootID;
     public final long startupTime;
@@ -856,6 +877,11 @@
         transferringRequestSenders = new HashMap();
         insertSenders = new HashMap();
         arkFetchers = new HashMap();
+        statusConnectedPeerNodes = new HashMap();
+        statusRoutingBackedOffPeerNodes = new HashMap();
+        statusTooNewPeerNodes = new HashMap();
+        statusTooOldPeerNodes = new HashMap();
+        statusDisconnectedPeerNodes = new HashMap();
         runningUIDs = new HashSet();
         ps = new PacketSender(this);
         // FIXME maybe these should persist? They need to be private though, 
so after the node/peers split. (bug 51).
@@ -1821,11 +1847,13 @@
                        lastAcceptedRequest = now;
                        return false;
                }
+               Logger.minor( this, "shouldRejectRequest() == true because 
>MAX_PING_TIME");
                return true;
        }
        if(pingTime > SUB_MAX_PING_TIME) {
                double x = (pingTime - SUB_MAX_PING_TIME) / (MAX_PING_TIME - 
SUB_MAX_PING_TIME);
                if(random.nextDouble() < x)
+                       Logger.minor( this, "shouldRejectRequest() == true 
because >SUB_MAX_PING_TIME");
                        return true;
        }

@@ -1837,11 +1865,13 @@
                        lastAcceptedRequest = now;
                        return false;
                }
+               Logger.minor( this, "shouldRejectRequest() == true because 
>MAX_THROTTLE_DELAY");
                return true;
        }
        if(bwlimitDelayTime > SUB_MAX_THROTTLE_DELAY) {
                double x = (pingTime - SUB_MAX_THROTTLE_DELAY) / 
(MAX_THROTTLE_DELAY - SUB_MAX_THROTTLE_DELAY);
                if(random.nextDouble() < x)
+                       Logger.minor( this, "shouldRejectRequest() == true 
because >SUB_MAX_THROTTLE_DELAY");
                        return true;
        }

@@ -2642,7 +2672,7 @@
                return Fields.hashCode(identityHash);
        }

-       public boolean setNewestPeerLastGoodVersion( int version ) {
+       public synchronized boolean setNewestPeerLastGoodVersion( int version ) 
{
                if( version > buildOldAgeUserAlert.lastGoodVersion ) {
                        if( buildOldAgeUserAlert.lastGoodVersion == 0 ) {
                                alerts.register(buildOldAgeUserAlert);
@@ -2675,7 +2705,7 @@
     }

     /**
-     * How many ARK Fetchers are currently requesting ARKs?
+     * How many ARKFetchers are currently requesting ARKs?
      */
     public int getNumARKFetchers() {
                return arkFetchers.size();
@@ -2695,4 +2725,194 @@
                Logger.error(this, "Removed "+af+" should be "+fetcher+" for 
"+identity+" in removeARKFetcher");
        }
     }
+
+    /**
+     * Add a connected peer to the map
+     */
+    public synchronized void addStatusConnectedPeerNode(String identity, 
PeerNode peerNode) {
+       if(statusConnectedPeerNodes.containsKey(identity)) {
+               PeerNode pn = (PeerNode) statusConnectedPeerNodes.get(identity);
+               Logger.error(this, "addStatusConnectedPeerNode(): identity 
'"+identity+"' already in statusConnectedPeerNodes as "+pn+" and you want to 
add"+peerNode);
+               return;
+       }
+       Logger.minor(this, "addStatusConnectedPeerNode(): adding PeerNode for 
"+identity);
+       statusConnectedPeerNodes.put(identity, peerNode);
+    }
+    
+    /**
+     * How many peers are currently connected?
+     */
+    public int getNumStatusConnectedPeerNodes() {
+               return statusConnectedPeerNodes.size();
+    }
+
+    /**
+     * Remove a connected node from the map
+     */
+    public synchronized void removeStatusConnectedPeerNode(String identity, 
PeerNode peerNode) {
+       if(!statusConnectedPeerNodes.containsKey(identity)) {
+               Logger.error(this, "removeStatusConnectedPeerNode(): identity 
'"+identity+"' not in statusConnectedPeerNodes to remove");
+               return;
+       }
+       Logger.minor(this, "removeStatusConnectedPeerNode(): removing PeerNode 
for "+identity);
+       PeerNode pn = (PeerNode) statusConnectedPeerNodes.remove(identity);
+       if(pn != peerNode) {
+               Logger.error(this, "Removed "+pn+" should be "+peerNode+" for 
"+identity+" in removeStatusConnectedPeerNode");
+       }
+    }
+
+    /**
+     * Add a routing backed off peer to the map
+     */
+    public synchronized void addStatusRoutingBackedOffPeerNode(String 
identity, PeerNode peerNode) {
+       if(statusRoutingBackedOffPeerNodes.containsKey(identity)) {
+               PeerNode pn = (PeerNode) 
statusRoutingBackedOffPeerNodes.get(identity);
+               Logger.error(this, "addStatusRoutingBackedOffPeerNode(): 
identity '"+identity+"' already in statusRoutingBackedOffPeerNodes as "+pn+" 
and you want to add"+peerNode);
+               return;
+       }
+       Logger.minor(this, "addStatusRoutingBackedOffPeerNode(): adding 
PeerNode for "+identity);
+       statusRoutingBackedOffPeerNodes.put(identity, peerNode);
+    }
+    
+    /**
+     * How many peers are currently routing backed off?
+     */
+    public int getNumStatusRoutingBackedOffPeerNodes() {
+               return statusRoutingBackedOffPeerNodes.size();
+    }
+
+    /**
+     * Remove a routing backed off node from the map
+     */
+    public synchronized void removeStatusRoutingBackedOffPeerNode(String 
identity, PeerNode peerNode) {
+       if(!statusRoutingBackedOffPeerNodes.containsKey(identity)) {
+               Logger.error(this, "removeStatusRoutingBackedOffPeerNode(): 
identity '"+identity+"' not in statusRoutingBackedOffPeerNodes to remove");
+               return;
+       }
+       Logger.minor(this, "removeStatusRoutingBackedOffPeerNode(): removing 
PeerNode for "+identity);
+       PeerNode pn = (PeerNode) 
statusRoutingBackedOffPeerNodes.remove(identity);
+       if(pn != peerNode) {
+               Logger.error(this, "Removed "+pn+" should be "+peerNode+" for 
"+identity+" in removeStatusRoutingBackedOffPeerNode");
+       }
+    }
+
+    /**
+     * Add a too new peer to the map
+     */
+    public synchronized void addStatusTooNewPeerNode(String identity, PeerNode 
peerNode) {
+       if(statusTooNewPeerNodes.containsKey(identity)) {
+               PeerNode pn = (PeerNode) statusTooNewPeerNodes.get(identity);
+               Logger.error(this, "addStatusTooNewPeerNode(): identity 
'"+identity+"' already in statusTooNewPeerNodes as "+pn+" and you want to 
add"+peerNode);
+               return;
+       }
+       Logger.minor(this, "addStatusTooNewPeerNode(): adding PeerNode for 
"+identity);
+       statusTooNewPeerNodes.put(identity, peerNode);
+    }
+    
+    /**
+     * How many peers are currently too new?
+     */
+    public int getNumStatusTooNewPeerNodes() {
+               return statusTooNewPeerNodes.size();
+    }
+
+    /**
+     * Remove a too new node from the map
+     */
+    public synchronized void removeStatusTooNewPeerNode(String identity, 
PeerNode peerNode) {
+       if(!statusTooNewPeerNodes.containsKey(identity)) {
+               Logger.error(this, "removeStatusTooNewPeerNode(): identity 
'"+identity+"' not in statusTooNewPeerNodes to remove");
+               return;
+       }
+       Logger.minor(this, "removeStatusTooNewPeerNode(): removing PeerNode for 
"+identity);
+       PeerNode pn = (PeerNode) statusTooNewPeerNodes.remove(identity);
+       if(pn != peerNode) {
+               Logger.error(this, "Removed "+pn+" should be "+peerNode+" for 
"+identity+" in removeStatusTooNewPeerNode");
+       }
+    }
+
+    /**
+     * Add a too old peer to the map
+     */
+    public synchronized void addStatusTooOldPeerNode(String identity, PeerNode 
peerNode) {
+       if(statusTooOldPeerNodes.containsKey(identity)) {
+               PeerNode pn = (PeerNode) statusTooOldPeerNodes.get(identity);
+               Logger.error(this, "addStatusTooOldPeerNode(): identity 
'"+identity+"' already in statusTooOldPeerNodes as "+pn+" and you want to 
add"+peerNode);
+               return;
+       }
+       Logger.minor(this, "addStatusTooOldPeerNode(): adding PeerNode for 
"+identity);
+       statusTooOldPeerNodes.put(identity, peerNode);
+    }
+    
+    /**
+     * How many peers are currently too old?
+     */
+    public int getNumStatusTooOldPeerNodes() {
+               return statusTooOldPeerNodes.size();
+    }
+
+    /**
+     * Remove a too old node from the map
+     */
+    public synchronized void removeStatusTooOldPeerNode(String identity, 
PeerNode peerNode) {
+       if(!statusTooOldPeerNodes.containsKey(identity)) {
+               Logger.error(this, "removeStatusTooOldPeerNode(): identity 
'"+identity+"' not in statusTooOldPeerNodes to remove");
+               return;
+       }
+       Logger.minor(this, "removeStatusTooOldPeerNode(): removing PeerNode for 
"+identity);
+       PeerNode pn = (PeerNode) statusTooOldPeerNodes.remove(identity);
+       if(pn != peerNode) {
+               Logger.error(this, "Removed "+pn+" should be "+peerNode+" for 
"+identity+" in removeStatusTooOldPeerNode");
+       }
+    }
+
+    /**
+     * Add a disconnected peer to the map
+     */
+    public synchronized void addStatusDisconnectedPeerNode(String identity, 
PeerNode peerNode) {
+       if(statusDisconnectedPeerNodes.containsKey(identity)) {
+               PeerNode pn = (PeerNode) 
statusDisconnectedPeerNodes.get(identity);
+               Logger.error(this, "addStatusDisconnectedPeerNode(): identity 
'"+identity+"' already in statusDisconnectedPeerNodes as "+pn+" and you want to 
add"+peerNode);
+               return;
+       }
+       Logger.minor(this, "addStatusDisconnectedPeerNode(): adding PeerNode 
for "+identity);
+       statusDisconnectedPeerNodes.put(identity, peerNode);
+    }
+    
+    /**
+     * How many peers are currently disconnected?
+     */
+    public int getNumStatusDisconnectedPeerNodes() {
+               return statusDisconnectedPeerNodes.size();
+    }
+
+    /**
+     * Remove a disconnected node from the map
+     */
+    public synchronized void removeStatusDisconnectedPeerNode(String identity, 
PeerNode peerNode) {
+       if(!statusDisconnectedPeerNodes.containsKey(identity)) {
+               Logger.error(this, "removeStatusDisconnectedPeerNode(): 
identity '"+identity+"' not in statusDisconnectedPeerNodes to remove");
+               return;
+       }
+       Logger.minor(this, "removeStatusDisconnectedPeerNode(): removing 
PeerNode for "+identity);
+       PeerNode pn = (PeerNode) statusDisconnectedPeerNodes.remove(identity);
+       if(pn != peerNode) {
+               Logger.error(this, "Removed "+pn+" should be "+peerNode+" for 
"+identity+" in removeStatusDisconnectedPeerNode");
+       }
+    }
+
+    /**
+     * Log the current PeerNode status summary if the timer has expired
+     */
+    public void maybeLogPeerNodeStatusSummary(long now) {
+      if(now > nextPeerNodeStatusLogTime) {
+        int numberOfConnected = getNumStatusConnectedPeerNodes();
+        int numberOfRoutingBackedOff = getNumStatusRoutingBackedOffPeerNodes();
+        int numberOfTooNew = getNumStatusTooNewPeerNodes();
+        int numberOfTooOld = getNumStatusTooOldPeerNodes();
+        int numberOfDisconnected = getNumStatusDisconnectedPeerNodes();
+        Logger.minor(this, "Connected: "+numberOfConnected+"  Routing Backed 
Off: "+numberOfRoutingBackedOff+"  Too New: "+numberOfTooNew+"  Too Old: 
"+numberOfTooOld+"  Disconnected: "+numberOfDisconnected);
+        nextPeerNodeStatusLogTime = now + peerNodeStatusLogInterval;
+      }
+    }
 }

Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java    2006-05-24 21:58:12 UTC 
(rev 8859)
+++ trunk/freenet/src/freenet/node/PacketSender.java    2006-05-24 23:44:20 UTC 
(rev 8860)
@@ -71,6 +71,7 @@
         long nextActionTime = Long.MAX_VALUE;
         for(int i=0;i<nodes.length;i++) {
             PeerNode pn = nodes[i];
+            pn.setPeerNodeStatus(now);
             lastReceivedPacketFromAnyNode =
                 Math.max(pn.lastReceivedPacketTime(), 
lastReceivedPacketFromAnyNode);
             if(pn.isConnected()) {
@@ -180,6 +181,8 @@

         // Send may have taken some time
         now = System.currentTimeMillis();
+
+        node.maybeLogPeerNodeStatusSummary(now);

         Vector jobsToRun = null;


Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-05-24 21:58:12 UTC 
(rev 8859)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-05-24 23:44:20 UTC 
(rev 8860)
@@ -209,6 +209,9 @@

     /** The time at which we last completed a connection setup. */
     private long connectedTime;
+    
+    /** The status of this peer node in terms of Node.PEER_NODE_STATUS_* */
+    public int peerNodeStatus = Node.PEER_NODE_STATUS_DISCONNECTED;

     /** Holds a String-Long pair that shows which message types (as name) have 
been send to this peer. */
     private Hashtable localNodeSentMessageTypes = new Hashtable();
@@ -557,12 +560,14 @@
      * Disconnected e.g. due to not receiving a packet for ages.
      */
     public void disconnected() {
+        long now = System.currentTimeMillis();
         Logger.normal(this, "Disconnected "+this);
         node.usm.onDisconnect(this);
         node.peers.disconnected(this);
         synchronized(this) {
                // Force renegotiation.
             isConnected = false;
+            setPeerNodeStatus(now);
             // Prevent sending packets to the node until that happens.
             if(currentTracker != null)
                currentTracker.disconnected();
@@ -910,6 +915,7 @@
      * @return True unless we rejected the handshake, or it failed to parse.
      */
     public synchronized boolean completedHandshake(long thisBootID, byte[] 
data, int offset, int length, BlockCipher encCipher, byte[] encKey, Peer 
replyTo, boolean unverified) {
+      long now = System.currentTimeMillis();
        completedHandshake = true;
        handshakeCount = 0;
        arkFetcher.stop();
@@ -923,27 +929,31 @@
             // Treat as invalid version
         }
         if(reverseInvalidVersion()) {
-            verifiedIncompatibleNewerVersion = true;
             try {
                 
node.setNewestPeerLastGoodVersion(Version.getArbitraryBuildNumber(lastGoodVersion));
             } catch (NumberFormatException e) {
                 // ignore
             }
             Logger.normal(this, "Not connecting to "+this+" - reverse invalid 
version "+Version.getVersionString()+" for peer's lastGoodversion: 
"+lastGoodVersion);
+            verifiedIncompatibleNewerVersion = true;
             isConnected = false;
+            setPeerNodeStatus(now);
             node.peers.disconnected(this);
             return false;
         } else {
             verifiedIncompatibleNewerVersion = false;
+            setPeerNodeStatus(now);
         }
         if(invalidVersion()) {
+            Logger.normal(this, "Not connecting to "+this+" - invalid version 
"+version);
             verifiedIncompatibleOlderVersion = true;
-            Logger.normal(this, "Not connecting to "+this+" - invalid version 
"+version);
             isConnected = false;
+            setPeerNodeStatus(now);
             node.peers.disconnected(this);
             return false;
         } else {
             verifiedIncompatibleOlderVersion = false;
+            setPeerNodeStatus(now);
         }
         KeyTracker newTracker = new KeyTracker(this, encCipher, encKey);
         changedIP(replyTo);
@@ -951,6 +961,7 @@
             connectedTime = System.currentTimeMillis();
             Logger.minor(this, "Changed boot ID from "+bootID+" to 
"+thisBootID);
             isConnected = false; // Will be reset below
+            setPeerNodeStatus(now);
             if(previousTracker != null) {
                 KeyTracker old = previousTracker;
                 previousTracker = null;
@@ -977,6 +988,7 @@
             if(previousTracker != null)
                 previousTracker.deprecated();
             isConnected = true;
+            setPeerNodeStatus(now);
             ctx = null;
         }
         if(!isConnected)
@@ -1027,6 +1039,7 @@
      * if necessary.
      */
     public void verified(KeyTracker tracker) {
+      long now = System.currentTimeMillis();
        synchronized(this) {
         if(tracker == unverifiedTracker) {
             Logger.minor(this, "Promoting unverified tracker "+tracker);
@@ -1039,6 +1052,7 @@
             currentTracker = unverifiedTracker;
             unverifiedTracker = null;
             isConnected = true;
+            setPeerNodeStatus(now);
             ctx = null;
             maybeSendInitialMessages();
         } else return;
@@ -1613,7 +1627,48 @@
                }
        }

+  public int getPeerNodeStatus() {
+               return peerNodeStatus;
+  }

+       public synchronized void setPeerNodeStatus(long now) {
+               int oldPeerNodeStatus = peerNodeStatus;
+               if(isConnected) {
+                       peerNodeStatus = Node.PEER_NODE_STATUS_CONNECTED;
+                       if(now < routingBackedOffUntil) {
+                               peerNodeStatus = 
Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF;
+                       }
+               } else if(completedHandshake && 
verifiedIncompatibleNewerVersion) {
+                       peerNodeStatus = Node.PEER_NODE_STATUS_TOO_NEW;
+               } else if(completedHandshake && 
verifiedIncompatibleOlderVersion) {
+                       peerNodeStatus = Node.PEER_NODE_STATUS_TOO_OLD;
+               } else {
+                       peerNodeStatus = Node.PEER_NODE_STATUS_DISCONNECTED;
+               }
+               if(peerNodeStatus != oldPeerNodeStatus) {
+                 if(oldPeerNodeStatus == Node.PEER_NODE_STATUS_CONNECTED)
+                   node.removeStatusConnectedPeerNode(getIdentityString(), 
this);
+                 else if(oldPeerNodeStatus == 
Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF)
+                   
node.removeStatusRoutingBackedOffPeerNode(getIdentityString(), this);
+                 else if(oldPeerNodeStatus == Node.PEER_NODE_STATUS_TOO_NEW)
+                   node.removeStatusTooNewPeerNode(getIdentityString(), this);
+                 else if(oldPeerNodeStatus == Node.PEER_NODE_STATUS_TOO_OLD)
+                   node.removeStatusTooOldPeerNode(getIdentityString(), this);
+                 else if(oldPeerNodeStatus == 
Node.PEER_NODE_STATUS_DISCONNECTED)
+                   node.removeStatusDisconnectedPeerNode(getIdentityString(), 
this);
+                 if(peerNodeStatus == Node.PEER_NODE_STATUS_CONNECTED)
+                   node.addStatusConnectedPeerNode(getIdentityString(), this);
+                 else if(peerNodeStatus == 
Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF)
+                   node.addStatusRoutingBackedOffPeerNode(getIdentityString(), 
this);
+                 else if(peerNodeStatus == Node.PEER_NODE_STATUS_TOO_NEW)
+                   node.addStatusTooNewPeerNode(getIdentityString(), this);
+                 else if(peerNodeStatus == Node.PEER_NODE_STATUS_TOO_OLD)
+                   node.addStatusTooOldPeerNode(getIdentityString(), this);
+                 else if(peerNodeStatus == Node.PEER_NODE_STATUS_DISCONNECTED)
+                   node.addStatusDisconnectedPeerNode(getIdentityString(), 
this);
+               }
+       }
+
        public String getIdentityString() {
        return Base64.encode(identity);
     }


Reply via email to