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...");