diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbHelper.java index 9848aa11ca..18568c4358 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbHelper.java @@ -1,9 +1,12 @@ package net.i2p.router.web.helpers; import java.io.IOException; +import java.text.Collator; +import java.util.EnumSet; import java.util.HashMap; import java.util.Locale; import java.util.Map; +import java.util.TreeMap; import net.i2p.crypto.EncType; import net.i2p.crypto.SigType; @@ -11,6 +14,7 @@ import net.i2p.data.DataHelper; import net.i2p.util.SystemVersion; import net.i2p.router.sybil.Analysis; import net.i2p.router.web.FormHandler; +import net.i2p.router.web.Messages; /** * /netdb @@ -376,20 +380,41 @@ public class NetDbHelper extends FormHandler { "Enter one search field only:\n" + "Capabilities:e.g. f or XOfR\n" + "Cost:\n" + - "Country Code:e.g. ru\n" + - "Encryption Type:\n" + + "Country:\n" + + "Encryption Type:\n" + "Router Family:\n" + "Hash Prefix:\n" + - "IP or Hostname:hostname, IPv4, or IPv6, /24,/16,/8 suffixes optional for IPv4, prefix ok for IPv6\n" + + "IP:IPv4 or IPv6, /24,/16,/8 suffixes optional for IPv4, prefix ok for IPv6\n" + "IPv6 Prefix:\n" + "MTU:\n" + "Port Number:\n" + - "Signature Type:\n" + - "SSU Capabilities:\n" + - "Transport:\n" + + "Signature Type:\n" + + "Transport:\n" + + "Transport Capabilities:\n" + "Router Version:\n" + "Add Sybil analysis (must pick one above):\n" + - "Sybil close to:Router hash, dest hash, b32, or from address book\n" + + "Sybil close to:Router hash, destination hash, b32, or from address book\n" + "\n" + "\n" + "\n\n"); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java index e708d4b0ea..1bfa6e6442 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java @@ -375,14 +375,34 @@ class NetDbRenderer { buf.append("
"); buf.append(_t("Router")).append(' '); if (routerPrefix != null) - buf.append(routerPrefix); - else if (version != null) - buf.append(version); - else if (country != null) - buf.append(country); - else if (family != null) - buf.append(_t("Family")).append(' ').append(family); - buf.append(' ').append(_t("not found in network database")); + buf.append(routerPrefix).append(' '); + if (version != null) + buf.append(_t("Version")).append(' ').append(version).append(' '); + if (country != null) + buf.append(_t("Country")).append(' ').append(country).append(' '); + if (family != null) + buf.append(_t("Family")).append(' ').append(family).append(' '); + if (ip != null) + buf.append("IP ").append(ip).append(' '); + if (ipv6 != null) + buf.append("IP ").append(ipv6).append(' '); + if (port != 0) + buf.append(_t("Port")).append(' ').append(port).append(' '); + if (mtu != null) + buf.append(_t("MTU")).append(' ').append(mtu).append(' '); + if (cost != 0) + buf.append("Cost ").append(cost).append(' '); + if (type != null) + buf.append("Type ").append(type).append(' '); + if (etype != null) + buf.append("Type ").append(etype).append(' '); + if (caps != null) + buf.append("Caps ").append(caps).append(' '); + if (ssucaps != null) + buf.append("Caps ").append(ssucaps).append(' '); + if (tr != null) + buf.append("Transport ").append(tr).append(' '); + buf.append(_t("not found in network database")); buf.append("
"); } else if (page > 0 || morePages) { buf.append("
"); diff --git a/router/java/src/net/i2p/router/CommSystemFacade.java b/router/java/src/net/i2p/router/CommSystemFacade.java index bf2949bc91..4a273270cd 100644 --- a/router/java/src/net/i2p/router/CommSystemFacade.java +++ b/router/java/src/net/i2p/router/CommSystemFacade.java @@ -12,6 +12,7 @@ import java.io.IOException; import java.io.Writer; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; @@ -139,6 +140,17 @@ public abstract class CommSystemFacade implements Service { public String getCountry(Hash peer) { return null; } public String getCountryName(String code) { return code; } + + /** + * Get the country code map + * + * @return Map of two-letter lower case code to untranslated country name, unmodifiable + * @since 0.9.53 + */ + public Map getCountries() { + return Collections.emptyMap(); + } + public String renderPeerHTML(Hash peer) { return peer.toBase64().substring(0, 4); } diff --git a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java index 722df0de62..b6247d4559 100644 --- a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java +++ b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java @@ -16,6 +16,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Set; import java.util.SortedMap; @@ -596,6 +597,18 @@ public class CommSystemFacadeImpl extends CommSystemFacade { return n; } + /** + * Get the country code map + * + * @return Map of two-letter lower case code to untranslated country name, unmodifiable + * @since 0.9.53 + */ + public Map getCountries() { + if (_geoIP == null) + return Collections.emptyMap(); + return _geoIP.getCountries(); + } + /** Provide a consistent "look" for displaying router IDs in the console */ @Override public String renderPeerHTML(Hash peer) { diff --git a/router/java/src/net/i2p/router/transport/GeoIP.java b/router/java/src/net/i2p/router/transport/GeoIP.java index 7862d97991..ecc71b8afa 100644 --- a/router/java/src/net/i2p/router/transport/GeoIP.java +++ b/router/java/src/net/i2p/router/transport/GeoIP.java @@ -877,6 +877,16 @@ public class GeoIP { return _codeToName.get(code); } + /** + * Get the country code map + * + * @return Map of two-letter lower case code to untranslated country name, unmodifiable + * @since 0.9.53 + */ + public Map getCountries() { + return Collections.unmodifiableMap(_codeToName); + } + public static void main(String args[]) { if (args.length <= 0) { System.out.println("Usage: GeoIP ip...");