Author: tubbie
Date: 2005-12-10 14:13:49 +0000 (Sat, 10 Dec 2005)
New Revision: 7704
Modified:
trunk/freenet/src/freenet/node/PeerManager.java
trunk/freenet/src/freenet/node/TextModeClientInterface.java
trunk/freenet/src/freenet/node/Version.java
Log:
302:
Added possibility to disconnect from a node without restarting.
Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java 2005-12-10 00:50:31 UTC
(rev 7703)
+++ trunk/freenet/src/freenet/node/PeerManager.java 2005-12-10 14:13:49 UTC
(rev 7704)
@@ -12,6 +12,7 @@
import java.util.Arrays;
import java.util.HashSet;
import java.util.Vector;
+import java.util.ArrayList;
import freenet.io.comm.Message;
import freenet.io.comm.NotConnectedException;
@@ -102,6 +103,38 @@
Logger.normal(this, "Added "+pn);
return true;
}
+
+ private synchronized boolean removePeer(PeerNode pn) {
+ boolean isInPeers = false;
+ for(int i=0;i<myPeers.length;i++) {
+ if(myPeers[i].equals(pn)) isInPeers=true;
+ }
+ if(!isInPeers) return false;
+
+ // removing from connectedPeers
+ ArrayList a = new ArrayList();
+ for(int i=0;i<myPeers.length;i++) {
+ if(myPeers[i]!=pn)
+ 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);
+ return true;
+ }
public synchronized void addConnectedPeer(PeerNode pn) {
if(!pn.isConnected()) {
@@ -174,6 +207,13 @@
}
addPeer(pn);
}
+
+ /**
+ * Disconnect from a specified node
+ */
+ public void disconnect(PeerNode pn){
+ removePeer(pn);
+ }
/**
* @return An array of the current locations (as doubles) of all
Modified: trunk/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterface.java 2005-12-10
00:50:31 UTC (rev 7703)
+++ trunk/freenet/src/freenet/node/TextModeClientInterface.java 2005-12-10
14:13:49 UTC (rev 7704)
@@ -97,6 +97,7 @@
// System.out.println("SUBSCRIBE:<key> - subscribe to a
publish/subscribe stream by key");
System.out.println("CONNECT:<filename> - connect to a node from its
ref in a file.");
System.out.println("CONNECT:\n<noderef including an End on a line by
itself> - enter a noderef directly.");
+ System.out.println("DISCONNECT:<ip:port> - disconnect from a node by
providing it's ip+port");
System.out.println("NAME:<new node name> - change the node's name.");
// System.out.println("SUBFILE:<filename> - append all data received
from subscriptions to a file, rather than sending it to stdout.");
// System.out.println("SAY:<text> - send text to the last
created/pushed stream");
@@ -348,6 +349,9 @@
key = key.substring(0, key.length()-2);
System.out.println("New name: "+key);
n.setName(key);
+ } else if(uline.startsWith("DISCONNECT:")) {
+ String ipAndPort = line.substring("DISCONNECT:".length());
+ disconnect(ipAndPort.trim());
} else {
if(uline.length() > 0)
printHeader();
@@ -451,6 +455,24 @@
System.out.println("Added peer: "+pn);
n.peers.writePeers();
}
+
+ /**
+ * Disconnect from a node, given its ip and port as a String
+ */
+ private void disconnect(String ipAndPort) {
+ System.out.println("Disconnecting from node at: "+ipAndPort);
+ PeerNode[] pn = n.peers.myPeers;
+ for(int i=0;i<pn.length;i++)
+ {
+ String nodeIpAndPort =
pn[i].getPeer().getAddress().getHostAddress()+":"+pn[i].getPeer().getPort();
+ if(nodeIpAndPort.equals(ipAndPort))
+ {
+ n.peers.disconnect(pn[i]);
+ return;
+ }
+ }
+ System.out.println("No node in peers list at: "+ipAndPort);
+ }
private String sanitize(String fnam) {
if(fnam == null) return "";
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-12-10 00:50:31 UTC (rev
7703)
+++ trunk/freenet/src/freenet/node/Version.java 2005-12-10 14:13:49 UTC (rev
7704)
@@ -20,7 +20,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- public static final int buildNumber = 301;
+ public static final int buildNumber = 302;
/** Oldest build of Fred we will talk to */
public static final int lastGoodBuild = 300;