* 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.RouterContext;
|
||||||
import net.i2p.router.TunnelPoolSettings;
|
import net.i2p.router.TunnelPoolSettings;
|
||||||
import net.i2p.util.ObjectCounter;
|
import net.i2p.util.ObjectCounter;
|
||||||
|
import net.i2p.util.VersionComparator;
|
||||||
|
|
||||||
public class NetDbRenderer {
|
public class NetDbRenderer {
|
||||||
private RouterContext _context;
|
private RouterContext _context;
|
||||||
@ -185,7 +186,7 @@ public class NetDbRenderer {
|
|||||||
// versions table
|
// versions table
|
||||||
List<String> versionList = new ArrayList(versions.objects());
|
List<String> versionList = new ArrayList(versions.objects());
|
||||||
if (versionList.size() > 0) {
|
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("<table>\n");
|
||||||
buf.append("<tr><th>" + _("Version") + "</th><th>" + _("Count") + "</th></tr>\n");
|
buf.append("<tr><th>" + _("Version") + "</th><th>" + _("Count") + "</th></tr>\n");
|
||||||
for (String routerVersion : versionList) {
|
for (String routerVersion : versionList) {
|
||||||
|
@ -8,7 +8,6 @@ import java.io.IOException;
|
|||||||
import java.io.SequenceInputStream;
|
import java.io.SequenceInputStream;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
import net.i2p.CoreVersion;
|
import net.i2p.CoreVersion;
|
||||||
@ -19,6 +18,7 @@ import net.i2p.data.Signature;
|
|||||||
import net.i2p.data.SigningPrivateKey;
|
import net.i2p.data.SigningPrivateKey;
|
||||||
import net.i2p.data.SigningPublicKey;
|
import net.i2p.data.SigningPublicKey;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
|
import net.i2p.util.VersionComparator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Handles DSA signing and verification of update files.
|
* <p>Handles DSA signing and verification of update files.
|
||||||
@ -101,7 +101,6 @@ D8usM7Dxp5yrDrCYZ5AIijc=
|
|||||||
-----END PGP SIGNATURE-----
|
-----END PGP SIGNATURE-----
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private static final String VALID_VERSION_CHARS = "0123456789.";
|
|
||||||
private static final int VERSION_BYTES = 16;
|
private static final int VERSION_BYTES = 16;
|
||||||
private static final int HEADER_BYTES = Signature.SIGNATURE_BYTES + VERSION_BYTES;
|
private static final int HEADER_BYTES = Signature.SIGNATURE_BYTES + VERSION_BYTES;
|
||||||
private static final String PROP_TRUSTED_KEYS = "router.trustedUpdateKeys";
|
private static final String PROP_TRUSTED_KEYS = "router.trustedUpdateKeys";
|
||||||
@ -187,50 +186,6 @@ D8usM7Dxp5yrDrCYZ5AIijc=
|
|||||||
return (new VersionComparator()).compare(currentVersion, newVersion) < 0;
|
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) {
|
private static final void genKeysCLI(String publicKeyFile, String privateKeyFile) {
|
||||||
FileOutputStream fileOutputStream = null;
|
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() {
|
private static final void showUsageCLI() {
|
||||||
System.err.println("Usage: TrustedUpdate keygen publicKeyFile privateKeyFile");
|
System.err.println("Usage: TrustedUpdate keygen publicKeyFile privateKeyFile");
|
||||||
System.err.println(" TrustedUpdate showversion signedFile");
|
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