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: ").append(numberOfNeverConnected).append("</span></li>");
}
+ if (numberOfDisabled > 0) {
+ buf.append("<li><span
class=\"peer_never_connected\">Disabled: ").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(" <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;
+ }
}