* VersionComparator: Move from TrustedUpdate.java to util
This commit is contained in:
@ -28,6 +28,7 @@ import net.i2p.data.RouterInfo;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.router.TunnelPoolSettings;
|
||||
import net.i2p.util.ObjectCounter;
|
||||
import net.i2p.util.VersionComparator;
|
||||
|
||||
public class NetDbRenderer {
|
||||
private RouterContext _context;
|
||||
@ -185,7 +186,7 @@ public class NetDbRenderer {
|
||||
// versions table
|
||||
List<String> versionList = new ArrayList(versions.objects());
|
||||
if (versionList.size() > 0) {
|
||||
Collections.sort(versionList, Collections.reverseOrder(new TrustedUpdate.VersionComparator()));
|
||||
Collections.sort(versionList, Collections.reverseOrder(new VersionComparator()));
|
||||
buf.append("<table>\n");
|
||||
buf.append("<tr><th>" + _("Version") + "</th><th>" + _("Count") + "</th></tr>\n");
|
||||
for (String routerVersion : versionList) {
|
||||
|
@ -8,7 +8,6 @@ import java.io.IOException;
|
||||
import java.io.SequenceInputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import net.i2p.CoreVersion;
|
||||
@ -19,6 +18,7 @@ import net.i2p.data.Signature;
|
||||
import net.i2p.data.SigningPrivateKey;
|
||||
import net.i2p.data.SigningPublicKey;
|
||||
import net.i2p.util.Log;
|
||||
import net.i2p.util.VersionComparator;
|
||||
|
||||
/**
|
||||
* <p>Handles DSA signing and verification of update files.
|
||||
@ -101,7 +101,6 @@ D8usM7Dxp5yrDrCYZ5AIijc=
|
||||
-----END PGP SIGNATURE-----
|
||||
*/
|
||||
|
||||
private static final String VALID_VERSION_CHARS = "0123456789.";
|
||||
private static final int VERSION_BYTES = 16;
|
||||
private static final int HEADER_BYTES = Signature.SIGNATURE_BYTES + VERSION_BYTES;
|
||||
private static final String PROP_TRUSTED_KEYS = "router.trustedUpdateKeys";
|
||||
@ -187,50 +186,6 @@ D8usM7Dxp5yrDrCYZ5AIijc=
|
||||
return (new VersionComparator()).compare(currentVersion, newVersion) < 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares versions.
|
||||
* Characters other than [0-9.] are ignored.
|
||||
*/
|
||||
public static class VersionComparator implements Comparator<String> {
|
||||
/** l and r non-null */
|
||||
public int compare(String l, String r) {
|
||||
// try it the easy way first
|
||||
if (l.equals(r))
|
||||
return 0;
|
||||
StringTokenizer lTokens = new StringTokenizer(sanitize(l), ".");
|
||||
StringTokenizer rTokens = new StringTokenizer(sanitize(r), ".");
|
||||
|
||||
while (lTokens.hasMoreTokens() && rTokens.hasMoreTokens()) {
|
||||
String lNumber = lTokens.nextToken();
|
||||
String rNumber = rTokens.nextToken();
|
||||
int diff = intCompare(lNumber, rNumber);
|
||||
if (diff != 0)
|
||||
return diff;
|
||||
}
|
||||
|
||||
if (lTokens.hasMoreTokens() && !rTokens.hasMoreTokens())
|
||||
return 1;
|
||||
if (rTokens.hasMoreTokens() && !lTokens.hasMoreTokens())
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
private static final int intCompare(String lop, String rop) {
|
||||
int left, right;
|
||||
try {
|
||||
left = Integer.parseInt(lop);
|
||||
} catch (NumberFormatException nfe) {
|
||||
return -1;
|
||||
}
|
||||
try {
|
||||
right = Integer.parseInt(rop);
|
||||
} catch (NumberFormatException nfe) {
|
||||
return 1;
|
||||
}
|
||||
return left - right;
|
||||
}
|
||||
}
|
||||
|
||||
private static final void genKeysCLI(String publicKeyFile, String privateKeyFile) {
|
||||
FileOutputStream fileOutputStream = null;
|
||||
|
||||
@ -263,19 +218,6 @@ D8usM7Dxp5yrDrCYZ5AIijc=
|
||||
}
|
||||
}
|
||||
|
||||
private static final String sanitize(String versionString) {
|
||||
StringBuilder versionStringBuilder = new StringBuilder(versionString);
|
||||
|
||||
for (int i = 0; i < versionStringBuilder.length(); i++) {
|
||||
if (VALID_VERSION_CHARS.indexOf(versionStringBuilder.charAt(i)) == -1) {
|
||||
versionStringBuilder.deleteCharAt(i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
return versionStringBuilder.toString();
|
||||
}
|
||||
|
||||
private static final void showUsageCLI() {
|
||||
System.err.println("Usage: TrustedUpdate keygen publicKeyFile privateKeyFile");
|
||||
System.err.println(" TrustedUpdate showversion signedFile");
|
||||
|
66
core/java/src/net/i2p/util/VersionComparator.java
Normal file
66
core/java/src/net/i2p/util/VersionComparator.java
Normal file
@ -0,0 +1,66 @@
|
||||
package net.i2p.util;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
/**
|
||||
* Compares versions.
|
||||
* Characters other than [0-9.] are ignored.
|
||||
* Moved from TrustedUpdate.java
|
||||
* @since 0.7.10
|
||||
*/
|
||||
public class VersionComparator implements Comparator<String> {
|
||||
/** l and r non-null */
|
||||
public int compare(String l, String r) {
|
||||
// try it the easy way first
|
||||
if (l.equals(r))
|
||||
return 0;
|
||||
StringTokenizer lTokens = new StringTokenizer(sanitize(l), ".");
|
||||
StringTokenizer rTokens = new StringTokenizer(sanitize(r), ".");
|
||||
|
||||
while (lTokens.hasMoreTokens() && rTokens.hasMoreTokens()) {
|
||||
String lNumber = lTokens.nextToken();
|
||||
String rNumber = rTokens.nextToken();
|
||||
int diff = intCompare(lNumber, rNumber);
|
||||
if (diff != 0)
|
||||
return diff;
|
||||
}
|
||||
|
||||
if (lTokens.hasMoreTokens() && !rTokens.hasMoreTokens())
|
||||
return 1;
|
||||
if (rTokens.hasMoreTokens() && !lTokens.hasMoreTokens())
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
private static final int intCompare(String lop, String rop) {
|
||||
int left, right;
|
||||
try {
|
||||
left = Integer.parseInt(lop);
|
||||
} catch (NumberFormatException nfe) {
|
||||
return -1;
|
||||
}
|
||||
try {
|
||||
right = Integer.parseInt(rop);
|
||||
} catch (NumberFormatException nfe) {
|
||||
return 1;
|
||||
}
|
||||
return left - right;
|
||||
}
|
||||
|
||||
private static final String VALID_VERSION_CHARS = "0123456789.";
|
||||
|
||||
private static final String sanitize(String versionString) {
|
||||
StringBuilder versionStringBuilder = new StringBuilder(versionString);
|
||||
|
||||
for (int i = 0; i < versionStringBuilder.length(); i++) {
|
||||
if (VALID_VERSION_CHARS.indexOf(versionStringBuilder.charAt(i)) == -1) {
|
||||
versionStringBuilder.deleteCharAt(i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
return versionStringBuilder.toString();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user