Author: nextgens
Date: 2008-07-10 06:57:53 +0000 (Thu, 10 Jul 2008)
New Revision: 21017

Modified:
   trunk/freenet/src/freenet/node/PeerManager.java
Log:
indent

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2008-07-10 01:45:59 UTC 
(rev 21016)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2008-07-10 06:57:53 UTC 
(rev 21017)
@@ -48,24 +48,17 @@
  * - Each peer's Location.
  */
 public class PeerManager {
-    
+
        private static boolean logMINOR;
-       
-    /** Our Node */
-    final Node node;
-    
-    /** All the peers we want to connect to */
-    PeerNode[] myPeers;
-    
-    /** All the peers we are actually connected to */
-    PeerNode[] connectedPeers;
-    
-    private String darkFilename;
-    private String openFilename;
-
-    private PeerManagerUserAlert ua;
-    
-       // Peers stuff
+       /** Our Node */
+       final Node node;
+       /** All the peers we want to connect to */
+       PeerNode[] myPeers;
+       /** All the peers we are actually connected to */
+       PeerNode[] connectedPeers;
+       private String darkFilename;
+       private String openFilename;
+       private PeerManagerUserAlert ua;        // Peers stuff
        /** age of oldest never connected peer (milliseconds) */
        private long oldestNeverConnectedPeerAge;
        /** Next time to update oldestNeverConnectedPeerAge */
@@ -100,141 +93,135 @@
        public static final int PEER_NODE_STATUS_CONN_ERROR = 12;
        public static final int PEER_NODE_STATUS_DISCONNECTING = 13;
        public static final int PEER_NODE_STATUS_ROUTING_DISABLED = 14;
-       
-    /**
-     * Create a PeerManager by reading a list of peers from
-     * a file.
-     * @param node
-     * @param filename
-     */
-    public PeerManager(Node node) {
-        Logger.normal(this, "Creating PeerManager");
-        logMINOR = Logger.shouldLog(Logger.MINOR, this);
+
+       /**
+        * Create a PeerManager by reading a list of peers from
+        * a file.
+        * @param node
+        * @param filename
+        */
+       public PeerManager(Node node) {
+               Logger.normal(this, "Creating PeerManager");
+               logMINOR = Logger.shouldLog(Logger.MINOR, this);
                peerNodeStatuses = new HashMap();
                peerNodeStatusesDarknet = new HashMap();
                peerNodeRoutingBackoffReasons = new HashMap();
-        System.out.println("Creating PeerManager");
-        myPeers = new PeerNode[0];
-        connectedPeers = new PeerNode[0];
-        this.node = node;
-    }
+               System.out.println("Creating PeerManager");
+               myPeers = new PeerNode[0];
+               connectedPeers = new PeerNode[0];
+               this.node = node;
+       }

-    /**
-     * Attempt to read a file full of noderefs. Try the file as named first, 
then the .bak if it is empty or
-     * otherwise doesn't work.
-     * @param filename The filename to read from. If this doesn't work, we try 
the .bak file.
-     * @param crypto The cryptographic identity which these nodes are 
connected to.
-     * @param opennet The opennet manager for the nodes. Only needed (for 
constructing the nodes) if isOpennet.
-     * @param isOpennet Whether the file contains opennet peers.
-     * @param oldOpennetPeers If true, don't add the nodes to the routing 
table, pass them to the opennet
-     * manager as "old peers" i.e. inactive nodes which may try to reconnect.
-     */
-    void tryReadPeers(String filename, NodeCrypto crypto, OpennetManager 
opennet, boolean isOpennet, boolean oldOpennetPeers) {
-       synchronized(writePeersSync) {
-               if(!oldOpennetPeers) {
-                       if(isOpennet) {
-                               openFilename = filename;
-                       } else {
-                               darkFilename = filename;
-                       }
-               }
-       }
-       OutgoingPacketMangler mangler = crypto.packetMangler;
-        File peersFile = new File(filename);
-        File backupFile = new File(filename+".bak");
-        // Try to read the node list from disk
-       if(peersFile.exists()) {
-               if(readPeers(peersFile, mangler, crypto, opennet, 
oldOpennetPeers)) {
-                   String msg;
-                   if(oldOpennetPeers) {
-                       msg = "Read "+opennet.countOldOpennetPeers()+" 
old-opennet-peers from "+peersFile;
-                   } else if(isOpennet) {
-                           msg = "Read "+getOpennetPeers().length+" opennet 
peers from "+peersFile;
-                               } else {
-                           msg = "Read "+getDarknetPeers().length+" darknet 
peers from "+peersFile;
-                               }
-                       Logger.normal(this, msg);
-                       System.out.println(msg);
-                       return;
-               }
-               }
-       // Try the backup
-       if(backupFile.exists()) {
-               if(readPeers(backupFile, mangler, crypto, opennet, 
oldOpennetPeers)) {
-                   String msg;
-                   if(oldOpennetPeers) {
-                       msg = "Read "+opennet.countOldOpennetPeers()+" 
old-opennet-peers from "+peersFile;
-                   } else if(isOpennet) {
-                           msg = "Read "+getOpennetPeers().length+" opennet 
peers from "+peersFile;
-                               } else {
-                           msg = "Read "+getDarknetPeers().length+" darknet 
peers from "+peersFile;
-                               }
-                       Logger.normal(this, msg);
-                       System.out.println(msg);
-               } else {
-                       Logger.error(this, "No (readable) peers file with peers 
in it found");
-                       System.err.println("No (readable) peers file with peers 
in it found");
-               }
-       }               
+       /**
+        * Attempt to read a file full of noderefs. Try the file as named 
first, then the .bak if it is empty or
+        * otherwise doesn't work.
+        * @param filename The filename to read from. If this doesn't work, we 
try the .bak file.
+        * @param crypto The cryptographic identity which these nodes are 
connected to.
+        * @param opennet The opennet manager for the nodes. Only needed (for 
constructing the nodes) if isOpennet.
+        * @param isOpennet Whether the file contains opennet peers.
+        * @param oldOpennetPeers If true, don't add the nodes to the routing 
table, pass them to the opennet
+        * manager as "old peers" i.e. inactive nodes which may try to 
reconnect.
+        */
+       void tryReadPeers(String filename, NodeCrypto crypto, OpennetManager 
opennet, boolean isOpennet, boolean oldOpennetPeers) {
+               synchronized(writePeersSync) {
+                       if(!oldOpennetPeers)
+                               if(isOpennet)
+                                       openFilename = filename;
+                               else
+                                       darkFilename = filename;
+               }
+               OutgoingPacketMangler mangler = crypto.packetMangler;
+               File peersFile = new File(filename);
+               File backupFile = new File(filename + ".bak");
+               // Try to read the node list from disk
+               if(peersFile.exists())
+                       if(readPeers(peersFile, mangler, crypto, opennet, 
oldOpennetPeers)) {
+                               String msg;
+                               if(oldOpennetPeers)
+                                       msg = "Read " + 
opennet.countOldOpennetPeers() + " old-opennet-peers from " + peersFile;
+                               else if(isOpennet)
+                                       msg = "Read " + 
getOpennetPeers().length + " opennet peers from " + peersFile;
+                               else
+                                       msg = "Read " + 
getDarknetPeers().length + " darknet peers from " + peersFile;
+                               Logger.normal(this, msg);
+                               System.out.println(msg);
+                               return;
+                       }
+               // Try the backup
+               if(backupFile.exists())
+                       if(readPeers(backupFile, mangler, crypto, opennet, 
oldOpennetPeers)) {
+                               String msg;
+                               if(oldOpennetPeers)
+                                       msg = "Read " + 
opennet.countOldOpennetPeers() + " old-opennet-peers from " + peersFile;
+                               else if(isOpennet)
+                                       msg = "Read " + 
getOpennetPeers().length + " opennet peers from " + peersFile;
+                               else
+                                       msg = "Read " + 
getDarknetPeers().length + " darknet peers from " + peersFile;
+                               Logger.normal(this, msg);
+                               System.out.println(msg);
+                       } else {
+                               Logger.error(this, "No (readable) peers file 
with peers in it found");
+                               System.err.println("No (readable) peers file 
with peers in it found");
+                       }
        }

        private boolean readPeers(File peersFile, OutgoingPacketMangler 
mangler, NodeCrypto crypto, OpennetManager opennet, boolean oldOpennetPeers) {
-       boolean gotSome = false;
-       FileInputStream fis;
+               boolean gotSome = false;
+               FileInputStream fis;
                try {
                        fis = new FileInputStream(peersFile);
-               } catch (FileNotFoundException e4) {
-                       Logger.normal(this, "Peers file not found: "+peersFile);
+               } catch(FileNotFoundException e4) {
+                       Logger.normal(this, "Peers file not found: " + 
peersFile);
                        return false;
                }
-        InputStreamReader ris;
+               InputStreamReader ris;
                try {
                        ris = new InputStreamReader(fis, "UTF-8");
-               } catch (UnsupportedEncodingException e4) {
+               } catch(UnsupportedEncodingException e4) {
                        throw new Error("Impossible: JVM doesn't support UTF-8: 
" + e4, e4);
                }
-        BufferedReader br = new BufferedReader(ris);
-        try { // FIXME: no better way?
-            while(true) {
-                // Read a single NodePeer
-                SimpleFieldSet fs;
-                fs = new SimpleFieldSet(br, false, true);
-                PeerNode pn;
-                try {
-                    pn = PeerNode.create(fs, node, crypto, opennet, this, 
true, mangler);
-                } catch (FSParseException e2) {
-                    Logger.error(this, "Could not parse peer: "+e2+ '\n' 
+fs.toString(),e2);
-                    continue;
-                } catch (PeerParseException e2) {
-                    Logger.error(this, "Could not parse peer: "+e2+ '\n' 
+fs.toString(),e2);
-                    continue;
-                } catch (ReferenceSignatureVerificationException e2) {
-                       Logger.error(this, "Could not parse peer: "+e2+ '\n' 
+fs.toString(),e2);
-                    continue;
+               BufferedReader br = new BufferedReader(ris);
+               try { // FIXME: no better way?
+                       while(true) {
+                               // Read a single NodePeer
+                               SimpleFieldSet fs;
+                               fs = new SimpleFieldSet(br, false, true);
+                               PeerNode pn;
+                               try {
+                                       pn = PeerNode.create(fs, node, crypto, 
opennet, this, true, mangler);
+                               } catch(FSParseException e2) {
+                                       Logger.error(this, "Could not parse 
peer: " + e2 + '\n' + fs.toString(), e2);
+                                       continue;
+                               } catch(PeerParseException e2) {
+                                       Logger.error(this, "Could not parse 
peer: " + e2 + '\n' + fs.toString(), e2);
+                                       continue;
+                               } catch(ReferenceSignatureVerificationException 
e2) {
+                                       Logger.error(this, "Could not parse 
peer: " + e2 + '\n' + fs.toString(), e2);
+                                       continue;
                                }
-                if(oldOpennetPeers)
-                       opennet.addOldOpennetNode(pn);
-                else
-                       addPeer(pn, true, false);
-                gotSome = true;
-            }
-        } catch (EOFException e) {
-            // End of file, fine
-        } catch (IOException e1) {
-            Logger.error(this, "Could not read peers file: "+e1, e1);
-        }
-        try {
-               br.close();
-        } catch (IOException e3) {
-               Logger.error(this, "Ignoring "+e3+" caught reading "+peersFile, 
e3);
-        }
-        return gotSome;
+                               if(oldOpennetPeers)
+                                       opennet.addOldOpennetNode(pn);
+                               else
+                                       addPeer(pn, true, false);
+                               gotSome = true;
+                       }
+               } catch(EOFException e) {
+                       // End of file, fine
+               } catch(IOException e1) {
+                       Logger.error(this, "Could not read peers file: " + e1, 
e1);
+               }
+               try {
+                       br.close();
+               } catch(IOException e3) {
+                       Logger.error(this, "Ignoring " + e3 + " caught reading 
" + peersFile, e3);
+               }
+               return gotSome;
        }

        public boolean addPeer(PeerNode pn) {
                return addPeer(pn, false, false);
        }
-       
+
        /**
         * Add a peer.
         * @param pn The node to add to the routing table.
@@ -245,14 +232,14 @@
         * an opennet peer when opennet was disabled.
         */
        boolean addPeer(PeerNode pn, boolean ignoreOpennet, boolean reactivate) 
{
-               assert(pn != null);
+               assert (pn != null);
                if(reactivate)
                        pn.forceCancelDisconnecting();
-               synchronized (this) {
-                       for (int i = 0; i < myPeers.length; i++) {
-                               if (myPeers[i].equals(pn)) {
+               synchronized(this) {
+                       for(int i = 0; i < myPeers.length; i++) {
+                               if(myPeers[i].equals(pn)) {
                                        if(logMINOR)
-                                               Logger.minor(this, "Can't add 
peer "+pn+" because already have "+myPeers[i], new Exception("debug"));
+                                               Logger.minor(this, "Can't add 
peer " + pn + " because already have " + myPeers[i], new Exception("debug"));
                                        return false;
                                }
                        }
@@ -268,100 +255,103 @@
                updatePMUserAlert();
                if((!ignoreOpennet) && pn instanceof OpennetPeerNode) {
                        OpennetManager opennet = node.getOpennet();
-                       if(opennet != null) {
+                       if(opennet != null)
                                opennet.forceAddPeer(pn, true);
-                       } else {
-                               Logger.error(this, "Adding opennet peer when no 
opennet enabled!!!: "+pn+" - removing...");
+                       else {
+                               Logger.error(this, "Adding opennet peer when no 
opennet enabled!!!: " + pn + " - removing...");
                                removePeer(pn);
                                return false;
                        }
                }
-               
+
                return true;
        }
-    
+
        synchronized boolean havePeer(PeerNode pn) {
-               for(int i=0;i<myPeers.length;i++) {
-                       if(myPeers[i] == pn) return true;
+               for(int i = 0; i < myPeers.length; i++) {
+                       if(myPeers[i] == pn)
+                               return true;
                }
                return false;
        }
-       
-    private boolean removePeer(PeerNode pn) {
-       if(logMINOR)
-               Logger.minor(this, "Removing "+pn);
+
+       private boolean removePeer(PeerNode pn) {
+               if(logMINOR)
+                       Logger.minor(this, "Removing " + pn);
                boolean isInPeers = false;
-       synchronized(this) {
-               for(int i=0;i<myPeers.length;i++) {
-                       if(myPeers[i] == pn) isInPeers=true;
-               }
-               if(pn instanceof DarknetPeerNode)
-                       ((DarknetPeerNode)pn).removeExtraPeerDataDir();
-               if(isInPeers) {
-                
-                       int peerNodeStatus = pn.getPeerNodeStatus();
-                       if(pn.recordStatus())
-                               removePeerNodeStatus( peerNodeStatus, pn, 
!isInPeers );
-                       String peerNodePreviousRoutingBackoffReason = 
pn.getPreviousBackoffReason();
-                       if(peerNodePreviousRoutingBackoffReason != null) {
-                               
removePeerNodeRoutingBackoffReason(peerNodePreviousRoutingBackoffReason, pn);
-                       }
-                       
-                       // removing from connectedPeers
-                       ArrayList a = new ArrayList();
-                       for(int i=0;i<myPeers.length;i++) {
-                               if((myPeers[i]!=pn) && myPeers[i].isConnected() 
&& myPeers[i].isRealConnection())
-                                       a.add(myPeers[i]);
-                       }
-                       
-                       PeerNode[] newConnectedPeers = new PeerNode[a.size()];
-                       newConnectedPeers = (PeerNode[]) 
a.toArray(newConnectedPeers);
-                       connectedPeers = newConnectedPeers;
-                       
-                       // removing from myPeers
-                       PeerNode[] newMyPeers = new PeerNode[myPeers.length-1];
-                       int positionInNewArray = 0;
-                       for(int i=0;i<myPeers.length;i++) {
-                               if(myPeers[i]!=pn){
-                                       newMyPeers[positionInNewArray] = 
myPeers[i];
-                                       positionInNewArray++;
-                               }
-                       }
-                       myPeers = newMyPeers;
-                       
-                       Logger.normal(this, "Removed "+pn);
-               }
-       }
-       pn.onRemove();
-       if(isInPeers)
-               updatePMUserAlert();
-        return true;
-    }
-       
+               synchronized(this) {
+                       for(int i = 0; i < myPeers.length; i++) {
+                               if(myPeers[i] == pn)
+                                       isInPeers = true;
+                       }
+                       if(pn instanceof DarknetPeerNode)
+                               ((DarknetPeerNode) pn).removeExtraPeerDataDir();
+                       if(isInPeers) {
+
+                               int peerNodeStatus = pn.getPeerNodeStatus();
+                               if(pn.recordStatus())
+                                       removePeerNodeStatus(peerNodeStatus, 
pn, !isInPeers);
+                               String peerNodePreviousRoutingBackoffReason = 
pn.getPreviousBackoffReason();
+                               if(peerNodePreviousRoutingBackoffReason != null)
+                                       
removePeerNodeRoutingBackoffReason(peerNodePreviousRoutingBackoffReason, pn);
+
+                               // removing from connectedPeers
+                               ArrayList a = new ArrayList();
+                               for(int i = 0; i < myPeers.length; i++) {
+                                       if((myPeers[i] != pn) && 
myPeers[i].isConnected() && myPeers[i].isRealConnection())
+                                               a.add(myPeers[i]);
+                               }
+
+                               PeerNode[] newConnectedPeers = new 
PeerNode[a.size()];
+                               newConnectedPeers = (PeerNode[]) 
a.toArray(newConnectedPeers);
+                               connectedPeers = newConnectedPeers;
+
+                               // removing from myPeers
+                               PeerNode[] newMyPeers = new 
PeerNode[myPeers.length - 1];
+                               int positionInNewArray = 0;
+                               for(int i = 0; i < myPeers.length; i++) {
+                                       if(myPeers[i] != pn) {
+                                               newMyPeers[positionInNewArray] 
= myPeers[i];
+                                               positionInNewArray++;
+                                       }
+                               }
+                               myPeers = newMyPeers;
+
+                               Logger.normal(this, "Removed " + pn);
+                       }
+               }
+               pn.onRemove();
+               if(isInPeers)
+                       updatePMUserAlert();
+               return true;
+       }
+
        public boolean removeAllPeers() {
                Logger.normal(this, "removeAllPeers!");
                PeerNode[] oldPeers;
-               synchronized (this) {
+               synchronized(this) {
                        oldPeers = myPeers;
                        myPeers = new PeerNode[0];
                        connectedPeers = new PeerNode[0];
                }
-               for (int i=0; i<oldPeers.length; i++)
+               for(int i = 0; i < oldPeers.length; i++)
                        oldPeers[i].onRemove();
                return true;
-       }       
-       
+       }
+
        public boolean disconnected(PeerNode pn) {
                synchronized(this) {
                        boolean isInPeers = false;
-                       for(int i=0;i<connectedPeers.length;i++) {
-                               if(connectedPeers[i] == pn) isInPeers=true;
+                       for(int i = 0; i < connectedPeers.length; i++) {
+                               if(connectedPeers[i] == pn)
+                                       isInPeers = true;
                        }
-                       if(!isInPeers) return false;
+                       if(!isInPeers)
+                               return false;
                        // removing from connectedPeers
                        ArrayList a = new ArrayList();
-                       for(int i=0;i<myPeers.length;i++) {
-                               if((myPeers[i]!=pn) && myPeers[i].isRoutable())
+                       for(int i = 0; i < myPeers.length; i++) {
+                               if((myPeers[i] != pn) && 
myPeers[i].isRoutable())
                                        a.add(myPeers[i]);
                        }
                        PeerNode[] newConnectedPeers = new PeerNode[a.size()];
@@ -371,53 +361,57 @@
                updatePMUserAlert();
                return true;
        }
-       
        long timeFirstAnyConnections = 0;
-       
+
        public long getTimeFirstAnyConnections() {
                return timeFirstAnyConnections;
        }
-       
-    public void addConnectedPeer(PeerNode pn) {
-       logMINOR = Logger.shouldLog(Logger.MINOR, this);
-       if(!pn.isRealConnection()) {
-               if(logMINOR) Logger.minor(this, "Not a real connection: "+pn);
-               return;
-       }
-       if(!pn.isConnected()) {
-               if(logMINOR) Logger.minor(this, "Not connected: "+pn);
-               return;
-       }
-       long now = System.currentTimeMillis();
-       synchronized(this) {
-       if(timeFirstAnyConnections == 0) timeFirstAnyConnections = now;
-        for(int i=0;i<connectedPeers.length;i++) {
-            if(connectedPeers[i] == pn) {
-               if(logMINOR) Logger.minor(this, "Already connected: "+pn);
-                return;
-            }
-        }
-        boolean inMyPeers = false;
-        for(int i=0;i<myPeers.length;i++) {
-            if(myPeers[i] == pn) {
-                inMyPeers = true;
-                break;
-            }
-        }
-        if(!inMyPeers) {
-            Logger.error(this, "Connecting to "+pn+" but not in peers!");
-            addPeer(pn);
-        }
-        if(logMINOR) Logger.minor(this, "Connecting: "+pn);
-        PeerNode[] newConnectedPeers = new PeerNode[connectedPeers.length+1];
-        System.arraycopy(connectedPeers, 0, newConnectedPeers, 0, 
connectedPeers.length);
-        newConnectedPeers[connectedPeers.length] = pn;
-        connectedPeers = newConnectedPeers;
-        if(logMINOR) Logger.minor(this, "Connected peers: 
"+connectedPeers.length);
-       }
-        updatePMUserAlert();
-    }
-    
+
+       public void addConnectedPeer(PeerNode pn) {
+               logMINOR = Logger.shouldLog(Logger.MINOR, this);
+               if(!pn.isRealConnection()) {
+                       if(logMINOR)
+                               Logger.minor(this, "Not a real connection: " + 
pn);
+                       return;
+               }
+               if(!pn.isConnected()) {
+                       if(logMINOR)
+                               Logger.minor(this, "Not connected: " + pn);
+                       return;
+               }
+               long now = System.currentTimeMillis();
+               synchronized(this) {
+                       if(timeFirstAnyConnections == 0)
+                               timeFirstAnyConnections = now;
+                       for(int i = 0; i < connectedPeers.length; i++) {
+                               if(connectedPeers[i] == pn) {
+                                       if(logMINOR)
+                                               Logger.minor(this, "Already 
connected: " + pn);
+                                       return;
+                               }
+                       }
+                       boolean inMyPeers = false;
+                       for(int i = 0; i < myPeers.length; i++) {
+                               if(myPeers[i] == pn) {
+                                       inMyPeers = true;
+                                       break;
+                               }
+                       }
+                       if(!inMyPeers) {
+                               Logger.error(this, "Connecting to " + pn + " 
but not in peers!");
+                               addPeer(pn);
+                       }
+                       if(logMINOR)
+                               Logger.minor(this, "Connecting: " + pn);
+                       PeerNode[] newConnectedPeers = new 
PeerNode[connectedPeers.length + 1];
+                       System.arraycopy(connectedPeers, 0, newConnectedPeers, 
0, connectedPeers.length);
+                       newConnectedPeers[connectedPeers.length] = pn;
+                       connectedPeers = newConnectedPeers;
+                       if(logMINOR)
+                               Logger.minor(this, "Connected peers: " + 
connectedPeers.length);
+               }
+               updatePMUserAlert();
+       }
 //    NodePeer route(double targetLocation, RoutingContext ctx) {
 //        double minDist = 1.1;
 //        NodePeer best = null;
@@ -438,83 +432,93 @@
 //        return route(target.getValue(), ctx);
 //    }
 //
-    /**
-     * Find the node with the given Peer address.
-     */
-    public PeerNode getByPeer(Peer peer) {
-        for(int i=0;i<myPeers.length;i++) {
-               if(!myPeers[i].isRealConnection())
-                       continue;
-            if(peer.equals(myPeers[i].getPeer()))
-                return myPeers[i];
-        }
-        return null;
-    }
+       /**
+        * Find the node with the given Peer address.
+        */
+       public PeerNode getByPeer(Peer peer) {
+               for(int i = 0; i < myPeers.length; i++) {
+                       if(!myPeers[i].isRealConnection())
+                               continue;
+                       if(peer.equals(myPeers[i].getPeer()))
+                               return myPeers[i];
+               }
+               return null;
+       }

-    /**
-     * Connect to a node provided the fieldset representing it.
-     */
-    public void connect(SimpleFieldSet noderef, OutgoingPacketMangler mangler) 
throws FSParseException, PeerParseException, 
ReferenceSignatureVerificationException {
-        PeerNode pn = node.createNewDarknetNode(noderef);
-        for(int i=0;i<myPeers.length;i++) {
-            if(Arrays.equals(myPeers[i].identity, pn.identity)) return;
-        }
-        addPeer(pn);
-    }
-       
-    /**
-     * Disconnect from a specified node
-     */
-    public void disconnect(final PeerNode pn, boolean sendDisconnectMessage, 
final boolean waitForAck) {
-       if(logMINOR) Logger.minor(this, "Disconnecting "+pn.shortToString());
-       synchronized(this) {
-               if(!havePeer(pn)) return;
-       }
-       pn.notifyDisconnecting();
-       if(sendDisconnectMessage) {
-               Message msg = DMT.createFNPDisconnect(true, false, -1, new 
ShortBuffer(new byte[0]));
-                       try {
+       /**
+        * Connect to a node provided the fieldset representing it.
+        */
+       public void connect(SimpleFieldSet noderef, OutgoingPacketMangler 
mangler) throws FSParseException, PeerParseException, 
ReferenceSignatureVerificationException {
+               PeerNode pn = node.createNewDarknetNode(noderef);
+               for(int i = 0; i < myPeers.length; i++) {
+                       if(Arrays.equals(myPeers[i].identity, pn.identity))
+                               return;
+               }
+               addPeer(pn);
+       }
+
+       /**
+        * Disconnect from a specified node
+        */
+       public void disconnect(final PeerNode pn, boolean 
sendDisconnectMessage, final boolean waitForAck) {
+               if(logMINOR)
+                       Logger.minor(this, "Disconnecting " + 
pn.shortToString());
+               synchronized(this) {
+                       if(!havePeer(pn))
+                               return;
+               }
+               pn.notifyDisconnecting();
+               if(sendDisconnectMessage) {
+                       Message msg = DMT.createFNPDisconnect(true, false, -1, 
new ShortBuffer(new byte[0]));
+                       try {
                                pn.sendAsync(msg, new AsyncMessageCallback() {
+
                                        boolean done = false;
+
                                        public void acknowledged() {
                                                done();
                                        }
+
                                        public void disconnected() {
                                                done();
                                        }
+
                                        public void fatalError() {
                                                done();
                                        }
+
                                        public void sent() {
-                                               if(!waitForAck) done();
+                                               if(!waitForAck)
+                                                       done();
                                        }
+
                                        void done() {
                                                synchronized(this) {
-                                                       if(done) return;
+                                                       if(done)
+                                                               return;
                                                        done = true;
                                                }
-                                       if(removePeer(pn))
-                                               writePeers();
+                                               if(removePeer(pn))
+                                                       writePeers();
                                        }
                                }, 0, ctrDisconn);
-                       } catch (NotConnectedException e) {
-                       if(pn.isDisconnecting() && removePeer(pn))
-                               writePeers();
-                       return;
+                       } catch(NotConnectedException e) {
+                               if(pn.isDisconnecting() && removePeer(pn))
+                                       writePeers();
+                               return;
                        }
-                       node.getTicker().queueTimedJob(new Runnable() {
-                               public void run() {
-                               if(pn.isDisconnecting() && removePeer(pn))
-                                       writePeers();
-                               }
-                       }, Node.MAX_PEER_INACTIVITY);
-       } else {
-               if(removePeer(pn))
-                       writePeers();
-       }
-    }
+                       node.getTicker().queueTimedJob(new Runnable() {

-    final ByteCounter ctrDisconn = new ByteCounter() {
+                               public void run() {
+                                       if(pn.isDisconnecting() && 
removePeer(pn))
+                                               writePeers();
+                               }
+                       }, Node.MAX_PEER_INACTIVITY);
+               } else
+                       if(removePeer(pn))
+                               writePeers();
+       }
+       final ByteCounter ctrDisconn = new ByteCounter() {

                public void receivedBytes(int x) {
                        node.nodeStats.disconnBytesReceived(x);
@@ -527,248 +531,273 @@
                public void sentPayload(int x) {
                        // Ignore
                }
-       
-    };
-    
-    protected static class LocationUIDPair implements Comparable {
-       double location;
-       long uid;
-       
-       LocationUIDPair(PeerNode pn) {
-               location = pn.getLocation();
-               uid = pn.swapIdentifier;
-       }
+       };

+       protected static class LocationUIDPair implements Comparable {
+
+               double location;
+               long uid;
+
+               LocationUIDPair(PeerNode pn) {
+                       location = pn.getLocation();
+                       uid = pn.swapIdentifier;
+               }
+
                public int compareTo(Object arg0) {
                        // Compare purely on location, so result is the same as 
getPeerLocationDoubles()
                        LocationUIDPair p = (LocationUIDPair) arg0;
-                       if(p.location > location) return 1;
-                       if(p.location < location) return -1;
+                       if(p.location > location)
+                               return 1;
+                       if(p.location < location)
+                               return -1;
                        return 0;
                }
-    }
-    
-    /**
-     * @return An array of the current locations (as doubles) of all
-     * our connected peers.
-     */
-    public double[] getPeerLocationDoubles() {
-        double[] locs;
-        PeerNode[] conns;
-        synchronized (this) {
+       }
+
+       /**
+        * @return An array of the current locations (as doubles) of all
+        * our connected peers.
+        */
+       public double[] getPeerLocationDoubles() {
+               double[] locs;
+               PeerNode[] conns;
+               synchronized(this) {
                        conns = connectedPeers;
                }
-        locs = new double[conns.length];
-        int x = 0;
-        for(int i=0;i<conns.length;i++) {
-            if(conns[i].isRoutable())
-                locs[x++] = conns[i].getLocation();
-        }
-        // Wipe out any information contained in the order
-        java.util.Arrays.sort(locs, 0, x);
-        if(x != locs.length) {
-            double[] newLocs = new double[x];
-            System.arraycopy(locs, 0, newLocs, 0, x);
-            return newLocs;
-        } else return locs;
-    }
+               locs = new double[conns.length];
+               int x = 0;
+               for(int i = 0; i < conns.length; i++) {
+                       if(conns[i].isRoutable())
+                               locs[x++] = conns[i].getLocation();
+               }
+               // Wipe out any information contained in the order
+               java.util.Arrays.sort(locs, 0, x);
+               if(x != locs.length) {
+                       double[] newLocs = new double[x];
+                       System.arraycopy(locs, 0, newLocs, 0, x);
+                       return newLocs;
+               } else
+                       return locs;
+       }

-    /** Just like getPeerLocationDoubles, except it also
-     * returns the UID for each node. */
-    public LocationUIDPair[] getPeerLocationsAndUIDs() {
-        PeerNode[] conns;
-        LocationUIDPair[] locPairs;
-        synchronized (this) {
+       /** Just like getPeerLocationDoubles, except it also
+        * returns the UID for each node. */
+       public LocationUIDPair[] getPeerLocationsAndUIDs() {
+               PeerNode[] conns;
+               LocationUIDPair[] locPairs;
+               synchronized(this) {
                        conns = myPeers;
                }
-        locPairs = new LocationUIDPair[conns.length];
-        int x = 0;
-        for(int i=0;i<conns.length;i++) {
-            if(conns[i].isRoutable())
-               locPairs[x++] = new LocationUIDPair(conns[i]);
-        }
-        // Sort it
-        Arrays.sort(locPairs, 0, x);
-        if(x != locPairs.length) {
-            LocationUIDPair[] newLocs = new LocationUIDPair[x];
-            System.arraycopy(locPairs, 0, newLocs, 0, x);
-            return newLocs;
-        } else return locPairs;
-    }
+               locPairs = new LocationUIDPair[conns.length];
+               int x = 0;
+               for(int i = 0; i < conns.length; i++) {
+                       if(conns[i].isRoutable())
+                               locPairs[x++] = new LocationUIDPair(conns[i]);
+               }
+               // Sort it
+               Arrays.sort(locPairs, 0, x);
+               if(x != locPairs.length) {
+                       LocationUIDPair[] newLocs = new LocationUIDPair[x];
+                       System.arraycopy(locPairs, 0, newLocs, 0, x);
+                       return newLocs;
+               } else
+                       return locPairs;
+       }

        public PeerNode getRandomPeerInSwappingNetworkOf(PeerNode exclude) {
-               if (exclude==null || exclude.networkGroup==null || 
NetworkIDManager.disableSwapSegregation)
+               if(exclude == null || exclude.networkGroup == null || 
NetworkIDManager.disableSwapSegregation)
                        return getRandomPeer(exclude);
-               synchronized (this) {
-                       if(connectedPeers.length == 0) return null;
-                       for(int i=0;i<5;i++) {
+               synchronized(this) {
+                       if(connectedPeers.length == 0)
+                               return null;
+                       for(int i = 0; i < 5; i++) {
                                PeerNode pn = 
connectedPeers[node.random.nextInt(connectedPeers.length)];
-                               if(pn == exclude) continue;
-                               if (node.netid.inSeparateNetworks(pn, exclude)) 
continue;
-                               if(pn.isRoutable()) return pn;
+                               if(pn == exclude)
+                                       continue;
+                               if(node.netid.inSeparateNetworks(pn, exclude))
+                                       continue;
+                               if(pn.isRoutable())
+                                       return pn;
                        }
                        //could not easily find a good random one... filter the 
ones which are acceptable
-                       ArrayList l=new ArrayList();
-                       for (int i=0; i<connectedPeers.length; i++) {
-                               PeerNode pn=connectedPeers[i];
-                               if(pn == exclude) continue;
-                               if (node.netid.inSeparateNetworks(pn, exclude)) 
continue;
-                               if(!pn.isRoutable()) continue;
+                       ArrayList l = new ArrayList();
+                       for(int i = 0; i < connectedPeers.length; i++) {
+                               PeerNode pn = connectedPeers[i];
+                               if(pn == exclude)
+                                       continue;
+                               if(node.netid.inSeparateNetworks(pn, exclude))
+                                       continue;
+                               if(!pn.isRoutable())
+                                       continue;
                                l.add(pn);
                        }
                        //Are there any acceptable peers?
-                       if (l.size() == 0)
+                       if(l.size() == 0)
                                return null;
-                       return (PeerNode)l.get(node.random.nextInt(l.size()));
+                       return (PeerNode) l.get(node.random.nextInt(l.size()));
                }
        }
-       
-    /**
-     * @return A random routable connected peer.
-     * FIXME: should this take performance into account?
-     * DO NOT remove the "synchronized". See below for why.
-     */
-    public synchronized PeerNode getRandomPeer(PeerNode exclude) {
-        if(connectedPeers.length == 0) return null;
-        for(int i=0;i<5;i++) {
-            PeerNode pn = 
connectedPeers[node.random.nextInt(connectedPeers.length)];
-            if(pn == exclude) continue;
-            if(pn.isRoutable()) return pn;
-        }
-        // None of them worked
-        // Move the un-connected ones out
-        // This is safe as they will add themselves when they
-        // reconnect, and they can't do it yet as we are synchronized.
-        Vector v = new Vector(connectedPeers.length);
-        logMINOR = Logger.shouldLog(Logger.MINOR, this);
-        for(int i=0;i<myPeers.length;i++) {
-            PeerNode pn = myPeers[i];
-            if(pn == exclude) continue;
-            if(pn.isRoutable()) {
-                v.add(pn);
-            } else {
-               if(logMINOR) Logger.minor(this, "Excluding "+pn+" because is 
disconnected");
-            }
-        }
-        int lengthWithoutExcluded = v.size();
-        if((exclude != null) && exclude.isRoutable())
-            v.add(exclude);
-        PeerNode[] newConnectedPeers = new PeerNode[v.size()];
-        newConnectedPeers = (PeerNode[]) v.toArray(newConnectedPeers);
-        if(logMINOR) Logger.minor(this, "Connected peers (in getRandomPeer): 
"+newConnectedPeers.length+" was "+connectedPeers.length);
-        connectedPeers = newConnectedPeers;
-        if(lengthWithoutExcluded == 0) return null;
-        return connectedPeers[node.random.nextInt(lengthWithoutExcluded)];
-    }

-    /**
-     * Asynchronously send this message to every connected peer.
-     */
-    public void localBroadcast(Message msg, boolean ignoreRoutability, boolean 
onlyRealConnections, ByteCounter ctr) {
-        PeerNode[] peers;
-        synchronized (this) {
-               // myPeers not connectedPeers as connectedPeers only contains
-               // ROUTABLE peers, and we may want to send to non-routable peers
+       /**
+        * @return A random routable connected peer.
+        * FIXME: should this take performance into account?
+        * DO NOT remove the "synchronized". See below for why.
+        */
+       public synchronized PeerNode getRandomPeer(PeerNode exclude) {
+               if(connectedPeers.length == 0)
+                       return null;
+               for(int i = 0; i < 5; i++) {
+                       PeerNode pn = 
connectedPeers[node.random.nextInt(connectedPeers.length)];
+                       if(pn == exclude)
+                               continue;
+                       if(pn.isRoutable())
+                               return pn;
+               }
+               // None of them worked
+               // Move the un-connected ones out
+               // This is safe as they will add themselves when they
+               // reconnect, and they can't do it yet as we are synchronized.
+               Vector v = new Vector(connectedPeers.length);
+               logMINOR = Logger.shouldLog(Logger.MINOR, this);
+               for(int i = 0; i < myPeers.length; i++) {
+                       PeerNode pn = myPeers[i];
+                       if(pn == exclude)
+                               continue;
+                       if(pn.isRoutable())
+                               v.add(pn);
+                       else
+                               if(logMINOR)
+                                       Logger.minor(this, "Excluding " + pn + 
" because is disconnected");
+               }
+               int lengthWithoutExcluded = v.size();
+               if((exclude != null) && exclude.isRoutable())
+                       v.add(exclude);
+               PeerNode[] newConnectedPeers = new PeerNode[v.size()];
+               newConnectedPeers = (PeerNode[]) v.toArray(newConnectedPeers);
+               if(logMINOR)
+                       Logger.minor(this, "Connected peers (in getRandomPeer): 
" + newConnectedPeers.length + " was " + connectedPeers.length);
+               connectedPeers = newConnectedPeers;
+               if(lengthWithoutExcluded == 0)
+                       return null;
+               return 
connectedPeers[node.random.nextInt(lengthWithoutExcluded)];
+       }
+
+       /**
+        * Asynchronously send this message to every connected peer.
+        */
+       public void localBroadcast(Message msg, boolean ignoreRoutability, 
boolean onlyRealConnections, ByteCounter ctr) {
+               PeerNode[] peers;
+               synchronized(this) {
+                       // myPeers not connectedPeers as connectedPeers only 
contains
+                       // ROUTABLE peers, and we may want to send to 
non-routable peers
                        peers = myPeers;
                }
-        for(int i=0;i<peers.length;i++) {
-               if(ignoreRoutability) {
-                       if(!peers[i].isConnected()) continue;
-               } else {
-                       if(!peers[i].isRoutable()) continue;
-               }
-               if(onlyRealConnections && !peers[i].isRealConnection()) 
continue;
-               try {
-                peers[i].sendAsync(msg, null, 0, ctr);
-            } catch (NotConnectedException e) {
-                // Ignore
-            }
-        }
-    }
+               for(int i = 0; i < peers.length; i++) {
+                       if(ignoreRoutability) {
+                               if(!peers[i].isConnected())
+                                       continue;
+                       } else
+                               if(!peers[i].isRoutable())
+                                       continue;
+                       if(onlyRealConnections && !peers[i].isRealConnection())
+                               continue;
+                       try {
+                               peers[i].sendAsync(msg, null, 0, ctr);
+                       } catch(NotConnectedException e) {
+                               // Ignore
+                       }
+               }
+       }

        /**
         * Asynchronously send a differential node reference to every 
isConnected() peer.
         */
        public void locallyBroadcastDiffNodeRef(SimpleFieldSet fs, boolean 
toDarknetOnly, boolean toOpennetOnly) {
                PeerNode[] peers;
-               synchronized (this) {
+               synchronized(this) {
                        // myPeers not connectedPeers as connectedPeers only 
contains
                        // ROUTABLE peers and we want to also send to 
non-routable peers
                        peers = myPeers;
                }
-               for(int i=0;i<peers.length;i++) {
-                       if(!peers[i].isConnected()) continue;
-                       if(toDarknetOnly && !peers[i].isDarknet()) continue;
-                       if(toOpennetOnly && !peers[i].isOpennet()) continue;
+               for(int i = 0; i < peers.length; i++) {
+                       if(!peers[i].isConnected())
+                               continue;
+                       if(toDarknetOnly && !peers[i].isDarknet())
+                               continue;
+                       if(toOpennetOnly && !peers[i].isOpennet())
+                               continue;
                        peers[i].sendNodeToNodeMessage(fs, 
Node.N2N_MESSAGE_TYPE_DIFFNODEREF, false, 0, false);
                }
        }

-    public PeerNode getRandomPeer() {
-        return getRandomPeer(null);
-    }
+       public PeerNode getRandomPeer() {
+               return getRandomPeer(null);
+       }

-    public double closestPeerLocation(double loc, double ignoreLoc, int 
minUptimePercent) {
-        PeerNode[] peers;
-        synchronized (this) {
-               peers = connectedPeers;
+       public double closestPeerLocation(double loc, double ignoreLoc, int 
minUptimePercent) {
+               PeerNode[] peers;
+               synchronized(this) {
+                       peers = connectedPeers;
                }
-        double bestDiff = 1.0;
-        double bestLoc = Double.MAX_VALUE;
-        boolean foundOne = false;
-        for(int i=0;i<peers.length;i++) {
-            PeerNode p = peers[i];
-            if(!p.isRoutable()) continue;
-            if(p.isRoutingBackedOff()) continue;
-            if(p.getUptime() < minUptimePercent) continue;
-            double peerloc = p.getLocation();
-            if(Math.abs(peerloc - ignoreLoc) < Double.MIN_VALUE*2)
-               continue;
-            double diff = Location.distance(peerloc, loc);
-            if(diff < bestDiff) {
-               foundOne = true;
-                bestDiff = diff;
-                bestLoc = peerloc;
-            }
-        }
-        if(!foundOne) {
-            for(int i=0;i<peers.length;i++) {
-                PeerNode p = peers[i];
-                if(!p.isRoutable()) continue;
-                if(p.getUptime() < minUptimePercent) continue;
-                // Ignore backoff state
-                double peerloc = p.getLocation();
-                if(Math.abs(peerloc - ignoreLoc) < Double.MIN_VALUE*2)
-                       continue;
-                double diff = Location.distance(peerloc, loc);
-                if(diff < bestDiff) {
-                       foundOne = true;
-                    bestDiff = diff;
-                    bestLoc = peerloc;
-                }
-            }
-        }
-        return bestLoc;
-    }
+               double bestDiff = 1.0;
+               double bestLoc = Double.MAX_VALUE;
+               boolean foundOne = false;
+               for(int i = 0; i < peers.length; i++) {
+                       PeerNode p = peers[i];
+                       if(!p.isRoutable())
+                               continue;
+                       if(p.isRoutingBackedOff())
+                               continue;
+                       if(p.getUptime() < minUptimePercent)
+                               continue;
+                       double peerloc = p.getLocation();
+                       if(Math.abs(peerloc - ignoreLoc) < Double.MIN_VALUE * 2)
+                               continue;
+                       double diff = Location.distance(peerloc, loc);
+                       if(diff < bestDiff) {
+                               foundOne = true;
+                               bestDiff = diff;
+                               bestLoc = peerloc;
+                       }
+               }
+               if(!foundOne)
+                       for(int i = 0; i < peers.length; i++) {
+                               PeerNode p = peers[i];
+                               if(!p.isRoutable())
+                                       continue;
+                               if(p.getUptime() < minUptimePercent)
+                                       continue;
+                               // Ignore backoff state
+                               double peerloc = p.getLocation();
+                               if(Math.abs(peerloc - ignoreLoc) < 
Double.MIN_VALUE * 2)
+                                       continue;
+                               double diff = Location.distance(peerloc, loc);
+                               if(diff < bestDiff) {
+                                       foundOne = true;
+                                       bestDiff = diff;
+                                       bestLoc = peerloc;
+                               }
+                       }
+               return bestLoc;
+       }

-    public boolean isCloserLocation(double loc, int minUptimePercent) {
-       double nodeLoc = node.lm.getLocation();
-       double nodeDist = Location.distance(nodeLoc, loc);
-       double closest = closestPeerLocation(loc, nodeLoc, minUptimePercent);
-       if(closest > 1.0) {
-               // No peers found
-               return false;
-       }
-       double closestDist = Location.distance(closest, loc);
-       return closestDist < nodeDist;
-    }
-    
-    public PeerNode closerPeer(PeerNode pn, Set routedTo, Set notIgnored, 
double loc, boolean ignoreSelf, boolean calculateMisrouting, int minVersion, 
Vector addUnpickedLocsTo, Key key) {
-       return closerPeer(pn, routedTo, notIgnored, loc, ignoreSelf, 
calculateMisrouting, minVersion, addUnpickedLocsTo, 2.0, key);
-    }
+       public boolean isCloserLocation(double loc, int minUptimePercent) {
+               double nodeLoc = node.lm.getLocation();
+               double nodeDist = Location.distance(nodeLoc, loc);
+               double closest = closestPeerLocation(loc, nodeLoc, 
minUptimePercent);
+               if(closest > 1.0)
+                       // No peers found
+                       return false;
+               double closestDist = Location.distance(closest, loc);
+               return closestDist < nodeDist;
+       }

+       public PeerNode closerPeer(PeerNode pn, Set routedTo, Set notIgnored, 
double loc, boolean ignoreSelf, boolean calculateMisrouting, int minVersion, 
Vector addUnpickedLocsTo, Key key) {
+               return closerPeer(pn, routedTo, notIgnored, loc, ignoreSelf, 
calculateMisrouting, minVersion, addUnpickedLocsTo, 2.0, key);
+       }
+
        /**
-     * Find the peer, if any, which is closer to the target location than we 
are, and is not included in the provided set.
+        * Find the peer, if any, which is closer to the target location than 
we are, and is not included in the provided set.
         * If ignoreSelf==false, and we are closer to the target than any 
peers, this function returns null.
         * This function returns two values, the closest such peer which is 
backed off, and the same which is not backed off.
         * It is possible for either to be null independant of the other, 
'closest' is the closer of the two in either case, and
@@ -778,315 +807,325 @@
         * @param maxDistance If a node is further away from the target than 
this distance, ignore it.
         * @param key The original key, if we have it, and if we want to 
consult with the FailureTable
         * to avoid routing to nodes which have recently failed for the same 
key.
-     */
-    public PeerNode closerPeer(PeerNode pn, Set routedTo, Set notIgnored, 
double target, boolean ignoreSelf, boolean calculateMisrouting, int minVersion, 
Vector addUnpickedLocsTo, double maxDistance, Key key) {
-        PeerNode[] peers;  
-        synchronized (this) {
+        */
+       public PeerNode closerPeer(PeerNode pn, Set routedTo, Set notIgnored, 
double target, boolean ignoreSelf, boolean calculateMisrouting, int minVersion, 
Vector addUnpickedLocsTo, double maxDistance, Key key) {
+               PeerNode[] peers;
+               synchronized(this) {
                        peers = connectedPeers;
                }
-        if(!node.enablePerNodeFailureTables) key = null;
-        if(logMINOR) Logger.minor(this, "Choosing closest peer: 
connectedPeers="+peers.length);
-        double maxDiff = Double.MAX_VALUE;
-        if(!ignoreSelf)
-            maxDiff = Location.distance(node.lm.getLocation(), target);
-        
-        /**
-         * Routing order:
-         * - Non-timed-out non-backed-off peers, in order of closeness to the 
target.
-         * - Timed-out, non-backed-off peers, least recently timed out first.
-         * - Non-timed-out backed-off peers, in order of closeness to the 
target.
-         * - Timed out, backed-off peers, least recently timed out first.
-         * - 
-         */
-        
+               if(!node.enablePerNodeFailureTables)
+                       key = null;
+               if(logMINOR)
+                       Logger.minor(this, "Choosing closest peer: 
connectedPeers=" + peers.length);
+               double maxDiff = Double.MAX_VALUE;
+               if(!ignoreSelf)
+                       maxDiff = Location.distance(node.lm.getLocation(), 
target);
+
+               /**
+                * Routing order:
+                * - Non-timed-out non-backed-off peers, in order of closeness 
to the target.
+                * - Timed-out, non-backed-off peers, least recently timed out 
first.
+                * - Non-timed-out backed-off peers, in order of closeness to 
the target.
+                * - Timed out, backed-off peers, least recently timed out 
first.
+                * - 
+                */
                PeerNode closest = null;
                double closestDistance = Double.MAX_VALUE;
-               
+
                PeerNode closestBackedOff = null;
                double closestBackedOffDistance = Double.MAX_VALUE;
-               
+
                PeerNode closestNotBackedOff = null;
                double closestNotBackedOffDistance = Double.MAX_VALUE;
-               
+
                PeerNode leastRecentlyTimedOut = null;
                long timeLeastRecentlyTimedOut = Long.MAX_VALUE;
-               
+
                PeerNode leastRecentlyTimedOutBackedOff = null;
                long timeLeastRecentlyTimedOutBackedOff = Long.MAX_VALUE;
-               
+
                TimedOutNodesList entry = null;
-               
-               if(key != null) {
+
+               if(key != null)
                        entry = node.failureTable.getTimedOutNodesList(key);
-               }
-               
+
                long now = System.currentTimeMillis();
                int count = 0;
-        for(int i=0;i<peers.length;i++) {
-            PeerNode p = peers[i];
-            if(routedTo.contains(p)) {
-               if(logMINOR) Logger.minor(this, "Skipping (already routed to): 
"+p.getPeer());
-               continue;
-            }
-            if(p == pn) {
-               if(logMINOR) Logger.minor(this, "Skipping (req came from): 
"+p.getPeer());
-               continue;
-            }
-            if(!p.isRoutable()) {
-               if(logMINOR) Logger.minor(this, "Skipping (not connected): 
"+p.getPeer());
-               continue;
-            }
-            if(minVersion > 0 && 
Version.getArbitraryBuildNumber(p.getVersion(), -1) < minVersion) {
-               if(logMINOR) Logger.minor(this, "Skipping old version: 
"+p.getPeer());
-               continue;
-            }
-            long timeout = -1;
-            if(entry != null)
-               timeout = entry.getTimeoutTime(p);
-            boolean timedOut = timeout > now;
+               for(int i = 0; i < peers.length; i++) {
+                       PeerNode p = peers[i];
+                       if(routedTo.contains(p)) {
+                               if(logMINOR)
+                                       Logger.minor(this, "Skipping (already 
routed to): " + p.getPeer());
+                               continue;
+                       }
+                       if(p == pn) {
+                               if(logMINOR)
+                                       Logger.minor(this, "Skipping (req came 
from): " + p.getPeer());
+                               continue;
+                       }
+                       if(!p.isRoutable()) {
+                               if(logMINOR)
+                                       Logger.minor(this, "Skipping (not 
connected): " + p.getPeer());
+                               continue;
+                       }
+                       if(minVersion > 0 && 
Version.getArbitraryBuildNumber(p.getVersion(), -1) < minVersion) {
+                               if(logMINOR)
+                                       Logger.minor(this, "Skipping old 
version: " + p.getPeer());
+                               continue;
+                       }
+                       long timeout = -1;
+                       if(entry != null)
+                               timeout = entry.getTimeoutTime(p);
+                       boolean timedOut = timeout > now;
                        //To help avoid odd race conditions, get the location 
only once and use it for all calculations.
                        double loc = p.getLocation();
-            double diff = Location.distance(loc, target);
-            if(diff > maxDistance) continue;
+                       double diff = Location.distance(loc, target);
+                       if(diff > maxDistance)
+                               continue;
                        if((!ignoreSelf) && (diff > maxDiff)) {
-               if(logMINOR) Logger.minor(this, "Ignoring, further than self 
>maxDiff="+maxDiff);
-               continue;
-            }
+                               if(logMINOR)
+                                       Logger.minor(this, "Ignoring, further 
than self >maxDiff=" + maxDiff);
+                               continue;
+                       }
                        count++;
-            if(logMINOR) Logger.minor(this, "p.loc="+loc+", target="+target+", 
d="+Location.distance(loc, target)+" usedD="+diff+" timedOut="+timedOut+" for 
"+p.getPeer());
-                       boolean chosen=false;
-            if(diff < closestDistance) {
-               closestDistance = diff;
-                closest = p;
-                               chosen=true;
-                if(logMINOR) Logger.minor(this, "New best: "+diff+" ("+loc+" 
for "+p.getPeer());
-            }
-                       boolean backedOff=p.isRoutingBackedOff();
+                       if(logMINOR)
+                               Logger.minor(this, "p.loc=" + loc + ", target=" 
+ target + ", d=" + Location.distance(loc, target) + " usedD=" + diff + " 
timedOut=" + timedOut + " for " + p.getPeer());
+                       boolean chosen = false;
+                       if(diff < closestDistance) {
+                               closestDistance = diff;
+                               closest = p;
+                               chosen = true;
+                               if(logMINOR)
+                                       Logger.minor(this, "New best: " + diff 
+ " (" + loc + " for " + p.getPeer());
+                       }
+                       boolean backedOff = p.isRoutingBackedOff();
                        if(backedOff && (diff < closestBackedOffDistance) && 
!timedOut) {
-               closestBackedOffDistance = diff;
-                closestBackedOff = p;
-                               chosen=true;
-                if(logMINOR) Logger.minor(this, "New best-backed-off: "+diff+" 
("+loc+" for "+p.getPeer());
-            }
+                               closestBackedOffDistance = diff;
+                               closestBackedOff = p;
+                               chosen = true;
+                               if(logMINOR)
+                                       Logger.minor(this, "New 
best-backed-off: " + diff + " (" + loc + " for " + p.getPeer());
+                       }
                        if(!backedOff && (diff < closestNotBackedOffDistance) 
&& !timedOut) {
-               closestNotBackedOffDistance = diff;
-                closestNotBackedOff = p;
-                               chosen=true;
-                if(logMINOR) Logger.minor(this, "New best-not-backed-off: 
"+diff+" ("+loc+" for "+p.getPeer());
-            }
-                       if(timedOut) {
+                               closestNotBackedOffDistance = diff;
+                               closestNotBackedOff = p;
+                               chosen = true;
+                               if(logMINOR)
+                                       Logger.minor(this, "New 
best-not-backed-off: " + diff + " (" + loc + " for " + p.getPeer());
+                       }
+                       if(timedOut)
                                if(!backedOff) {
                                        if(timeout < timeLeastRecentlyTimedOut) 
{
                                                timeLeastRecentlyTimedOut = 
timeout;
                                                leastRecentlyTimedOut = p;
                                        }
-                               } else {
+                               } else
                                        if(timeout < 
timeLeastRecentlyTimedOutBackedOff) {
                                                
timeLeastRecentlyTimedOutBackedOff = timeout;
                                                leastRecentlyTimedOutBackedOff 
= p;
                                        }
-                               }
+                       if(addUnpickedLocsTo != null && !chosen) {
+                               Double d = new Double(loc);
+                               // Here we can directly compare double's 
because they aren't processed in any way, and are finite and (probably) nonzero.
+                               if(!addUnpickedLocsTo.contains(d))
+                                       addUnpickedLocsTo.add(d);
                        }
-               if(addUnpickedLocsTo != null && !chosen) {
-                       Double d = new Double(loc);
-                       // Here we can directly compare double's because they 
aren't processed in any way, and are finite and (probably) nonzero.
-                       if(!addUnpickedLocsTo.contains(d))
-                               addUnpickedLocsTo.add(d);
-               }
-        }
-               
+               }
+
                PeerNode best = closestNotBackedOff;
-               
-               if (best==null) {
+
+               if(best == null)
                        if(leastRecentlyTimedOut != null) {
                                // FIXME downgrade to DEBUG
                                best = leastRecentlyTimedOut;
-                               if(logMINOR) Logger.minor(this, "Using least 
recently failed in-timeout-period peer for key: "+best.shortToString()+" for 
"+key);
+                               if(logMINOR)
+                                       Logger.minor(this, "Using least 
recently failed in-timeout-period peer for key: " + best.shortToString() + " 
for " + key);
                        } else if(closestBackedOff != null) {
                                best = closestBackedOff;
-                               if(logMINOR) Logger.minor(this, "Using best 
backed-off peer for key: "+best.shortToString());
+                               if(logMINOR)
+                                       Logger.minor(this, "Using best 
backed-off peer for key: " + best.shortToString());
                        } else if(leastRecentlyTimedOutBackedOff != null) {
                                best = leastRecentlyTimedOutBackedOff;
-                               if(logMINOR) Logger.minor(this, "Using least 
recently failed in-timeout-period backed-off peer for key: 
"+best.shortToString()+" for "+key);
+                               if(logMINOR)
+                                       Logger.minor(this, "Using least 
recently failed in-timeout-period backed-off peer for key: " + 
best.shortToString() + " for " + key);
                        }
-               }
-               
+
                //racy... getLocation() could have changed
-       if (calculateMisrouting) {
-               if (best != null) {
-                       
node.nodeStats.routingMissDistance.report(Location.distance(best, 
closest.getLocation()));
-                       int numberOfConnected = 
getPeerNodeStatusSize(PEER_NODE_STATUS_CONNECTED, false);
-                       int numberOfRoutingBackedOff = 
getPeerNodeStatusSize(PEER_NODE_STATUS_ROUTING_BACKED_OFF, false);
-                       if (numberOfRoutingBackedOff + numberOfConnected > 0 ) {
-                               node.nodeStats.backedOffPercent.report((double) 
numberOfRoutingBackedOff / (double) (numberOfRoutingBackedOff + 
numberOfConnected));
-                       }
+               if(calculateMisrouting)
+                       if(best != null) {
+                               
node.nodeStats.routingMissDistance.report(Location.distance(best, 
closest.getLocation()));
+                               int numberOfConnected = 
getPeerNodeStatusSize(PEER_NODE_STATUS_CONNECTED, false);
+                               int numberOfRoutingBackedOff = 
getPeerNodeStatusSize(PEER_NODE_STATUS_ROUTING_BACKED_OFF, false);
+                               if(numberOfRoutingBackedOff + numberOfConnected 
> 0)
+                                       
node.nodeStats.backedOffPercent.report((double) numberOfRoutingBackedOff / 
(double) (numberOfRoutingBackedOff + numberOfConnected));
                        }
-       }
-               
+
                //racy... getLocation() could have changed
-               if (best!=null && addUnpickedLocsTo!=null) {
+               if(best != null && addUnpickedLocsTo != null)
                        //Add the location which we did not pick, if it exists.
-                       if (closestNotBackedOff!=null && closestBackedOff!=null)
+                       if(closestNotBackedOff != null && closestBackedOff != 
null)
                                addUnpickedLocsTo.add(new 
Double(closestBackedOff.getLocation()));
-               }
-               
-        return best;
-    }

-    /**
-     * @return Some status information
-     */
-    public String getStatus() {
-        StringBuffer sb = new StringBuffer();
-        PeerNode[] peers;
-        synchronized (this) {
-            peers = myPeers;                   
+               return best;
+       }
+
+       /**
+        * @return Some status information
+        */
+       public String getStatus() {
+               StringBuffer sb = new StringBuffer();
+               PeerNode[] peers;
+               synchronized(this) {
+                       peers = myPeers;
                }
-        String[] status = new String[peers.length];
-        for(int i=0;i<peers.length;i++) {
-            PeerNode pn = peers[i];
-            status[i] = pn.getStatus(true).toString();
-           Version.seenVersion(pn.getVersion());
-        }
-        Arrays.sort(status);
-        for(int i=0;i<status.length;i++) {
-            sb.append(status[i]);
-            sb.append('\n');
-        }
-        return sb.toString();
-    }
+               String[] status = new String[peers.length];
+               for(int i = 0; i < peers.length; i++) {
+                       PeerNode pn = peers[i];
+                       status[i] = pn.getStatus(true).toString();
+                       Version.seenVersion(pn.getVersion());
+               }
+               Arrays.sort(status);
+               for(int i = 0; i < status.length; i++) {
+                       sb.append(status[i]);
+                       sb.append('\n');
+               }
+               return sb.toString();
+       }

-    /**
-     * @return TMCI peer list
-     */
-    public String getTMCIPeerList() {
-        StringBuffer sb = new StringBuffer();
-        PeerNode[] peers;
-        synchronized (this) {
+       /**
+        * @return TMCI peer list
+        */
+       public String getTMCIPeerList() {
+               StringBuffer sb = new StringBuffer();
+               PeerNode[] peers;
+               synchronized(this) {
                        peers = myPeers;
                }
-        String[] peerList = new String[peers.length];
-        for(int i=0;i<peers.length;i++) {
-            PeerNode pn = peers[i];
-            peerList[i] = pn.getTMCIPeerInfo();
-        }
-        Arrays.sort(peerList);
-        for(int i=0;i<peerList.length;i++) {
-            sb.append(peerList[i]);
-            sb.append('\n');
-        }
-        return sb.toString();
-    }
+               String[] peerList = new String[peers.length];
+               for(int i = 0; i < peers.length; i++) {
+                       PeerNode pn = peers[i];
+                       peerList[i] = pn.getTMCIPeerInfo();
+               }
+               Arrays.sort(peerList);
+               for(int i = 0; i < peerList.length; i++) {
+                       sb.append(peerList[i]);
+                       sb.append('\n');
+               }
+               return sb.toString();
+       }

-    public String getFreevizOutput() {
-        StringBuffer sb = new StringBuffer();
-        PeerNode[] peers;
-        synchronized (this) {
+       public String getFreevizOutput() {
+               StringBuffer sb = new StringBuffer();
+               PeerNode[] peers;
+               synchronized(this) {
                        peers = myPeers;
                }
-        String[] identity = new String[peers.length];
-        for(int i=0;i<peers.length;i++) {
-            PeerNode pn = peers[i];
-            identity[i] = pn.getFreevizOutput();
-        }
-        Arrays.sort(identity);
-        for(int i=0;i<identity.length;i++) {
-            sb.append(identity[i]);
-            sb.append('\n');
-        }
-        return sb.toString();
-    }
+               String[] identity = new String[peers.length];
+               for(int i = 0; i < peers.length; i++) {
+                       PeerNode pn = peers[i];
+                       identity[i] = pn.getFreevizOutput();
+               }
+               Arrays.sort(identity);
+               for(int i = 0; i < identity.length; i++) {
+                       sb.append(identity[i]);
+                       sb.append('\n');
+               }
+               return sb.toString();
+       }
+       private final Object writePeersSync = new Object();

-    private final Object writePeersSync = new Object();
-    
-    void writePeers() {
-       node.ps.queueTimedJob(new Runnable() {
+       void writePeers() {
+               node.ps.queueTimedJob(new Runnable() {
+
                        public void run() {
                                writePeersInner();
                        }
-       }, 0);
-    }
+               }, 0);
+       }

-    private void writePeersInner() {
-                   synchronized(writePeersSync) {
-                           if(darkFilename != null)
-                                   writePeersInner(darkFilename, 
getDarknetPeers());
-                           OpennetManager om = node.getOpennet();
-                           if(om != null) {
-                                   if(openFilename != null)
-                                           writePeersInner(openFilename, 
getOpennetPeers());
-                                   writePeersInner(om.getOldPeersFilename(), 
om.getOldPeers());
-                           }
-                   }
-    }
-    
-    /**
-     * Write the peers file to disk
-     */
-    private void writePeersInner(String filename, PeerNode[] peers) {
-        synchronized (writePeersSync) {
-            FileOutputStream fos = null;
-            String f = filename + ".bak";
-            try {
-                fos = new FileOutputStream(f);
-            } catch (FileNotFoundException e2) {
-                Logger.error(this, "Cannot write peers to disk: Cannot create "
-                        + f + " - " + e2, e2);
-               Closer.close(fos);
-                return;
-            }
-            OutputStreamWriter w = null;
+       private void writePeersInner() {
+               synchronized(writePeersSync) {
+                       if(darkFilename != null)
+                               writePeersInner(darkFilename, 
getDarknetPeers());
+                       OpennetManager om = node.getOpennet();
+                       if(om != null) {
+                               if(openFilename != null)
+                                       writePeersInner(openFilename, 
getOpennetPeers());
+                               writePeersInner(om.getOldPeersFilename(), 
om.getOldPeers());
+                       }
+               }
+       }
+
+       /**
+        * Write the peers file to disk
+        */
+       private void writePeersInner(String filename, PeerNode[] peers) {
+               synchronized(writePeersSync) {
+                       FileOutputStream fos = null;
+                       String f = filename + ".bak";
                        try {
+                               fos = new FileOutputStream(f);
+                       } catch(FileNotFoundException e2) {
+                               Logger.error(this, "Cannot write peers to disk: 
Cannot create " + f + " - " + e2, e2);
+                               Closer.close(fos);
+                               return;
+                       }
+                       OutputStreamWriter w = null;
+                       try {
                                w = new OutputStreamWriter(fos, "UTF-8");
-                       } catch (UnsupportedEncodingException e2) {
+                       } catch(UnsupportedEncodingException e2) {
                                Closer.close(w);
                                throw new Error("Impossible: JVM doesn't 
support UTF-8: " + e2, e2);
                        }
-            BufferedWriter bw = new BufferedWriter(w);
-            try {
-               boolean succeeded = writePeers(bw, peers);
-                bw.close(); bw = null;
-                if(!succeeded) return;
-               
-               File fnam = new File(filename);
-               FileUtil.renameTo(new File(f), fnam);
-            } catch (IOException e) {
-               try {
-                       fos.close();
-               } catch (IOException e1) {
-                       Logger.error(this, "Cannot close peers file: "+e, e);
-               }
-                Logger.error(this, "Cannot write file: " + e, e);
-                return; // don't overwrite old file!
-            } finally {
-                   Closer.close(bw);
-                   Closer.close(fos);
-           }
-        }
-    }
+                       BufferedWriter bw = new BufferedWriter(w);
+                       try {
+                               boolean succeeded = writePeers(bw, peers);
+                               bw.close();
+                               bw = null;
+                               if(!succeeded)
+                                       return;

-    public boolean writePeers(Writer bw) {
-       if(!writePeers(bw, getDarknetPeers())) return false;
-       if(!writePeers(bw, getOpennetPeers())) return false;
-       return true;
-    }
-    
+                               File fnam = new File(filename);
+                               FileUtil.renameTo(new File(f), fnam);
+                       } catch(IOException e) {
+                               try {
+                                       fos.close();
+                               } catch(IOException e1) {
+                                       Logger.error(this, "Cannot close peers 
file: " + e, e);
+                               }
+                               Logger.error(this, "Cannot write file: " + e, 
e);
+                               return; // don't overwrite old file!
+                       } finally {
+                               Closer.close(bw);
+                               Closer.close(fos);
+                       }
+               }
+       }
+
+       public boolean writePeers(Writer bw) {
+               if(!writePeers(bw, getDarknetPeers()))
+                       return false;
+               if(!writePeers(bw, getOpennetPeers()))
+                       return false;
+               return true;
+       }
+
        public boolean writePeers(Writer bw, PeerNode[] peers) {
-        for (int i = 0; i < peers.length; i++) {
-            try {
-                peers[i].write(bw);
-                bw.flush();
-            } catch (IOException e) {
-                try {
-                    bw.close();
-                } catch (IOException e1) {
-                    Logger.error(this, "Cannot close file!: " + e1, e1);
-                }
-                Logger.error(this, "Cannot write peers to disk: " + e, e);
-                return false;
-            }
-        }
-        return true;
+               for(int i = 0; i < peers.length; i++) {
+                       try {
+                               peers[i].write(bw);
+                               bw.flush();
+                       } catch(IOException e) {
+                               try {
+                                       bw.close();
+                               } catch(IOException e1) {
+                                       Logger.error(this, "Cannot close file!: 
" + e1, e1);
+                               }
+                               Logger.error(this, "Cannot write peers to disk: 
" + e, e);
+                               return false;
+                       }
+               }
+               return true;
        }

        /**
@@ -1094,7 +1133,8 @@
         * Also run the node's onConnectedPeers() method if applicable
         */
        public void updatePMUserAlert() {
-               if(ua == null) return;
+               if(ua == null)
+                       return;
                int peers, darknetPeers, opennetPeers;
                synchronized(this) {
                        darknetPeers = this.getDarknetPeers().length;
@@ -1102,7 +1142,7 @@
                        peers = darknetPeers + opennetPeers; // Seednodes don't 
count.
                }
                OpennetManager om = node.getOpennet();
-               
+
                boolean opennetDefinitelyPortForwarded;
                boolean opennetEnabled;
                boolean opennetAssumeNAT;
@@ -1140,11 +1180,12 @@

        public boolean anyConnectedPeers() {
                PeerNode[] conns;
-               synchronized (this) {
+               synchronized(this) {
                        conns = connectedPeers;
                }
-               for(int i=0;i<conns.length;i++) {
-                       if(conns[i].isRoutable()) return true;
+               for(int i = 0; i < conns.length; i++) {
+                       if(conns[i].isRoutable())
+                               return true;
                }
                return false;
        }
@@ -1154,10 +1195,10 @@
         */
        public void readExtraPeerData() {
                DarknetPeerNode[] peers = getDarknetPeers();
-               for (int i = 0; i < peers.length; i++) {
+               for(int i = 0; i < peers.length; i++) {
                        try {
                                peers[i].readExtraPeerData();
-                       } catch (Exception e) {
+                       } catch(Exception e) {
                                Logger.error(this, "Got exception while reading 
extra peer data", e);
                        }
                }
@@ -1167,136 +1208,133 @@
        }

        public void start() {
-        ua = new PeerManagerUserAlert(node.nodeStats);
-        updatePMUserAlert();
+               ua = new PeerManagerUserAlert(node.nodeStats);
+               updatePMUserAlert();
                node.clientCore.alerts.register(ua);
        }
-       
+
        public int countNonBackedOffPeers() {
                PeerNode[] peers;
                synchronized(this) {
                        peers = connectedPeers; // even if myPeers peers are 
connected they won't be routed to
                }
                int countNoBackoff = 0;
-               for(int i=0;i<peers.length;i++) {
-                       if(peers[i].isRoutable()) {
-                               if(!peers[i].isRoutingBackedOff()) 
countNoBackoff++;
-                       }
+               for(int i = 0; i < peers.length; i++) {
+                       if(peers[i].isRoutable())
+                               if(!peers[i].isRoutingBackedOff())
+                                       countNoBackoff++;
                }
                return countNoBackoff;
        }
-       
        // Stats stuff
-       
        /**
         * Update oldestNeverConnectedPeerAge if the timer has expired
         */
        public void maybeUpdateOldestNeverConnectedPeerAge(long now) {
                synchronized(this) {
-                       if(now <= nextOldestNeverConnectedPeerAgeUpdateTime) 
return;
+                       if(now <= nextOldestNeverConnectedPeerAgeUpdateTime)
+                               return;
                        nextOldestNeverConnectedPeerAgeUpdateTime = now + 
oldestNeverConnectedPeerAgeUpdateInterval;
                }
                oldestNeverConnectedPeerAge = 0;
                PeerNode[] peerList = myPeers;
-               for(int i=0;i<peerList.length;i++) {
+               for(int i = 0; i < peerList.length; i++) {
                        PeerNode pn = peerList[i];
-                       if(pn.getPeerNodeStatus() == 
PEER_NODE_STATUS_NEVER_CONNECTED) {
-                               if((now - pn.getPeerAddedTime()) > 
oldestNeverConnectedPeerAge) {
+                       if(pn.getPeerNodeStatus() == 
PEER_NODE_STATUS_NEVER_CONNECTED)
+                               if((now - pn.getPeerAddedTime()) > 
oldestNeverConnectedPeerAge)
                                        oldestNeverConnectedPeerAge = now - 
pn.getPeerAddedTime();
-                               }
-                       }
                }
                if(oldestNeverConnectedPeerAge > 0 && logMINOR)
-                       Logger.minor(this, "Oldest never connected peer is 
"+oldestNeverConnectedPeerAge+"ms old");
+                       Logger.minor(this, "Oldest never connected peer is " + 
oldestNeverConnectedPeerAge + "ms old");
                nextOldestNeverConnectedPeerAgeUpdateTime = now + 
oldestNeverConnectedPeerAgeUpdateInterval;
        }

        public long getOldestNeverConnectedPeerAge() {
-         return oldestNeverConnectedPeerAge;
+               return oldestNeverConnectedPeerAge;
        }

        /**
         * Log the current PeerNode status summary if the timer has expired
         */
        public void maybeLogPeerNodeStatusSummary(long now) {
-         if(now > nextPeerNodeStatusLogTime) {
-               if((now - nextPeerNodeStatusLogTime) > (10*1000) && 
nextPeerNodeStatusLogTime > 0)
-                 Logger.error(this,"maybeLogPeerNodeStatusSummary() not called 
for more than 10 seconds ("+(now - nextPeerNodeStatusLogTime)+").  PacketSender 
getting bogged down or something?");
-               
-               int numberOfConnected = 0;
-               int numberOfRoutingBackedOff = 0;
-               int numberOfTooNew = 0;
-               int numberOfTooOld = 0;
-               int numberOfDisconnected = 0;
-               int numberOfNeverConnected = 0;
-               int numberOfDisabled = 0;
-               int numberOfListenOnly = 0;
-               int numberOfListening = 0;
-               int numberOfBursting = 0;
-               int numberOfClockProblem = 0;
-               int numberOfConnError = 0;
-               int numberOfDisconnecting = 0;
-               int numberOfRoutingDisabled = 0;
-               
-               PeerNodeStatus[] pns = getPeerNodeStatuses(true);
-               
-               for(int i=0; i<pns.length; i++){
-                       if(pns[i] == null) {
-                               Logger.error(this, 
"getPeerNodeStatuses(true)["+i+"] == null!");
-                               continue;
+               if(now > nextPeerNodeStatusLogTime) {
+                       if((now - nextPeerNodeStatusLogTime) > (10 * 1000) && 
nextPeerNodeStatusLogTime > 0)
+                               Logger.error(this, 
"maybeLogPeerNodeStatusSummary() not called for more than 10 seconds (" + (now 
- nextPeerNodeStatusLogTime) + ").  PacketSender getting bogged down or 
something?");
+
+                       int numberOfConnected = 0;
+                       int numberOfRoutingBackedOff = 0;
+                       int numberOfTooNew = 0;
+                       int numberOfTooOld = 0;
+                       int numberOfDisconnected = 0;
+                       int numberOfNeverConnected = 0;
+                       int numberOfDisabled = 0;
+                       int numberOfListenOnly = 0;
+                       int numberOfListening = 0;
+                       int numberOfBursting = 0;
+                       int numberOfClockProblem = 0;
+                       int numberOfConnError = 0;
+                       int numberOfDisconnecting = 0;
+                       int numberOfRoutingDisabled = 0;
+
+                       PeerNodeStatus[] pns = getPeerNodeStatuses(true);
+
+                       for(int i = 0; i < pns.length; i++) {
+                               if(pns[i] == null) {
+                                       Logger.error(this, 
"getPeerNodeStatuses(true)[" + i + "] == null!");
+                                       continue;
+                               }
+                               switch(pns[i].getStatusValue()) {
+                                       case PEER_NODE_STATUS_CONNECTED:
+                                               numberOfConnected++;
+                                               break;
+                                       case 
PEER_NODE_STATUS_ROUTING_BACKED_OFF:
+                                               numberOfRoutingBackedOff++;
+                                               break;
+                                       case PEER_NODE_STATUS_TOO_NEW:
+                                               numberOfTooNew++;
+                                               break;
+                                       case PEER_NODE_STATUS_TOO_OLD:
+                                               numberOfTooOld++;
+                                               break;
+                                       case PEER_NODE_STATUS_DISCONNECTED:
+                                               numberOfDisconnected++;
+                                               break;
+                                       case PEER_NODE_STATUS_NEVER_CONNECTED:
+                                               numberOfNeverConnected++;
+                                               break;
+                                       case PEER_NODE_STATUS_DISABLED:
+                                               numberOfDisabled++;
+                                               break;
+                                       case PEER_NODE_STATUS_LISTEN_ONLY:
+                                               numberOfListenOnly++;
+                                               break;
+                                       case PEER_NODE_STATUS_LISTENING:
+                                               numberOfListening++;
+                                               break;
+                                       case PEER_NODE_STATUS_BURSTING:
+                                               numberOfBursting++;
+                                               break;
+                                       case PEER_NODE_STATUS_CLOCK_PROBLEM:
+                                               numberOfClockProblem++;
+                                               break;
+                                       case PEER_NODE_STATUS_CONN_ERROR:
+                                               numberOfConnError++;
+                                               break;
+                                       case PEER_NODE_STATUS_DISCONNECTING:
+                                               numberOfDisconnecting++;
+                                               break;
+                                       case PEER_NODE_STATUS_ROUTING_DISABLED:
+                                               numberOfRoutingDisabled++;
+                                               break;
+                                       default:
+                                               Logger.error(this, "Unknown 
peer status value : " + pns[i].getStatusValue());
+                                               break;
+                               }
                        }
-                       switch (pns[i].getStatusValue()) {
-                       case PEER_NODE_STATUS_CONNECTED:
-                               numberOfConnected++;
-                               break;
-                       case PEER_NODE_STATUS_ROUTING_BACKED_OFF:
-                               numberOfRoutingBackedOff++;
-                               break;
-                       case PEER_NODE_STATUS_TOO_NEW:
-                               numberOfTooNew++;
-                               break;
-                       case PEER_NODE_STATUS_TOO_OLD:
-                               numberOfTooOld++;
-                               break;
-                       case PEER_NODE_STATUS_DISCONNECTED:
-                               numberOfDisconnected++;
-                               break;
-                       case PEER_NODE_STATUS_NEVER_CONNECTED:
-                               numberOfNeverConnected++;
-                               break;
-                       case PEER_NODE_STATUS_DISABLED:
-                               numberOfDisabled++;
-                               break;
-                       case PEER_NODE_STATUS_LISTEN_ONLY:
-                               numberOfListenOnly++;
-                               break;
-                       case PEER_NODE_STATUS_LISTENING:
-                               numberOfListening++;
-                               break;
-                       case PEER_NODE_STATUS_BURSTING:
-                               numberOfBursting++;
-                               break;
-                       case PEER_NODE_STATUS_CLOCK_PROBLEM:
-                               numberOfClockProblem++;
-                               break;
-                       case PEER_NODE_STATUS_CONN_ERROR:
-                               numberOfConnError++;
-                               break;
-                       case PEER_NODE_STATUS_DISCONNECTING:
-                               numberOfDisconnecting++;
-                               break;
-                       case PEER_NODE_STATUS_ROUTING_DISABLED:
-                               numberOfRoutingDisabled++;
-                               break;
-                       default:
-                               Logger.error(this, "Unknown peer status value : 
"+pns[i].getStatusValue());
-                               break;
-                       }
+                       Logger.normal(this, "Connected: " + numberOfConnected + 
"  Routing Backed Off: " + numberOfRoutingBackedOff + "  Too New: " + 
numberOfTooNew + "  Too Old: " + numberOfTooOld + "  Disconnected: " + 
numberOfDisconnected + "  Never Connected: " + numberOfNeverConnected + "  
Disabled: " + numberOfDisabled + "  Bursting: " + numberOfBursting + "  
Listening: " + numberOfListening + "  Listen Only: " + numberOfListenOnly + "  
Clock Problem: " + numberOfClockProblem + "  Connection Problem: " + 
numberOfConnError + "  Disconnecting: " + numberOfDisconnecting);
+                       nextPeerNodeStatusLogTime = now + 
peerNodeStatusLogInterval;
+                       node.displayClockProblemUserAlert(numberOfClockProblem 
> 2);
                }
-               Logger.normal(this, "Connected: "+numberOfConnected+"  Routing 
Backed Off: "+numberOfRoutingBackedOff+"  Too New: "+numberOfTooNew+"  Too Old: 
"+numberOfTooOld+"  Disconnected: "+numberOfDisconnected+"  Never Connected: 
"+numberOfNeverConnected+"  Disabled: "+numberOfDisabled+"  Bursting: 
"+numberOfBursting+"  Listening: "+numberOfListening+"  Listen Only: 
"+numberOfListenOnly+"  Clock Problem: "+numberOfClockProblem+"  Connection 
Problem: "+numberOfConnError+"  Disconnecting: "+numberOfDisconnecting);
-               nextPeerNodeStatusLogTime = now + peerNodeStatusLogInterval;
-               node.displayClockProblemUserAlert(numberOfClockProblem > 2);
-               }
        }

        /**
@@ -1315,14 +1353,15 @@
                        if(statuses.containsKey(peerNodeStatus)) {
                                statusSet = (HashSet) 
statuses.get(peerNodeStatus);
                                if(statusSet.contains(peerNode)) {
-                                       if(!noLog) Logger.error(this, 
"addPeerNodeStatus(): node already in peerNodeStatuses: "+peerNode+" status 
"+PeerNode.getPeerNodeStatusString(peerNodeStatus.intValue()));
+                                       if(!noLog)
+                                               Logger.error(this, 
"addPeerNodeStatus(): node already in peerNodeStatuses: " + peerNode + " status 
" + PeerNode.getPeerNodeStatusString(peerNodeStatus.intValue()));
                                        return;
                                }
                                statuses.remove(peerNodeStatus);
-                       } else {
+                       } else
                                statusSet = new HashSet();
-                       }
-                       if(logMINOR) Logger.minor(this, "addPeerNodeStatus(): 
adding PeerNode for '"+peerNode.getIdentityString()+"' with status 
'"+PeerNode.getPeerNodeStatusString(peerNodeStatus.intValue())+"'");
+                       if(logMINOR)
+                               Logger.minor(this, "addPeerNodeStatus(): adding 
PeerNode for '" + peerNode.getIdentityString() + "' with status '" + 
PeerNode.getPeerNodeStatusString(peerNodeStatus.intValue()) + "'");
                        statusSet.add(peerNode);
                        statuses.put(peerNodeStatus, statusSet);
                }
@@ -1337,11 +1376,10 @@
                HashSet statusSet = null;
                HashMap statuses = darknet ? peerNodeStatusesDarknet : 
this.peerNodeStatuses;
                synchronized(statuses) {
-                       if(statuses.containsKey(peerNodeStatus)) {
+                       if(statuses.containsKey(peerNodeStatus))
                                statusSet = (HashSet) 
statuses.get(peerNodeStatus);
-                       } else {
+                       else
                                statusSet = new HashSet();
-                       }
                        return statusSet.size();
                }
        }
@@ -1364,18 +1402,17 @@
                                statusSet = (HashSet) 
statuses.get(peerNodeStatus);
                                if(!statusSet.contains(peerNode)) {
                                        if(!noLog)
-                                               Logger.error(this, 
"removePeerNodeStatus(): identity '"+peerNode.getIdentityString()+" for 
"+peerNode.shortToString()+"' not in peerNodeStatuses with status 
'"+PeerNode.getPeerNodeStatusString(peerNodeStatus.intValue())+"'", new 
Exception("debug"));
+                                               Logger.error(this, 
"removePeerNodeStatus(): identity '" + peerNode.getIdentityString() + " for " + 
peerNode.shortToString() + "' not in peerNodeStatuses with status '" + 
PeerNode.getPeerNodeStatusString(peerNodeStatus.intValue()) + "'", new 
Exception("debug"));
                                        return;
                                }
                                if(statuses.isEmpty())
                                        statuses.remove(peerNodeStatus);
-                       } else {
+                       } else
                                statusSet = new HashSet();
-                       }
-                       if(logMINOR) Logger.minor(this, 
"removePeerNodeStatus(): removing PeerNode for 
'"+peerNode.getIdentityString()+"' with status 
'"+PeerNode.getPeerNodeStatusString(peerNodeStatus.intValue())+"'");
-                       if(statusSet.contains(peerNode)) {
+                       if(logMINOR)
+                               Logger.minor(this, "removePeerNodeStatus(): 
removing PeerNode for '" + peerNode.getIdentityString() + "' with status '" + 
PeerNode.getPeerNodeStatusString(peerNodeStatus.intValue()) + "'");
+                       if(statusSet.contains(peerNode))
                                statusSet.remove(peerNode);
-                       }
                }
        }

@@ -1388,31 +1425,31 @@
                        
if(peerNodeRoutingBackoffReasons.containsKey(peerNodeRoutingBackoffReason)) {
                                reasonSet = (HashSet) 
peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason);
                                if(reasonSet.contains(peerNode)) {
-                                       Logger.error(this, 
"addPeerNodeRoutingBackoffReason(): identity '"+peerNode.getIdentityString()+"' 
already in peerNodeRoutingBackoffReasons as "+peerNode.getPeer()+" with status 
code "+peerNodeRoutingBackoffReason);
+                                       Logger.error(this, 
"addPeerNodeRoutingBackoffReason(): identity '" + peerNode.getIdentityString() 
+ "' already in peerNodeRoutingBackoffReasons as " + peerNode.getPeer() + " 
with status code " + peerNodeRoutingBackoffReason);
                                        return;
                                }
                                
peerNodeRoutingBackoffReasons.remove(peerNodeRoutingBackoffReason);
-                       } else {
+                       } else
                                reasonSet = new HashSet();
-                       }
-                       if(logMINOR) Logger.minor(this, 
"addPeerNodeRoutingBackoffReason(): adding PeerNode for 
'"+peerNode.getIdentityString()+"' with status code 
"+peerNodeRoutingBackoffReason);
+                       if(logMINOR)
+                               Logger.minor(this, 
"addPeerNodeRoutingBackoffReason(): adding PeerNode for '" + 
peerNode.getIdentityString() + "' with status code " + 
peerNodeRoutingBackoffReason);
                        reasonSet.add(peerNode);
                        
peerNodeRoutingBackoffReasons.put(peerNodeRoutingBackoffReason, reasonSet);
                }
        }
-       
+
        /**
         * What are the currently tracked PeerNode routing backoff reasons?
         */
-       public String [] getPeerNodeRoutingBackoffReasons() {
-               String [] reasonStrings;
+       public String[] getPeerNodeRoutingBackoffReasons() {
+               String[] reasonStrings;
                synchronized(peerNodeRoutingBackoffReasons) {
-                       reasonStrings = (String []) 
peerNodeRoutingBackoffReasons.keySet().toArray(new 
String[peerNodeRoutingBackoffReasons.size()]);
+                       reasonStrings = (String[]) 
peerNodeRoutingBackoffReasons.keySet().toArray(new 
String[peerNodeRoutingBackoffReasons.size()]);
                }
                Arrays.sort(reasonStrings);
                return reasonStrings;
        }
-       
+
        /**
         * How many PeerNodes have a particular routing backoff reason?
         */
@@ -1422,9 +1459,8 @@
                        
if(peerNodeRoutingBackoffReasons.containsKey(peerNodeRoutingBackoffReason)) {
                                reasonSet = (HashSet) 
peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason);
                                return reasonSet.size();
-                       } else {
+                       } else
                                return 0;
-                       }
                }
        }

@@ -1437,48 +1473,46 @@
                        
if(peerNodeRoutingBackoffReasons.containsKey(peerNodeRoutingBackoffReason)) {
                                reasonSet = (HashSet) 
peerNodeRoutingBackoffReasons.get(peerNodeRoutingBackoffReason);
                                if(!reasonSet.contains(peerNode)) {
-                                       Logger.error(this, 
"removePeerNodeRoutingBackoffReason(): identity 
'"+peerNode.getIdentityString()+"' not in peerNodeRoutingBackoffReasons with 
status code "+peerNodeRoutingBackoffReason, new Exception("debug"));
+                                       Logger.error(this, 
"removePeerNodeRoutingBackoffReason(): identity '" + 
peerNode.getIdentityString() + "' not in peerNodeRoutingBackoffReasons with 
status code " + peerNodeRoutingBackoffReason, new Exception("debug"));
                                        return;
                                }
                                
peerNodeRoutingBackoffReasons.remove(peerNodeRoutingBackoffReason);
-                       } else {
+                       } else
                                reasonSet = new HashSet();
-                       }
-                       if(logMINOR) Logger.minor(this, 
"removePeerNodeRoutingBackoffReason(): removing PeerNode for 
'"+peerNode.getIdentityString()+"' with status code 
"+peerNodeRoutingBackoffReason);
-                       if(reasonSet.contains(peerNode)) {
+                       if(logMINOR)
+                               Logger.minor(this, 
"removePeerNodeRoutingBackoffReason(): removing PeerNode for '" + 
peerNode.getIdentityString() + "' with status code " + 
peerNodeRoutingBackoffReason);
+                       if(reasonSet.contains(peerNode))
                                reasonSet.remove(peerNode);
-                       }
-                       if(reasonSet.size() > 0) {
+                       if(reasonSet.size() > 0)
                                
peerNodeRoutingBackoffReasons.put(peerNodeRoutingBackoffReason, reasonSet);
-                       }
                }
        }

        public PeerNodeStatus[] getPeerNodeStatuses(boolean noHeavy) {
-        PeerNode[] peers;
-        synchronized (this) {
+               PeerNode[] peers;
+               synchronized(this) {
                        peers = myPeers;
                }
                PeerNodeStatus[] _peerNodeStatuses = new 
PeerNodeStatus[peers.length];
-               for (int peerIndex = 0, peerCount = peers.length; peerIndex < 
peerCount; peerIndex++) {
+               for(int peerIndex = 0, peerCount = peers.length; peerIndex < 
peerCount; peerIndex++) {
                        _peerNodeStatuses[peerIndex] = 
peers[peerIndex].getStatus(noHeavy);
                }
                return _peerNodeStatuses;
        }

        public DarknetPeerNodeStatus[] getDarknetPeerNodeStatuses(boolean 
noHeavy) {
-        DarknetPeerNode[] peers = getDarknetPeers();
+               DarknetPeerNode[] peers = getDarknetPeers();
                DarknetPeerNodeStatus[] _peerNodeStatuses = new 
DarknetPeerNodeStatus[peers.length];
-               for (int peerIndex = 0, peerCount = peers.length; peerIndex < 
peerCount; peerIndex++) {
+               for(int peerIndex = 0, peerCount = peers.length; peerIndex < 
peerCount; peerIndex++) {
                        _peerNodeStatuses[peerIndex] = (DarknetPeerNodeStatus) 
peers[peerIndex].getStatus(noHeavy);
                }
                return _peerNodeStatuses;
        }

        public OpennetPeerNodeStatus[] getOpennetPeerNodeStatuses(boolean 
noHeavy) {
-        OpennetPeerNode[] peers = getOpennetPeers();
+               OpennetPeerNode[] peers = getOpennetPeers();
                OpennetPeerNodeStatus[] _peerNodeStatuses = new 
OpennetPeerNodeStatus[peers.length];
-               for (int peerIndex = 0, peerCount = peers.length; peerIndex < 
peerCount; peerIndex++) {
+               for(int peerIndex = 0, peerCount = peers.length; peerIndex < 
peerCount; peerIndex++) {
                        _peerNodeStatuses[peerIndex] = (OpennetPeerNodeStatus) 
peers[peerIndex].getStatus(noHeavy);
                }
                return _peerNodeStatuses;
@@ -1489,16 +1523,17 @@
         */
        public void maybeUpdatePeerNodeRoutableConnectionStats(long now) {
                synchronized(this) {
-                       if(now <= nextRoutableConnectionStatsUpdateTime) return;
+                       if(now <= nextRoutableConnectionStatsUpdateTime)
+                               return;
                        nextRoutableConnectionStatsUpdateTime = now + 
routableConnectionStatsUpdateInterval;
                }
-               if(-1 != nextRoutableConnectionStatsUpdateTime) {
+               if(-1 != nextRoutableConnectionStatsUpdateTime) {
                        PeerNode[] peerList = myPeers;
-                       for(int i=0;i<peerList.length;i++) {
+                       for(int i = 0; i < peerList.length; i++) {
                                PeerNode pn = peerList[i];
                                pn.checkRoutableConnectionStatus();
                        }
-               }
+               }
        }

        /**
@@ -1512,11 +1547,11 @@
                }
                // FIXME optimise! Maybe maintain as a separate list?
                Vector v = new Vector(myPeers.length);
-               for(int i=0;i<peers.length;i++) {
+               for(int i = 0; i < peers.length; i++) {
                        if(peers[i] instanceof DarknetPeerNode)
                                v.add(peers[i]);
                }
-               return (DarknetPeerNode[])v.toArray(new 
DarknetPeerNode[v.size()]);
+               return (DarknetPeerNode[]) v.toArray(new 
DarknetPeerNode[v.size()]);
        }

        public Vector getConnectedSeedServerPeersVector(HashSet exclude) {
@@ -1526,16 +1561,16 @@
                }
                // FIXME optimise! Maybe maintain as a separate list?
                Vector v = new Vector(myPeers.length);
-               for(int i=0;i<peers.length;i++) {
+               for(int i = 0; i < peers.length; i++) {
                        if(peers[i] instanceof SeedServerPeerNode) {
                                if(exclude != null && 
exclude.contains(peers[i].getIdentity())) {
                                        if(logMINOR)
-                                               Logger.minor(this, "Not 
including in getConnectedSeedServerPeersVector() as in exclude set: 
"+peers[i].userToString());
+                                               Logger.minor(this, "Not 
including in getConnectedSeedServerPeersVector() as in exclude set: " + 
peers[i].userToString());
                                        continue;
                                }
                                if(!peers[i].isConnected()) {
                                        if(logMINOR)
-                                               Logger.minor(this, "Not 
including in getConnectedSeedServerPeersVector() as disconnected: 
"+peers[i].userToString());
+                                               Logger.minor(this, "Not 
including in getConnectedSeedServerPeersVector() as disconnected: " + 
peers[i].userToString());
                                        continue;
                                }
                                v.add(peers[i]);
@@ -1543,7 +1578,7 @@
                }
                return v;
        }
-       
+
        public Vector getSeedServerPeersVector() {
                PeerNode[] peers;
                synchronized(this) {
@@ -1551,14 +1586,13 @@
                }
                // FIXME optimise! Maybe maintain as a separate list?
                Vector v = new Vector(myPeers.length);
-               for(int i=0;i<peers.length;i++) {
-                       if(peers[i] instanceof SeedServerPeerNode) {
+               for(int i = 0; i < peers.length; i++) {
+                       if(peers[i] instanceof SeedServerPeerNode)
                                v.add(peers[i]);
-                       }
                }
                return v;
        }
-       
+
        /**
         * Get the opennet peers list.
         */
@@ -1569,11 +1603,11 @@
                }
                // FIXME optimise! Maybe maintain as a separate list?
                Vector v = new Vector(myPeers.length);
-               for(int i=0;i<peers.length;i++) {
+               for(int i = 0; i < peers.length; i++) {
                        if(peers[i] instanceof OpennetPeerNode)
                                v.add(peers[i]);
                }
-               return (OpennetPeerNode[])v.toArray(new 
OpennetPeerNode[v.size()]);
+               return (OpennetPeerNode[]) v.toArray(new 
OpennetPeerNode[v.size()]);
        }

        public boolean anyConnectedPeerHasAddress(FreenetInetAddress addr, 
PeerNode pn) {
@@ -1581,12 +1615,16 @@
                synchronized(this) {
                        peers = myPeers;
                }
-               for(int i=0;i<peers.length;i++) {
-                       if(peers[i] == pn) continue;
-                       if(!peers[i].isConnected()) continue;
-                       if(!peers[i].isRealConnection()) continue; // Ignore 
non-searchable peers i.e. bootstrapping peers
+               for(int i = 0; i < peers.length; i++) {
+                       if(peers[i] == pn)
+                               continue;
+                       if(!peers[i].isConnected())
+                               continue;
+                       if(!peers[i].isRealConnection())
+                               continue; // Ignore non-searchable peers i.e. 
bootstrapping peers
                        // If getPeer() is null then presumably !isConnected().
-                       if(peers[i].getPeer().getFreenetAddress().equals(addr)) 
return true;
+                       if(peers[i].getPeer().getFreenetAddress().equals(addr))
+                               return true;
                }
                return false;
        }
@@ -1595,11 +1633,13 @@
                synchronized(this) {
                        Vector keep = new Vector();
                        Vector conn = new Vector();
-                       for(int i=0;i<myPeers.length;i++) {
+                       for(int i = 0; i < myPeers.length; i++) {
                                PeerNode pn = myPeers[i];
-                               if(pn instanceof OpennetPeerNode) continue;
+                               if(pn instanceof OpennetPeerNode)
+                                       continue;
                                keep.add(pn);
-                               if(pn.isConnected()) conn.add(pn);
+                               if(pn.isConnected())
+                                       conn.add(pn);
                        }
                        myPeers = (PeerNode[]) keep.toArray(new 
PeerNode[keep.size()]);
                        connectedPeers = (PeerNode[]) keep.toArray(new 
PeerNode[conn.size()]);
@@ -1608,78 +1648,98 @@
        }

        public PeerNode containsPeer(PeerNode pn) {
-               PeerNode[] peers = pn.isOpennet() ? 
((PeerNode[])getOpennetPeers()) : ((PeerNode[])getDarknetPeers());
-               
-               for(int i=0;i<peers.length;i++)
-                       if(Arrays.equals(pn.getIdentity(), 
peers[i].getIdentity())) return peers[i];
-               
+               PeerNode[] peers = pn.isOpennet() ? ((PeerNode[]) 
getOpennetPeers()) : ((PeerNode[]) getDarknetPeers());
+
+               for(int i = 0; i < peers.length; i++)
+                       if(Arrays.equals(pn.getIdentity(), 
peers[i].getIdentity()))
+                               return peers[i];
+
                return null;
        }

        public int quickCountConnectedPeers() {
                PeerNode[] conns = connectedPeers;
-               if(conns == null) return 0;
+               if(conns == null)
+                       return 0;
                return connectedPeers.length;
        }

        public int countConnectedDarknetPeers() {
                int count = 0;
                PeerNode[] peers = myPeers;
-               for(int i=0;i<peers.length;i++) {
-                       if(peers[i] == null) continue;
-                       if(!(peers[i] instanceof DarknetPeerNode)) continue;
-                       if(peers[i].isOpennet()) continue;
-                       if(!peers[i].isRoutable()) continue;
+               for(int i = 0; i < peers.length; i++) {
+                       if(peers[i] == null)
+                               continue;
+                       if(!(peers[i] instanceof DarknetPeerNode))
+                               continue;
+                       if(peers[i].isOpennet())
+                               continue;
+                       if(!peers[i].isRoutable())
+                               continue;
                        count++;
                }
                return count;
        }
-       
+
        public int countConnectedPeers() {
                int count = 0;
                PeerNode[] peers = myPeers;
-               for(int i=0;i<peers.length;i++) {
-                       if(peers[i] == null) continue;
-                       if(!peers[i].isRoutable()) continue;
+               for(int i = 0; i < peers.length; i++) {
+                       if(peers[i] == null)
+                               continue;
+                       if(!peers[i].isRoutable())
+                               continue;
                        count++;
                }
                return count;
        }
-       
+
        public int countAlmostConnectedDarknetPeers() {
                int count = 0;
                PeerNode[] peers = myPeers;
-               for(int i=0;i<peers.length;i++) {
-                       if(peers[i] == null) continue;
-                       if(!(peers[i] instanceof DarknetPeerNode)) continue;
-                       if(peers[i].isOpennet()) continue;
-                       if(!peers[i].isConnected()) continue;
+               for(int i = 0; i < peers.length; i++) {
+                       if(peers[i] == null)
+                               continue;
+                       if(!(peers[i] instanceof DarknetPeerNode))
+                               continue;
+                       if(peers[i].isOpennet())
+                               continue;
+                       if(!peers[i].isConnected())
+                               continue;
                        count++;
                }
                return count;
        }
-       
+
        public int countCompatibleDarknetPeers() {
                int count = 0;
                PeerNode[] peers = myPeers;
-               for(int i=0;i<peers.length;i++) {
-                       if(peers[i] == null) continue;
-                       if(!(peers[i] instanceof DarknetPeerNode)) continue;
-                       if(peers[i].isOpennet()) continue;
-                       if(!peers[i].isConnected()) continue;
-                       if(!peers[i].isRoutingCompatible()) continue;
+               for(int i = 0; i < peers.length; i++) {
+                       if(peers[i] == null)
+                               continue;
+                       if(!(peers[i] instanceof DarknetPeerNode))
+                               continue;
+                       if(peers[i].isOpennet())
+                               continue;
+                       if(!peers[i].isConnected())
+                               continue;
+                       if(!peers[i].isRoutingCompatible())
+                               continue;
                        count++;
                }
                return count;
        }
-       
+
        public int countConnectedOpennetPeers() {
                int count = 0;
                PeerNode[] peers = connectedPeers;
-               for(int i=0;i<peers.length;i++) {
-                       if(peers[i] == null) continue;
-                       if(!(peers[i] instanceof OpennetPeerNode)) continue;
-                       if(!peers[i].isRoutable()) continue;
+               for(int i = 0; i < peers.length; i++) {
+                       if(peers[i] == null)
+                               continue;
+                       if(!(peers[i] instanceof OpennetPeerNode))
+                               continue;
+                       if(!peers[i].isRoutable())
+                               continue;
                        count++;
                }
                return count;
@@ -1691,9 +1751,11 @@
        public int countValidPeers() {
                PeerNode[] peers = myPeers;
                int count = 0;
-               for(int i=0;i<peers.length;i++) {
-                       if(!peers[i].isRealConnection()) continue;
-                       if(peers[i].isDisabled()) continue;
+               for(int i = 0; i < peers.length; i++) {
+                       if(!peers[i].isRealConnection())
+                               continue;
+                       if(peers[i].isDisabled())
+                               continue;
                        count++;
                }
                return count;
@@ -1702,22 +1764,23 @@
        public int countBackedOffPeers() {
                PeerNode[] peers = myPeers;
                int count = 0;
-               for(int i=0;i<peers.length;i++) {
-                       if(!peers[i].isRealConnection()) continue;
-                       if(peers[i].isDisabled()) continue;
+               for(int i = 0; i < peers.length; i++) {
+                       if(!peers[i].isRealConnection())
+                               continue;
+                       if(peers[i].isDisabled())
+                               continue;
                        if(peers[i].isRoutingBackedOff())
                                count++;
                }
                return count;
        }
-       
+
        public PeerNode getByIdentity(byte[] identity) {
                PeerNode[] peers = myPeers;
-               for(int i=0;i<peers.length;i++) {
+               for(int i = 0; i < peers.length; i++) {
                        if(Arrays.equals(peers[i].getIdentity(), identity))
                                return peers[i];
                }
                return null;
        }
-
 }


Reply via email to