Author: toad
Date: 2008-01-17 21:30:44 +0000 (Thu, 17 Jan 2008)
New Revision: 17105
Added:
trunk/freenet/src/freenet/node/VersionParseException.java
Modified:
trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.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/Version.java
Log:
Don't throw the uncaught NumberFormatException, throw a new
VersionParseException and catch it properly.
Various minor fixes relating to version - e.g. we try to parse a version, and
probably NFE, even if it's a partial.
Modified: trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
2008-01-17 18:46:14 UTC (rev 17104)
+++ trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
2008-01-17 21:30:44 UTC (rev 17105)
@@ -89,7 +89,7 @@
}else if(sortBy.equals("location")){
return compareLocations(firstNode, secondNode);
}else if(sortBy.equals("version")){
- return
Version.getArbitraryBuildNumber(firstNode.getVersion()) -
Version.getArbitraryBuildNumber(secondNode.getVersion());
+ return
Version.getArbitraryBuildNumber(firstNode.getVersion(), -1) -
Version.getArbitraryBuildNumber(secondNode.getVersion(), -1);
}else
return 0;
}
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2008-01-17 18:46:14 UTC (rev
17104)
+++ trunk/freenet/src/freenet/node/Node.java 2008-01-17 21:30:44 UTC (rev
17105)
@@ -483,7 +483,7 @@
Logger.error(this, "No version!");
System.err.println("No version!");
} else {
- lastVersion =
Version.getArbitraryBuildNumber(verString);
+ lastVersion =
Version.getArbitraryBuildNumber(verString, -1);
}
wasTestnet = Fields.stringToBool(fs.get("testnet"), false);
Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java 2008-01-17 18:46:14 UTC
(rev 17104)
+++ trunk/freenet/src/freenet/node/PeerManager.java 2008-01-17 21:30:44 UTC
(rev 17105)
@@ -762,7 +762,7 @@
if(logMINOR) Logger.minor(this, "Skipping (routing backed off):
"+p.getPeer());
continue;
}
- if(minVersion > 0 &&
Version.getArbitraryBuildNumber(p.getVersion()) < minVersion) {
+ if(minVersion > 0 &&
Version.getArbitraryBuildNumber(p.getVersion(), -1) < minVersion) {
if(logMINOR) Logger.minor(this, "Skipping old version:
"+p.getPeer());
continue;
}
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2008-01-17 18:46:14 UTC
(rev 17104)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2008-01-17 21:30:44 UTC
(rev 17105)
@@ -338,7 +338,11 @@
this.backedOffPercent = new TimeDecayingRunningAverage(0.0,
180000, 0.0, 1.0, node);
version = fs.get("version");
Version.seenVersion(version);
- simpleVersion = Version.getArbitraryBuildNumber(version);
+ try {
+ simpleVersion =
Version.getArbitraryBuildNumber(version);
+ } catch (VersionParseException e2) {
+ throw new FSParseException("Invalid version "+version+"
: "+e2);
+ }
String locationString = fs.get("location");
try {
currentLocation = Location.getLocation(locationString);
@@ -1713,7 +1717,7 @@
//FIXME: It looks like bogusNoderef will just be set to
false a few lines later...
} else if(reverseInvalidVersion()) {
try {
-
node.setNewestPeerLastGoodVersion(Version.getArbitraryBuildNumber(getLastGoodVersion()));
+
node.setNewestPeerLastGoodVersion(Version.getArbitraryBuildNumber(getLastGoodVersion(),
Version.lastGoodBuild()));
} catch(NumberFormatException e) {
// ignore
}
@@ -2084,7 +2088,13 @@
if(!newVersion.equals(version))
changedAnything = true;
version = newVersion;
- simpleVersion =
Version.getArbitraryBuildNumber(version);
+ if(version != null) {
+ try {
+ simpleVersion =
Version.getArbitraryBuildNumber(version);
+ } catch (VersionParseException e) {
+ Logger.error(this, "Bad version:
"+simpleVersion+" : "+e, e);
+ }
+ }
Version.seenVersion(newVersion);
}
String newLastGoodVersion = fs.get("lastGoodVersion");
@@ -2967,7 +2977,7 @@
}
public int getVersionNumber() {
- return Version.getArbitraryBuildNumber(getVersion());
+ return Version.getArbitraryBuildNumber(getVersion(), -1);
}
public PacketThrottle getThrottle() {
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2008-01-17 18:46:14 UTC (rev
17104)
+++ trunk/freenet/src/freenet/node/Version.java 2008-01-17 21:30:44 UTC (rev
17105)
@@ -287,20 +287,34 @@
* @return the build number of an arbitrary version string
*/
public static final int getArbitraryBuildNumber(
- String version ) {
+ String version ) throws VersionParseException {
if(version == null) {
Logger.error(Version.class, "version == null!",
new Exception("error"));
- throw new NumberFormatException();
+ throw new VersionParseException("version == null");
}
String[] v = Fields.commaList(version);
if ((v.length < 3) || !goodProtocol(v[2])) {
- throw new NumberFormatException();
+ throw new VersionParseException("not long enough or bad
protocol: "+version);
}
- return Integer.parseInt(v[3]);
+ try {
+ return Integer.parseInt(v[3]);
+ } catch (NumberFormatException e) {
+ VersionParseException ve = new
VersionParseException("Got NumberFormatException on "+v[3]+" : "+e+" for
"+version);
+ ve.initCause(e);
+ throw ve;
+ }
}
+ public static final int getArbitraryBuildNumber(
+ String version, int defaultValue ) {
+ try {
+ return getArbitraryBuildNumber(version);
+ } catch (VersionParseException e) {
+ return defaultValue;
+ }
+ }
/**
* Update static variable highestSeenBuild anytime we encounter
* a new node with a higher version than we've seen before
Added: trunk/freenet/src/freenet/node/VersionParseException.java
===================================================================
--- trunk/freenet/src/freenet/node/VersionParseException.java
(rev 0)
+++ trunk/freenet/src/freenet/node/VersionParseException.java 2008-01-17
21:30:44 UTC (rev 17105)
@@ -0,0 +1,13 @@
+package freenet.node;
+
+/**
+ * Unchecked exception thrown by Version.getArbitraryBuildNumber()
+ * @author toad
+ */
+public class VersionParseException extends Exception {
+
+ public VersionParseException(String msg) {
+ super(msg);
+ }
+
+}