Author: zothar
Date: 2006-06-24 00:00:33 +0000 (Sat, 24 Jun 2006)
New Revision: 9377

Modified:
   trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
Add initial support for DISABLED peers in advanced mode.  DISABLED peers are 
peers that we don't connect to, but still known to the node.  More to come 
later, such as saving the DISABLED peer status between restarts.

Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-06-23 21:48:04 UTC (rev 9376)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-06-24 00:00:33 UTC (rev 9377)
@@ -73,9 +73,10 @@
                int numberOfTooOld = 
node.getPeerNodeStatusSize(Node.PEER_NODE_STATUS_TOO_OLD);
                int numberOfDisconnected = 
node.getPeerNodeStatusSize(Node.PEER_NODE_STATUS_DISCONNECTED);
                int numberOfNeverConnected = 
node.getPeerNodeStatusSize(Node.PEER_NODE_STATUS_NEVER_CONNECTED);
+               int numberOfDisabled = 
node.getPeerNodeStatusSize(Node.PEER_NODE_STATUS_DISABLED);

                int numberOfSimpleConnected = numberOfConnected + 
numberOfRoutingBackedOff;
-               int numberOfNotConnected = numberOfTooNew + numberOfTooOld + 
numberOfDisconnected + numberOfNeverConnected;
+               int numberOfNotConnected = numberOfTooNew + numberOfTooOld + 
numberOfDisconnected + numberOfNeverConnected + numberOfDisabled;
                String titleCountString = null;
                if(advancedEnabled) {
                        titleCountString = "(" + numberOfConnected + "/" + 
numberOfRoutingBackedOff + "/" + numberOfNotConnected + ")";
@@ -180,6 +181,9 @@
                if (numberOfNeverConnected > 0) {
                        buf.append("<li><span 
class=\"peer_never_connected\">Never 
Connected:&nbsp;").append(numberOfNeverConnected).append("</span></li>");
                }
+               if (numberOfDisabled > 0) {
+                       buf.append("<li><span 
class=\"peer_never_connected\">Disabled:&nbsp;").append(numberOfDisabled).append("</span></li>");
  // **FIXME**
+               }
                buf.append("</ul>");
                buf.append("</div>");
                buf.append("</div>\n");
@@ -300,7 +304,7 @@
                                }

                                row[0] = pn;
-                               row[1] = "<input type=\"checkbox\" 
name=\"delete_node_"+pn.hashCode()+"\" />";
+                               row[1] = "<input type=\"checkbox\" 
name=\"node_"+pn.hashCode()+"\" />";
                                row[2] = status;
                                row[3] = 
namePrefixString+HTMLEncoder.encode(pn.getName())+nameSuffixString;
                                row[4] = ( pn.getDetectedPeer() != null ? 
HTMLEncoder.encode(pn.getDetectedPeer().toString()) : "(address unknown)" ) + 
avgPingTimeString;
@@ -382,8 +386,16 @@
                        //
                        buf.append(buf2);
                        //
-                       buf.append("<input type=\"submit\" name=\"remove\" 
value=\"Remove selected peers\" />");
-                       if(advancedEnabled) {
+                       if(!advancedEnabled) {
+                               buf.append("<input type=\"submit\" 
name=\"remove\" value=\"Remove selected peers\" />");
+                       } else {
+                               buf.append("<select name=\"action\">\n");
+                               buf.append(" <option value=\"\">-- Select 
Action --</option>\n");
+                               buf.append(" <option value=\"enable\">Enable 
Selected Peers</option>\n");
+                               buf.append(" <option value=\"disable\">Disable 
Selected Peers</option>\n");
+                               buf.append(" <option value=\"remove\">Remove 
Selected Peers</option>\n");
+                               buf.append("</select>\n");
+                               buf.append("<input type=\"submit\" 
name=\"submit\" value=\"Go\" />\n");
                                buf.append("&nbsp;&nbsp;&nbsp;<span 
class=\"darknet_connections\">* Requesting ARK</span>\n");
                        }
                        buf.append("<input type=\"hidden\" 
name=\"formPassword\" value=\"").append(node.formPassword).append("\" />");
@@ -522,12 +534,38 @@
                        headers.put("Location", "/darknet/");
                        ctx.sendReplyHeaders(302, "Found", headers, null, 0);
                        return;
-               } else if (request.isPartSet("remove")) {
+               } else if (request.isPartSet("submit") && 
request.getPartAsString("action",25).equals("enable")) {
                        //int hashcode = 
Integer.decode(request.getParam("node")).intValue();

                        PeerNode[] peerNodes = node.getDarknetConnections();
                        for(int i = 0; i < peerNodes.length; i++) {
-                               if 
(request.isPartSet("delete_node_"+peerNodes[i].hashCode())) {
+                               if 
(request.isPartSet("node_"+peerNodes[i].hashCode())) {
+                                       peerNodes[i].enablePeer();
+                               }
+                       }
+                       MultiValueTable headers = new MultiValueTable();
+                       headers.put("Location", "/darknet/");
+                       ctx.sendReplyHeaders(302, "Found", headers, null, 0);
+                       return;
+               } else if (request.isPartSet("submit") && 
request.getPartAsString("action",25).equals("disable")) {
+                       //int hashcode = 
Integer.decode(request.getParam("node")).intValue();
+                       
+                       PeerNode[] peerNodes = node.getDarknetConnections();
+                       for(int i = 0; i < peerNodes.length; i++) {
+                               if 
(request.isPartSet("node_"+peerNodes[i].hashCode())) {
+                                       peerNodes[i].disablePeer();
+                               }
+                       }
+                       MultiValueTable headers = new MultiValueTable();
+                       headers.put("Location", "/darknet/");
+                       ctx.sendReplyHeaders(302, "Found", headers, null, 0);
+                       return;
+               } else if (request.isPartSet("remove") || 
(request.isPartSet("submit") && 
request.getPartAsString("action",25).equals("remove"))) {
+                       //int hashcode = 
Integer.decode(request.getParam("node")).intValue();
+                       
+                       PeerNode[] peerNodes = node.getDarknetConnections();
+                       for(int i = 0; i < peerNodes.length; i++) {
+                               if 
(request.isPartSet("node_"+peerNodes[i].hashCode())) {
                                        
this.node.removeDarknetConnection(peerNodes[i]);
                                }
                        }

Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2006-06-23 
21:48:04 UTC (rev 9376)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2006-06-24 
00:00:33 UTC (rev 9377)
@@ -217,6 +217,9 @@
             Logger.error(this, "Decrypted auth packet but unknown packet type 
"+packetType+" from "+replyTo+" possibly from "+pn);
             return;
         }
+        if(pn.isDisabled()) {
+               return;  // We don't connect to disabled peers
+        }
         Logger.minor(this, "Version="+version+", negType="+negType+", 
packetType="+packetType);
         // We keep one DiffieHellmanContext per node ONLY
         /*

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-06-23 21:48:04 UTC (rev 
9376)
+++ trunk/freenet/src/freenet/node/Node.java    2006-06-24 00:00:33 UTC (rev 
9377)
@@ -572,6 +572,7 @@
        public static final int PEER_NODE_STATUS_TOO_OLD = 4;
        public static final int PEER_NODE_STATUS_DISCONNECTED = 5;
        public static final int PEER_NODE_STATUS_NEVER_CONNECTED = 6;
+       public static final int PEER_NODE_STATUS_DISABLED = 7;
        public static final int N2N_TEXT_MESSAGE_TYPE_USERALERT = 1;

        public final long bootID;

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-06-23 21:48:04 UTC 
(rev 9376)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-06-24 00:00:33 UTC 
(rev 9377)
@@ -230,6 +230,9 @@

     /** When this peer was added to this node */
     private long peerAddedTime = 1;
+    
+    /** True if this peer is not to be connected with */
+    private boolean isDisabled = false;

     /**
      * Create a PeerNode from a SimpleFieldSet containing a
@@ -811,7 +814,8 @@
      */
     public boolean shouldSendHandshake() {
         long now = System.currentTimeMillis();
-        return (!isConnected) && 
+        return (!isConnected) &&
+                               (!isDisabled) &&  // don't connect to disabled 
peers
                 (handshakeIPs != null) &&
                 (now > sendHandshakeTime) &&
                 !(hasLiveHandshake(now));
@@ -1855,6 +1859,8 @@
                return "DISCONNECTED";
        if(status == Node.PEER_NODE_STATUS_NEVER_CONNECTED)
                return "NEVER CONNECTED";
+       if(status == Node.PEER_NODE_STATUS_DISABLED)
+               return "DISABLED";
        return "UNKNOWN STATUS";
   }

@@ -1872,6 +1878,8 @@
                return "peer_disconnected";
        if(status == Node.PEER_NODE_STATUS_NEVER_CONNECTED)
                return "peer_never_connected";
+       if(status == Node.PEER_NODE_STATUS_DISABLED)
+               return "peer_disconnected";  // **FIXME**
        return "peer_unknown_status";
   }

@@ -1894,6 +1902,8 @@
                                        previousRoutingBackoffReason = null;
                                }
                        }
+               } else if(isDisabled) {
+                       peerNodeStatus = Node.PEER_NODE_STATUS_DISABLED;
                } else if(completedHandshake && 
verifiedIncompatibleNewerVersion) {
                        peerNodeStatus = Node.PEER_NODE_STATUS_TOO_NEW;
                } else if(completedHandshake && 
verifiedIncompatibleOlderVersion) {
@@ -1924,5 +1934,22 @@
        public int getHandshakeCount() {
                return handshakeCount;
        }
+       
+       public void enablePeer() {
+               isDisabled = false;
+               setPeerNodeStatus(System.currentTimeMillis());
+       }
+       
+       public void disablePeer() {
+               if(isConnected) {
+                       return;
+               }
+               isDisabled = true;
+               setPeerNodeStatus(System.currentTimeMillis());
+       }
+
+       public boolean isDisabled() {
+               return isDisabled;
+       }
 }



Reply via email to