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 "";