Author: zothar
Date: 2006-06-04 19:31:01 +0000 (Sun, 04 Jun 2006)
New Revision: 9050

Modified:
   trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/PeerManager.java
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/TextModeClientInterface.java
Log:
- More connect/disconnect -> add/remove nomenclature changes
- Add "by identity" to REMOVEPEER command in TMCI
- Added more TMCI commands
- Reworked usage of PeerNode status strings a little


Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-06-04 17:20:49 UTC (rev 9049)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-06-04 19:31:01 UTC (rev 9050)
@@ -207,24 +207,7 @@
                        for(int i=0;i<rows.length;i++) {
                                Object[] row = rows[i];
                                int x = ((Integer) row[2]).intValue();
-                               if(x == Node.PEER_NODE_STATUS_CONNECTED) {
-                                       row[2] = "<span 
class=\"peer_connected\">CONNECTED</span>";
-                               }
-                               else if(x == 
Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF) {
-                                       row[2] = "<span 
class=\"peer_backedoff\">BACKED OFF</span>";
-                               }
-                               else if(x == Node.PEER_NODE_STATUS_TOO_NEW) {
-                                       row[2] = "<span 
class=\"peer_too_new\">TOO NEW</span>";
-                               }
-                               else if(x == Node.PEER_NODE_STATUS_TOO_OLD) {
-                                       row[2] = "<span 
class=\"peer_too_old\">TOO OLD</span>";
-                               }
-                               else if(x == 
Node.PEER_NODE_STATUS_DISCONNECTED) {
-                                       row[2] = "<span 
class=\"peer_disconnected\">DISCONNECTED</span>";
-                               }
-                               else if(x == 
Node.PEER_NODE_STATUS_NEVER_CONNECTED) {
-                                       row[2] = "<span 
class=\"peer_never_connected\">NEVER CONNECTED</span>";
-                               }
+                               row[2] = "<span class=\""+((PeerNode) 
row[0]).getPeerNodeStatusCSSClassName()+"\">"+((PeerNode) 
row[0]).getPeerNodeStatusString()+"</span>";
                        }

                        // Turn array into HTML

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-06-04 17:20:49 UTC (rev 
9049)
+++ trunk/freenet/src/freenet/node/Node.java    2006-06-04 19:31:01 UTC (rev 
9050)
@@ -2463,6 +2463,8 @@
        StringBuffer sb = new StringBuffer();
        if (peers != null)
                sb.append(peers.getStatus());
+       else
+               sb.append("No peers yet");
        sb.append("\nInserts: ");
        int x = insertSenders.size();
        sb.append(x);
@@ -2485,6 +2487,18 @@
        sb.append('\n');
        return sb.toString();
     }
+
+    /**
+     * @return TMCI peer list
+     */
+    public String getTMCIPeerList() {
+       StringBuffer sb = new StringBuffer();
+       if (peers != null)
+               sb.append(peers.getTMCIPeerList());
+       else
+               sb.append("No peers yet");
+       return sb.toString();
+    }

     public int getNumInserts() {
         return insertSenders.size();

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2006-06-04 17:20:49 UTC 
(rev 9049)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2006-06-04 19:31:01 UTC 
(rev 9050)
@@ -438,6 +438,26 @@
         }
         return sb.toString();
     }
