Author: nextgens
Date: 2006-10-14 11:57:08 +0000 (Sat, 14 Oct 2006)
New Revision: 10661
Modified:
trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
Log:
Small hack on fproxy to deny node removal if there isn't one week of inactivity.
Maybe it should be done in Node.removeDarknetConnection insteed.
Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
2006-10-11 11:25:22 UTC (rev 10660)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
2006-10-14 11:57:08 UTC (rev 10661)
@@ -602,7 +602,6 @@
HTMLNode node = new HTMLNode("div");
node.addChild("#", "Unable to verify the
signature of the given reference ("+e1+").");
node.addChild("br");
- HTMLNode pre = node.addChild("pre",
fs.toOrderedString());
this.sendErrorPage(ctx, 200, "Failed To Add
Node", node);
return;
}
@@ -762,16 +761,20 @@
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();
-
+ } else if (request.isPartSet("remove") ||
(request.isPartSet("submit") &&
request.getPartAsString("action",25).equals("remove"))) {
if(logMINOR) Logger.minor(this, "Remove node");
PeerNode[] peerNodes = node.getDarknetConnections();
for(int i = 0; i < peerNodes.length; i++) {
- if
(request.isPartSet("node_"+peerNodes[i].hashCode())) {
-
this.node.removeDarknetConnection(peerNodes[i]);
- if(logMINOR) Logger.minor(this,
"Removed node: node_"+peerNodes[i].hashCode());
+ if
(request.isPartSet("node_"+peerNodes[i].hashCode())) {
+
if((peerNodes[i].timeLastConnectionCompleted() < (System.currentTimeMillis() -
1000*60*60*24*7) /* one week */) || (peerNodes[i].peerNodeStatus ==
Node.PEER_NODE_STATUS_NEVER_CONNECTED)){
+
this.node.removeDarknetConnection(peerNodes[i]);
+ if(logMINOR) Logger.minor(this,
"Removed node: node_"+peerNodes[i].hashCode());
+ }else{
+ if(logMINOR) Logger.minor(this,
"Refusing to remove : node_"+peerNodes[i].hashCode()+" (trying to prevent
network churn)");
+ this.sendErrorPage(ctx, 401,
"Error while removing the node", "Sorry, you can't remove nodes until they have
reached one week of inactivity.");
+ return; // FIXME: maybe it
breaks multi-node removing
+ }
} else {
if(logMINOR) Logger.minor(this, "Part
not set: node_"+peerNodes[i].hashCode());
}