Author: toad
Date: 2007-09-14 19:47:37 +0000 (Fri, 14 Sep 2007)
New Revision: 15181
Modified:
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/NodeDispatcher.java
Log:
Handle explicit disconnect message
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2007-09-14 19:40:53 UTC (rev
15180)
+++ trunk/freenet/src/freenet/node/Node.java 2007-09-14 19:47:37 UTC (rev
15181)
@@ -2329,7 +2329,7 @@
/**
* Handle a received node to node message
*/
- public void receivedNodeToNodeMessage(Message m) {
+ public void receivedNodeToNodeMessage(Message m, boolean parting) {
PeerNode src = (PeerNode) m.getSource();
if(!(src instanceof DarknetPeerNode)) {
Logger.error(this, "Got N2NTM from opennet node ?!?!?!: "+m+"
from "+src);
Modified: trunk/freenet/src/freenet/node/NodeDispatcher.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeDispatcher.java 2007-09-14 19:40:53 UTC
(rev 15180)
+++ trunk/freenet/src/freenet/node/NodeDispatcher.java 2007-09-14 19:47:37 UTC
(rev 15181)
@@ -87,8 +87,11 @@
return handleTime(m, source);
} else if(spec == DMT.FNPVoid) {
return true;
+ } else if(spec == DMT.FNPDisconnect) {
+ handleDisconnect(m, source);
+ return true;
} else if(spec == DMT.nodeToNodeMessage) {
- node.receivedNodeToNodeMessage(m);
+ node.receivedNodeToNodeMessage(m, false);
return true;
} else if(spec == DMT.UOMAnnounce) {
return node.nodeUpdater.uom.handleAnnounce(m, source);
@@ -144,6 +147,22 @@
return false;
}
+ private void handleDisconnect(Message m, PeerNode source) {
+ source.disconnected();
+ // If true, remove from active routing table, likely to be down
for a while.
+ // Otherwise just dump all current connection state and keep
trying to connect.
+ boolean remove = m.getBoolean(DMT.REMOVE);
+ if(remove)
+ node.peers.disconnect(source);
+ // If true, purge all references to this node. Otherwise, we
can keep the node
+ // around in secondary tables etc in order to more easily
reconnect later.
+ // (Mostly used on opennet)
+ // Not used at the moment - FIXME
+ boolean purge = m.getBoolean(DMT.PURGE);
+ // Process parting message
+ node.receivedNodeToNodeMessage(m, true);
+ }
+
private boolean handleTime(Message m, PeerNode source) {
long delta = m.getLong(DMT.TIME) - System.currentTimeMillis();
source.setTimeDelta(delta);