+
+    /**
+     * @return TMCI peer list
+     */
+    public String getTMCIPeerList() {
+        StringBuffer sb = new StringBuffer();
+        PeerNode[] peers = myPeers;
+        String[] peerList = new String[peers.length];
+        for(int i=0;i<myPeers.length;i++) {
+            PeerNode pn = myPeers[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 = myPeers;

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-06-04 17:20:49 UTC 
(rev 9049)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-06-04 19:31:01 UTC 
(rev 9050)
@@ -638,7 +638,7 @@
     }

     /**
-     * Is this node too old for us? (i.e. our lastGoodVersion is newer than 
it's version)
+     * Is this peer too old for us? (i.e. our lastGoodVersion is newer than 
it's version)
      * 
      */
     public boolean isVerifiedIncompatibleOlderVersion() {
@@ -646,7 +646,7 @@
     }

     /**
-     * Is this node too new for us? (i.e. our version is older than it's 
lastGoodVersion)
+     * Is this peer too new for us? (i.e. our version is older than it's 
lastGoodVersion)
      * 
      */
     public boolean isVerifiedIncompatibleNewerVersion() {
@@ -654,7 +654,7 @@
     }

     /**
-     * Is this node currently connected?
+     * Is this peer currently connected?
      * 
      * Note possible deadlocks! PeerManager calls this, we call
      * PeerManager in e.g. verified.
@@ -1419,6 +1419,14 @@
         return 
                (isConnected ? "CONNECTED   " : "DISCONNECTED") + " " + 
getPeer()+" "+myName+" "+currentLocation.getValue()+" "+getVersion()+" backoff: 
"+routingBackoffLength+" ("+(Math.max(routingBackedOffUntil - 
System.currentTimeMillis(),0))+")";
     }
+
+    public String getTMCIPeerInfo() {
+                   long now = System.currentTimeMillis();
+        int idle = (int) ((now - timeLastReceivedPacket) / 1000);
+        if(peerNodeStatus == Node.PEER_NODE_STATUS_NEVER_CONNECTED && 
peerAddedTime > 1)
+            idle = (int) ((now - peerAddedTime) / 1000);
+        return 
myName+"\t"+getPeer()+"\t"+getIdentityString()+"\t"+currentLocation.getValue()+"\t"+getPeerNodeStatusString()+"\t"+idle;
+    }

     public String getFreevizOutput() {
        return
@@ -1430,7 +1438,7 @@
     }

     /**
-     * Write our noderef to disk
+     * Write the peer's noderef to disk
      */
     public void write(Writer w) throws IOException {
         SimpleFieldSet fs = exportFieldSet();
@@ -1443,7 +1451,7 @@
     /**
      * Export metadata about the node as a SimpleFieldSet
      */
-    private SimpleFieldSet exportMetadataFieldSet() {
+    public SimpleFieldSet exportMetadataFieldSet() {
        SimpleFieldSet fs = new SimpleFieldSet(true);
        if(detectedPeer != null)
                fs.put("detected.udp", detectedPeer.toString());
@@ -1457,9 +1465,9 @@
        }

        /**
-     * Export our noderef as a SimpleFieldSet
+     * Export the peer's noderef as a SimpleFieldSet
      */
-    private SimpleFieldSet exportFieldSet() {
+    public SimpleFieldSet exportFieldSet() {
         SimpleFieldSet fs = new SimpleFieldSet(true);
         if(lastGoodVersion != null)
                fs.put("lastGoodVersion", lastGoodVersion);
@@ -1793,6 +1801,40 @@
                return peerNodeStatus;
   }

+  public String getPeerNodeStatusString() {
+       int status = peerNodeStatus;
+       if(status == Node.PEER_NODE_STATUS_CONNECTED)
+               return "CONNECTED";
+       if(status == Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF)
+               return "BACKED OFF";
+       if(status == Node.PEER_NODE_STATUS_TOO_NEW)
+               return "TOO NEW";
+       if(status == Node.PEER_NODE_STATUS_TOO_OLD)
+               return "TOO OLD";
+       if(status == Node.PEER_NODE_STATUS_DISCONNECTED)
+               return "DISCONNECTED";
+       if(status == Node.PEER_NODE_STATUS_NEVER_CONNECTED)
+               return "NEVER CONNECTED";
+       return "UNKNOWN STATUS";
+  }
+
+  public String getPeerNodeStatusCSSClassName() {
+       int status = peerNodeStatus;
+       if(status == Node.PEER_NODE_STATUS_CONNECTED)
+               return "peer_connected";
+       if(status == Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF)
+               return "peer_backedoff";
+       if(status == Node.PEER_NODE_STATUS_TOO_NEW)
+               return "peer_too_new";
+       if(status == Node.PEER_NODE_STATUS_TOO_OLD)
+               return "peer_too_old";
+       if(status == Node.PEER_NODE_STATUS_DISCONNECTED)
+               return "peer_disconnected";
+       if(status == Node.PEER_NODE_STATUS_NEVER_CONNECTED)
+               return "peer_never_connected";
+       return "peer_unknown_status";
+  }
+
        public synchronized void setPeerNodeStatus(long now) {
                int oldPeerNodeStatus = peerNodeStatus;
                if(isConnected) {

Modified: trunk/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterface.java 2006-06-04 
17:20:49 UTC (rev 9049)
+++ trunk/freenet/src/freenet/node/TextModeClientInterface.java 2006-06-04 
19:31:01 UTC (rev 9050)
@@ -149,10 +149,14 @@
 //        sb.append("SUBSCRIBE:<key> - subscribe to a publish/subscribe stream 
by key\r\n");
         sb.append("CONNECT:<filename|URL> - see ADDPEER:<filename|URL> 
below\r\n");
         sb.append("CONNECT:\\r\\n<noderef> - see ADDPEER:\\r\\n<noderef> 
below\r\n");
-        sb.append("DISCONNECT:<ip:port|name> - see REMOVEPEER:<ip:port|name> 
below\r\n");
-        sb.append("ADDPEER:<filename|URL> - connect to a node from its ref in 
a file/url.\r\n");
-        sb.append("ADDPEER:\\r\\n<noderef including an End on a line by 
itself> - enter a noderef directly.\r\n");
-        sb.append("REMOVEPEER:<ip:port|name> - disconnect from a node by 
providing it's ip+port or name\r\n");
+        sb.append("DISCONNECT:<ip:port|name> - see 
REMOVEPEER:<ip:port|name|identity> below\r\n");
+        sb.append("ADDPEER:<filename|URL> - add a peer from its ref in a 
file/url.\r\n");
+        sb.append("ADDPEER:\\r\\n<noderef including an End on a line by 
itself> - add a peer by entering a noderef directly.\r\n");
+        sb.append("HAVEPEER:<ip:port|name|identity> - report true/false on 
having a peer by providing it's ip+port, name, or identity\r\n");
+        sb.append("REMOVEPEER:<ip:port|name|identity> - remove a peer by 
providing it's ip+port, name, or identity\r\n");
+        sb.append("PEER:<ip:port|name|identity> - report the noderef of a peer 
(without metadata) by providing it's ip+port, name, or identity\r\n");
+        sb.append("PEERWMD:<ip:port|name|identity> - report the noderef of a 
peer (with metadata) by providing it's ip+port, name, or identity\r\n");
+        sb.append("PEERS - report tab delimited list of peers with name, 
ip+port, identity, location, status and idle time in seconds\r\n");
         sb.append("NAME:<new node name> - change the node's name.\r\n");
         sb.append("UPDATE ask the node to self-update if possible. \r\n");
 //        sb.append("SUBFILE:<filename> - append all data received from 
subscriptions to a file, rather than sending it to stdout.\r\n");
@@ -552,9 +556,9 @@
             SimpleFieldSet fs = n.exportPublicFieldSet();
             outsb.append(fs.toString());
             outsb.append(n.getStatus());
-           if(Version.buildNumber()<Version.highestSeenBuild){
-                   outsb.append("The latest version is : 
"+Version.highestSeenBuild);
-           }
+            if(Version.buildNumber()<Version.highestSeenBuild){
+                outsb.append("The latest version is : 
"+Version.highestSeenBuild);
+            }
         } else if(uline.startsWith("ADDPEER:") || 
uline.startsWith("CONNECT:")) {
             String key = null;
             if(uline.startsWith("CONNECT:")) {
@@ -571,13 +575,13 @@
             if(key.length() > 0) {
                 // Filename
                BufferedReader in;
-                outsb.append("Trying to connect to noderef in "+key);
+                outsb.append("Trying to add peer to node by noderef in 
"+key+"\r\n");
                 File f = new File(key);
                 if (f.isFile()) {
-                       outsb.append("Given string seems to be a file, 
loading...");
+                       outsb.append("Given string seems to be a file, 
loading...\r\n");
                        in = new BufferedReader(new FileReader(f));
                 } else {
-                       outsb.append("Given string seems to be an URL, 
loading...");
+                       outsb.append("Given string seems to be an URL, 
loading...\r\n");
                     URL url = new URL(key);
                     URLConnection uc = url.openConnection();
                        in = new BufferedReader(
@@ -590,7 +594,7 @@
             }
             if(content == null) return false;
             if(content.equals("")) return false;
-            connect(content);
+            addPeer(content);

         } else if(uline.startsWith("NAME:")) {
             outsb.append("Node name currently: "+n.myName);
@@ -604,19 +608,67 @@
             try{
                n.config.get("node").getOption("name").setValue(key);
                Logger.minor(this, "Setting node.name to "+key);
-                       }catch(Exception e){
-                               Logger.error(this, "Error setting node's name");
+            }catch(Exception e){
+               Logger.error(this, "Error setting node's name");
                }
                n.config.store();
+        } else if(uline.startsWith("HAVEPEER:")) {
+               String nodeIdentifier = 
(line.substring("HAVEPEER:".length())).trim();
+               if(havePeer(nodeIdentifier)) {
+                       outsb.append("true for "+nodeIdentifier);
+               } else {
+                       outsb.append("false for "+nodeIdentifier);
+               }
+               outsb.append("\r\n");
         } else if(uline.startsWith("REMOVEPEER:") || 
uline.startsWith("DISCONNECT:")) {
-               String ipAndPortOrName = null;
+               String nodeIdentifier = null;
                if(uline.startsWith("DISCONNECT:")) {
-                       ipAndPortOrName = 
line.substring("DISCONNECT:".length());
+                       nodeIdentifier = line.substring("DISCONNECT:".length());
                } else {
-                       ipAndPortOrName = 
line.substring("REMOVEPEER:".length());
+                       nodeIdentifier = line.substring("REMOVEPEER:".length());
                }
-               disconnect(ipAndPortOrName.trim());
-               
+               if(removePeer(nodeIdentifier)) {
+                       outsb.append("peer removed for "+nodeIdentifier);
+               } else {
+                       outsb.append("peer removal failed for "+nodeIdentifier);
+               }
+               outsb.append("\r\n");
+        } else if(uline.startsWith("PEER:")) {
+               String nodeIdentifier = 
(line.substring("PEER:".length())).trim();
+               if(!havePeer(nodeIdentifier)) {
+                       out.write(("no peer for 
"+nodeIdentifier+"\r\n").getBytes());
+                       out.flush();
+                       return false;
+               }
+               PeerNode pn = getPeer(nodeIdentifier);
+               if(pn == null) {
+                       out.write(("getPeer() failed to get peer details for 
"+nodeIdentifier+"\r\n\r\n").getBytes());
+                       out.flush();
+                       return false;
+               }
+               SimpleFieldSet fs = pn.exportFieldSet();
+               outsb.append(fs.toString());
+        } else if(uline.startsWith("PEERWMD:")) {
+               String nodeIdentifier = 
(line.substring("PEERWMD:".length())).trim();
+               if(!havePeer(nodeIdentifier)) {
+                       out.write(("no peer for 
"+nodeIdentifier+"\r\n").getBytes());
+                       out.flush();
+                       return false;
+               }
+               PeerNode pn = getPeer(nodeIdentifier);
+               if(pn == null) {
+                       out.write(("getPeer() failed to get peer details for 
"+nodeIdentifier+"\r\n\r\n").getBytes());
+                       out.flush();
+                       return false;
+               }
+               SimpleFieldSet fs = pn.exportFieldSet();
+               SimpleFieldSet meta = pn.exportMetadataFieldSet();
+               if(!meta.isEmpty())
+                       fs.put("metadata", meta);
+               outsb.append(fs.toString());
+        } else if(uline.startsWith("PEERS")) {
+               outsb.append(n.getTMCIPeerList());
+               outsb.append("PEERS done.\r\n");
         } else if(uline.startsWith("PLUGLOAD:")) {
                if (line.substring("PLUGLOAD:".length()).trim().equals("?")) {
                        outsb.append("  PLUGLOAD: pkg.Class                  - 
Load plugin from current classpath");                    
@@ -757,9 +809,9 @@
     }

     /**
-     * Connect to a node, given its reference.
+     * Add a peer to the node, given its reference.
      */
-    private void connect(String content) {
+    private void addPeer(String content) {
         SimpleFieldSet fs;
         System.out.println("Connecting to:\r\n"+content);
         try {
@@ -787,10 +839,9 @@
     }

     /**
-     * Disconnect from a node, given its ip and port, or name, as a String
+     * Return a peer of the node given its ip and port, name or identity, as a 
String
      */
-    private void disconnect(String nodeIdentifier) {
-       System.out.println("Disconnecting from node at: "+nodeIdentifier);
+    private PeerNode getPeer(String nodeIdentifier) {
        PeerNode[] pn = n.peers.myPeers;
        for(int i=0;i<pn.length;i++)
        {
@@ -800,14 +851,63 @@
                        nodeIpAndPort = 
peer.getAddress().getHostAddress()+":"+pn[i].getDetectedPeer().getPort();
                }
                String name = pn[i].myName;
-               if(nodeIpAndPort.equals(nodeIdentifier) || 
name.equals(nodeIdentifier))
+               String identity = pn[i].getIdentityString();
+               if(identity.equals(nodeIdentifier) || 
nodeIpAndPort.equals(nodeIdentifier) || name.equals(nodeIdentifier))
                {
-                       n.peers.disconnect(pn[i]);
-                       return;
+                       return pn[i];
                }
        }
-       System.out.println("No node in peers list at: "+nodeIdentifier);
+       return null;
     }
+    
+    /**
+     * Check for a peer of the node given its ip and port, name or identity, 
as a String
+     * Report peer existence as boolean
+     */
+    private boolean havePeer(String nodeIdentifier) {
+       PeerNode[] pn = n.peers.myPeers;
+       for(int i=0;i<pn.length;i++)
+       {
+               Peer peer = pn[i].getDetectedPeer();
+               String nodeIpAndPort = "";
+               if(peer != null) {
+                       nodeIpAndPort = 
peer.getAddress().getHostAddress()+":"+pn[i].getDetectedPeer().getPort();
+               }
+               String name = pn[i].myName;
+               String identity = pn[i].getIdentityString();
+               if(identity.equals(nodeIdentifier) || 
nodeIpAndPort.equals(nodeIdentifier) || name.equals(nodeIdentifier))
+               {
+                       return true;
+               }
+       }
+       return false;
+    }
+    
+    /**
+     * Remove a peer from the node given its ip and port, name or identity, as 
a String
+     * Report peer removal successfulness as boolean
+     */
+    private boolean removePeer(String nodeIdentifier) {
+       System.out.println("Removing peer from node for: "+nodeIdentifier);
+       PeerNode[] pn = n.peers.myPeers;
+       for(int i=0;i<pn.length;i++)
+       {
+               Peer peer = pn[i].getDetectedPeer();
+               String nodeIpAndPort = "";
+               if(peer != null) {
+                       nodeIpAndPort = 
peer.getAddress().getHostAddress()+":"+pn[i].getDetectedPeer().getPort();
+               }
+               String name = pn[i].myName;
+               String identity = pn[i].getIdentityString();
+               if(identity.equals(nodeIdentifier) || 
nodeIpAndPort.equals(nodeIdentifier) || name.equals(nodeIdentifier))
+               {
+                       n.removeDarknetConnection(pn[i]);
+                       return true;
+               }
+       }
+       System.out.println("No node in peers list for: "+nodeIdentifier);
+       return false;
+    }

     private String sanitize(String fnam) {
        if(fnam == null) return "";


Reply via email to