Author: nextgens
Date: 2006-07-12 16:08:14 +0000 (Wed, 12 Jul 2006)
New Revision: 9578
Modified:
trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
trunk/freenet/src/freenet/io/comm/DummyPeerContext.java
trunk/freenet/src/freenet/io/comm/PeerContext.java
trunk/freenet/src/freenet/node/CHKInsertSender.java
trunk/freenet/src/freenet/node/LocationManager.java
trunk/freenet/src/freenet/node/NodeDispatcher.java
trunk/freenet/src/freenet/node/PacketSender.java
trunk/freenet/src/freenet/node/PeerManager.java
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/Version.java
Log:
477: More work on N2NM over mandatory
Only allow N2NM to builds > 476
Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
2006-07-12 16:01:17 UTC (rev 9577)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
2006-07-12 16:08:14 UTC (rev 9578)
@@ -303,7 +303,7 @@
}
String namePrefixString = "";
String nameSuffixString = "";
- if(pn.isConnected()) {
+ if(pn.isConnected() &&
(Integer.valueOf(pn.getSimpleVersion()).intValue() > 476)) {
namePrefixString = "<a
href=\"/send_n2ntm/?peernode_hashcode="+pn.hashCode()+"\">";
nameSuffixString = "</a>";
}
Modified: trunk/freenet/src/freenet/io/comm/DummyPeerContext.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/DummyPeerContext.java 2006-07-12
16:01:17 UTC (rev 9577)
+++ trunk/freenet/src/freenet/io/comm/DummyPeerContext.java 2006-07-12
16:08:14 UTC (rev 9578)
@@ -22,7 +22,7 @@
// Do nothing
}
- public boolean isReallyConnected() {
+ public boolean isRoutable() {
return false;
}
Modified: trunk/freenet/src/freenet/io/comm/PeerContext.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/PeerContext.java 2006-07-12 16:01:17 UTC
(rev 9577)
+++ trunk/freenet/src/freenet/io/comm/PeerContext.java 2006-07-12 16:08:14 UTC
(rev 9578)
@@ -17,5 +17,5 @@
boolean isConnected();
/** Is the peer connected? are we able to route requests to it? */
- boolean isReallyConnected();
+ boolean isRoutable();
}
Modified: trunk/freenet/src/freenet/node/CHKInsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/CHKInsertSender.java 2006-07-12 16:01:17 UTC
(rev 9577)
+++ trunk/freenet/src/freenet/node/CHKInsertSender.java 2006-07-12 16:08:14 UTC
(rev 9578)
@@ -654,7 +654,7 @@
MessageFilter mf = null;
for(int i=0;i<waiters.length;i++) {
AwaitingCompletion awc = waiters[i];
- if(!awc.pn.isReallyConnected()) {
+ if(!awc.pn.isRoutable()) {
Logger.normal(this, "Disconnected:
"+awc.pn+" in "+CHKInsertSender.this);
continue;
}
@@ -686,7 +686,7 @@
}
if(noTimeLeft) {
for(int
i=0;i<waiters.length;i++) {
-
if(!waiters[i].pn.isReallyConnected()) continue;
+
if(!waiters[i].pn.isRoutable()) continue;
if(!waiters[i].completedTransfer) {
waiters[i].completedTransfer(false);
}
@@ -753,7 +753,7 @@
if(noTimeLeft) {
Logger.minor(this, "Overall
timeout on "+CHKInsertSender.this);
for(int
i=0;i<waiters.length;i++) {
-
if(!waiters[i].pn.isReallyConnected()) continue;
+
if(!waiters[i].pn.isRoutable()) continue;
if(!waiters[i].receivedCompletionNotice)
waiters[i].completed(false, false);
if(!waiters[i].completedTransfer)
@@ -778,7 +778,7 @@
boolean completedTransfers = true;
synchronized(nodesWaitingForCompletion) {
for(int i=0;i<waiters.length;i++) {
- if(!waiters[i].pn.isReallyConnected())
continue;
+ if(!waiters[i].pn.isRoutable())
continue;
if(!waiters[i].completedTransfer) {
completedTransfers = false;
break;
@@ -794,7 +794,7 @@
}
completedTransfers = true;
for(int
i=0;i<waiters.length;i++) {
-
if(!waiters[i].pn.isReallyConnected()) continue;
+
if(!waiters[i].pn.isRoutable()) continue;
if(!waiters[i].completedTransfer) {
completedTransfers = false;
break;
Modified: trunk/freenet/src/freenet/node/LocationManager.java
===================================================================
--- trunk/freenet/src/freenet/node/LocationManager.java 2006-07-12 16:01:17 UTC
(rev 9577)
+++ trunk/freenet/src/freenet/node/LocationManager.java 2006-07-12 16:08:14 UTC
(rev 9578)
@@ -124,7 +124,7 @@
PeerNode[] peers = node.peers.connectedPeers;
for(int i=0;i<peers.length;i++) {
PeerNode pn = peers[i];
- if(pn.isReallyConnected()) {
+ if(pn.isRoutable()) {
double ploc =
pn.getLocation().getValue();
if(ploc == myLoc) {
myFlag = true;
@@ -386,7 +386,7 @@
}
if(reply == null) {
- if(pn.isReallyConnected() && (System.currentTimeMillis() -
pn.timeLastConnected() > TIMEOUT*2)) {
+ if(pn.isRoutable() && (System.currentTimeMillis() -
pn.timeLastConnected() > TIMEOUT*2)) {
// Timed out! Abort...
Logger.error(this, "Timed out waiting for
SwapRejected/SwapReply on "+uid);
}
@@ -421,7 +421,7 @@
}
if(reply == null) {
- if(pn.isReallyConnected() && (System.currentTimeMillis() -
pn.timeLastConnected() > TIMEOUT*2)) {
+ if(pn.isRoutable() && (System.currentTimeMillis() -
pn.timeLastConnected() > TIMEOUT*2)) {
// Hrrrm!
Logger.error(this, "Timed out waiting for SwapComplete
- malicious node?? on "+uid);
}
Modified: trunk/freenet/src/freenet/node/NodeDispatcher.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeDispatcher.java 2006-07-12 16:01:17 UTC
(rev 9577)
+++ trunk/freenet/src/freenet/node/NodeDispatcher.java 2006-07-12 16:08:14 UTC
(rev 9578)
@@ -74,7 +74,7 @@
return true;
}
- if(!source.isReallyConnected()) return false;
+ if(!source.isRoutable()) return false;
if(spec == DMT.FNPLocChangeNotification) {
double newLoc = m.getDouble(DMT.LOCATION);
Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java 2006-07-12 16:01:17 UTC
(rev 9577)
+++ trunk/freenet/src/freenet/node/PacketSender.java 2006-07-12 16:08:14 UTC
(rev 9578)
@@ -153,7 +153,7 @@
Math.max(pn.lastReceivedPacketTime(),
lastReceivedPacketFromAnyNode);
if(pn.isConnected()) {
- if(pn.isReallyConnected() && pn.shouldDisconnectNow()) {
+ if(pn.isRoutable() && pn.shouldDisconnectNow()) {
// we don't disconnect but we mark it incompatible
pn.invalidate();
pn.setPeerNodeStatus(now);
Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java 2006-07-12 16:01:17 UTC
(rev 9577)
+++ trunk/freenet/src/freenet/node/PeerManager.java 2006-07-12 16:08:14 UTC
(rev 9578)
@@ -133,7 +133,7 @@
// removing from connectedPeers
ArrayList a = new ArrayList();
for(int i=0;i<myPeers.length;i++) {
- if((myPeers[i]!=pn) && myPeers[i].isReallyConnected())
+ if((myPeers[i]!=pn) && myPeers[i].isRoutable())
a.add(myPeers[i]);
}
@@ -168,7 +168,7 @@
// removing from connectedPeers
ArrayList a = new ArrayList();
for(int i=0;i<myPeers.length;i++) {
- if((myPeers[i]!=pn) &&
myPeers[i].isReallyConnected())
+ if((myPeers[i]!=pn) && myPeers[i].isRoutable())
a.add(myPeers[i]);
}
PeerNode[] newConnectedPeers = new PeerNode[a.size()];
@@ -180,7 +180,7 @@
}
public void addConnectedPeer(PeerNode pn) {
- if(!pn.isReallyConnected()) {
+ if(!pn.isRoutable()) {
Logger.minor(this, "Not ReallyConnected: "+pn);
return;
}
@@ -272,7 +272,7 @@
locs = new double[connectedPeers.length];
int x = 0;
for(int i=0;i<conns.length;i++) {
- if(conns[i].isReallyConnected())
+ if(conns[i].isRoutable())
locs[x++] = conns[i].getLocation().getValue();
}
// Wipe out any information contained in the order
@@ -294,7 +294,7 @@
for(int i=0;i<5;i++) {
PeerNode pn =
connectedPeers[node.random.nextInt(connectedPeers.length)];
if(pn == exclude) continue;
- if(pn.isReallyConnected()) return pn;
+ if(pn.isRoutable()) return pn;
}
// None of them worked
// Move the un-connected ones out
@@ -304,14 +304,14 @@
for(int i=0;i<myPeers.length;i++) {
PeerNode pn = myPeers[i];
if(pn == exclude) continue;
- if(pn.isReallyConnected()) {
+ if(pn.isRoutable()) {
v.add(pn);
} else {
Logger.minor(this, "Excluding "+pn+" because is disconnected");
}
}
int lengthWithoutExcluded = v.size();
- if((exclude != null) && exclude.isReallyConnected())
+ if((exclude != null) && exclude.isRoutable())
v.add(exclude);
PeerNode[] newConnectedPeers = new PeerNode[v.size()];
newConnectedPeers = (PeerNode[]) v.toArray(newConnectedPeers);
@@ -327,7 +327,7 @@
public void localBroadcast(Message msg) {
PeerNode[] peers = connectedPeers; // avoid synchronization
for(int i=0;i<peers.length;i++) {
- if(peers[i].isReallyConnected()) try {
+ if(peers[i].isRoutable()) try {
peers[i].sendAsync(msg, null, 0, null);
} catch (NotConnectedException e) {
// Ignore
@@ -348,7 +348,7 @@
PeerNode best = null;
for(int i=0;i<peers.length;i++) {
PeerNode p = peers[i];
- if(!p.isReallyConnected()) continue;
+ if(!p.isRoutable()) continue;
double diff = distance(p, loc);
if(diff < bestDiff) {
best = p;
@@ -423,7 +423,7 @@
Logger.minor(this, "Skipping (req came from): "+p.getPeer());
continue;
}
- if(!p.isReallyConnected()) {
+ if(!p.isRoutable()) {
Logger.minor(this, "Skipping (not connected): "+p.getPeer());
continue;
}
@@ -580,7 +580,7 @@
public boolean anyConnectedPeers() {
PeerNode[] conns = connectedPeers;
for(int i=0;i<conns.length;i++) {
- if(conns[i].isReallyConnected()) return true;
+ if(conns[i].isRoutable()) return true;
}
return false;
}
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2006-07-12 16:01:17 UTC
(rev 9577)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2006-07-12 16:08:14 UTC
(rev 9578)
@@ -113,7 +113,7 @@
* handshake.
*/
private boolean isConnected;
-
+ private boolean isRoutable;
/**
* ARK fetcher.
*/
@@ -680,12 +680,15 @@
* Note possible deadlocks! PeerManager calls this, we call
* PeerManager in e.g. verified.
*/
- public boolean isReallyConnected() {
- return isConnected;
+ public boolean isRoutable() {
+ return isConnected() && isRoutingCompatible();
}
+ public boolean isRoutingCompatible(){
+ return isRoutable;
+ }
public boolean isConnected(){
- return (isConnected) || (completedHandshake &&
(verifiedIncompatibleNewerVersion || verifiedIncompatibleOlderVersion));
+ return isConnected;
}
/**
@@ -736,6 +739,7 @@
synchronized(this) {
// Force renegotiation.
isConnected = false;
+ isRoutable = false;
completedHandshake = false;
setPeerNodeStatus(now);
// Prevent sending packets to the node until that happens.
@@ -1109,6 +1113,7 @@
Logger.error(this, "Failed to parse new noderef for
"+this+": "+e1, e1);
// Treat as invalid version
}
+ isRoutable = true;
if(reverseInvalidVersion()) {
try {
node.setNewestPeerLastGoodVersion(Version.getArbitraryBuildNumber(lastGoodVersion));
@@ -1117,7 +1122,7 @@
}
Logger.normal(this, "Not connecting to "+this+" -
reverse invalid version "+Version.getVersionString()+" for peer's
lastGoodversion: "+lastGoodVersion);
verifiedIncompatibleNewerVersion = true;
- isConnected = false;
+ isRoutable = false;
node.peers.disconnected(this);
} else {
verifiedIncompatibleNewerVersion = false;
@@ -1125,12 +1130,12 @@
if(invalidVersion()) {
Logger.normal(this, "Not connecting to "+this+" -
invalid version "+version);
verifiedIncompatibleOlderVersion = true;
- isConnected = false;
+ isRoutable = false;
node.peers.disconnected(this);
} else {
verifiedIncompatibleOlderVersion = false;
}
-
+ isConnected = true;
setPeerNodeStatus(now);
KeyTracker newTracker = new KeyTracker(this, encCipher, encKey);
changedIP(replyTo);
@@ -1194,7 +1199,7 @@
else return;
if(unverifiedTracker != null) return;
}
- if(isReallyConnected())
+ if(isRoutable())
sendInitialMessages();
}
@@ -1461,12 +1466,12 @@
public String getStatus() {
String status;
- if(isConnected)
- status = new String("CONNECTED");
+ if(isRoutable())
+ status = "CONNECTED";
else if (isConnected())
- status = new String("INCOMPATIBLE");
+ status = "INCOMPATIBLE";
else
- status = new String("DISCONNECTED");
+ status = "DISCONNECTED";
return
status + " " + getPeer()+" "+myName+"
"+currentLocation.getValue()+" "+getVersion()+" backoff:
"+routingBackoffLength+" ("+(Math.max(routingBackedOffUntil -
System.currentTimeMillis(),0))+")";
}
@@ -1490,7 +1495,7 @@
}
public String getSimpleVersion(){
- return (new
Integer(Version.getArbitraryBuildNumber(version))).toString();
+ return String.valueOf(Version.getArbitraryBuildNumber(version));
}
/**
@@ -1790,7 +1795,8 @@
pingAverage.report(now - startTime);
Logger.minor(this, "Reporting ping time to "+this+" :
"+(now - startTime));
}
- if(!isReallyConnected()){
+
+ if(!shouldDisconnectNow()){
invalidate();
setPeerNodeStatus(now);
}
@@ -1983,7 +1989,7 @@
public synchronized void setPeerNodeStatus(long now) {
int oldPeerNodeStatus = peerNodeStatus;
- if(isConnected) {
+ if(isRoutable()) {
peerNodeStatus = Node.PEER_NODE_STATUS_CONNECTED;
if(now < routingBackedOffUntil) {
peerNodeStatus =
Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF;
@@ -2002,9 +2008,9 @@
}
} else if(isDisabled) {
peerNodeStatus = Node.PEER_NODE_STATUS_DISABLED;
- } else if(completedHandshake &&
verifiedIncompatibleNewerVersion) {
+ } else if(isConnected && verifiedIncompatibleNewerVersion) {
peerNodeStatus = Node.PEER_NODE_STATUS_TOO_NEW;
- } else if(completedHandshake &&
verifiedIncompatibleOlderVersion) {
+ } else if(isConnected && verifiedIncompatibleOlderVersion) {
peerNodeStatus = Node.PEER_NODE_STATUS_TOO_OLD;
} else if(neverConnected) {
peerNodeStatus = Node.PEER_NODE_STATUS_NEVER_CONNECTED;
@@ -2070,6 +2076,7 @@
* This will return true if our lastGoodBuild has changed due to a
timed mandatory.
*/
public synchronized boolean shouldDisconnectNow() {
+ // We should disconnect here if "protocol version missmatch",
maybe throwing an exception
verifiedIncompatibleOlderVersion = invalidVersion();
verifiedIncompatibleNewerVersion = reverseInvalidVersion();
if(verifiedIncompatibleNewerVersion ||
verifiedIncompatibleOlderVersion) return true;
@@ -2077,7 +2084,7 @@
}
protected synchronized void invalidate(){
- isConnected = false;
+ isRoutable = false;
Logger.normal(this, "Invalidated "+this);
}
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-07-12 16:01:17 UTC (rev
9577)
+++ trunk/freenet/src/freenet/node/Version.java 2006-07-12 16:08:14 UTC (rev
9578)
@@ -18,7 +18,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- private static final int buildNumber = 876;
+ private static final int buildNumber = 877;
/** Oldest build of Fred we will talk to */
private static final int oldLastGoodBuild = 870;