From 299a44e7ebd2145c8d893dd21096f12ee1c4e824 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Sat, 7 Jun 2014 17:07:44 +0000 Subject: [PATCH] i2psnark: display peer version when available --- .../java/src/org/klomp/snark/PeerID.java | 2 +- .../org/klomp/snark/web/I2PSnarkServlet.java | 56 +++++++++++++++++-- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerID.java b/apps/i2psnark/java/src/org/klomp/snark/PeerID.java index 0a71450c7c..405d9e508a 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerID.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerID.java @@ -42,7 +42,7 @@ import org.klomp.snark.bencode.InvalidBEncodingException; * and the PeerID is not required. * Equality is now determined solely by the dest hash. */ -class PeerID implements Comparable<PeerID> +public class PeerID implements Comparable<PeerID> { private byte[] id; private Destination address; diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index bed4519817..f84fa230e0 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -32,6 +32,7 @@ import org.klomp.snark.I2PSnarkUtil; import org.klomp.snark.MagnetURI; import org.klomp.snark.MetaInfo; import org.klomp.snark.Peer; +import org.klomp.snark.PeerID; import org.klomp.snark.Snark; import org.klomp.snark.SnarkManager; import org.klomp.snark.Storage; @@ -1478,7 +1479,8 @@ public class I2PSnarkServlet extends BasicServlet { continue; out.write("<tr class=\"" + rowClass + "\"><td></td>"); out.write("<td colspan=\"4\" align=\"right\">"); - String ch = peer.toString().substring(0, 4); + PeerID pid = peer.getPeerID(); + String ch = pid != null ? pid.toString().substring(0, 4) : "????"; String client; if ("AwMD".equals(ch)) client = _("I2PSnark"); @@ -1487,15 +1489,15 @@ public class I2PSnarkServlet extends BasicServlet { else if ("TTMt".equals(ch)) client = "I2P-BT"; else if ("LUFa".equals(ch)) - client = "Azureus"; + client = "Vuze" + getAzVersion(pid.getID()); else if ("CwsL".equals(ch)) client = "I2PSnarkXL"; else if ("ZV".equals(ch.substring(2,4)) || "VUZP".equals(ch)) - client = "Robert"; + client = "Robert" + getRobtVersion(pid.getID()); else if (ch.startsWith("LV")) // LVCS 1.0.2?; LVRS 1.0.4 - client = "Transmission"; + client = "Transmission" + getAzVersion(pid.getID()); else if ("LUtU".equals(ch)) - client = "KTorrent"; + client = "KTorrent" + getAzVersion(pid.getID()); else client = _("Unknown") + " (" + ch + ')'; out.write(client + " <tt>" + peer.toString().substring(5, 9)+ "</tt>"); @@ -1569,6 +1571,50 @@ public class I2PSnarkServlet extends BasicServlet { } } } + + /** + * Get version from bytes 3-6 + * @return " w.x.y.z" or "" + * @since 0.9.14 + */ + private static String getAzVersion(byte[] id) { + if (id[7] != '-') + return ""; + StringBuilder buf = new StringBuilder(16); + buf.append(' '); + for (int i = 3; i <= 6; i++) { + int val = id[i] - '0'; + if (val < 0) + return ""; + if (val > 9) + val = id[i] - 'A'; + if (i != 6 || val != 0) { + if (i != 3) + buf.append('.'); + buf.append(val); + } + } + return buf.toString(); + } + + /** + * Get version from bytes 3-5 + * @return " w.x.y" or "" + * @since 0.9.14 + */ + private static String getRobtVersion(byte[] id) { + StringBuilder buf = new StringBuilder(8); + buf.append(' '); + for (int i = 3; i <= 5; i++) { + int val = id[i]; + if (val < 0) + return ""; + if (i != 3) + buf.append('.'); + buf.append(val); + } + return buf.toString(); + } /** @since 0.8.2 */ private static String thinsp(boolean disable) { -- GitLab