\n");
+ out.write("\">\n");
// not supporting from file at the moment, since the file name passed isn't always absolute (so it may not resolve)
//out.write("From file: ");
out.write(" \n" +
-
"
\n");
// *not* enctype="multipart/form-data", so that the input type=file sends the filename, not the file
@@ -2103,20 +2103,23 @@ public class I2PSnarkServlet extends BasicServlet {
+ "\" spellcheck=\"false\" title=\"");
out.write(_t("File or directory to seed (full path or within the directory {0} )",
_manager.getDataDir().getAbsolutePath() + File.separatorChar));
- out.write("\" >
\n");
+ out.write("\" > ");
+ out.write("
\n");
out.write(_t("Trackers"));
- out.write(":
");
+ out.write(":
");
out.write(_t("Primary"));
out.write("
");
out.write(_t("Alternates"));
- out.write("
" +
- " " +
- "
\n");
+ out.write("
");
+ out.write(_t("Tracker URL"));
+ out.write("
\n");
+
for (Tracker t : sortedTrackers) {
String name = t.name;
String announceURL = t.announceURL.replace("=", "=");
+ String homeURL = t.baseURL;
out.write("
\n");
// make the user add a tracker on the config form now
//out.write(_t("or"));
//out.write(" ");
+ buf.append("
");
for (Map.Entry e : entries.entrySet()) {
Hash key = e.getKey();
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
index 69c4dca69..c615ee0cd 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
@@ -112,7 +112,7 @@ public class ConfigClientsHelper extends HelperBase {
/** clients */
public String getForm1() {
StringBuilder buf = new StringBuilder(1024);
- buf.append("
\n" +
+ buf.append("
\n" +
"
").append(_t("Client")).append("
")
.append(_t("Run at Startup?")).append("
")
.append(_t("Control")).append("
")
@@ -198,7 +198,7 @@ public class ConfigClientsHelper extends HelperBase {
/** webapps */
public String getForm2() {
StringBuilder buf = new StringBuilder(1024);
- buf.append("
\n" +
+ buf.append("
\n" +
"
").append(_t("WebApp")).append("
")
.append(_t("Run at Startup?")).append("
")
.append(_t("Control")).append("
")
@@ -227,7 +227,7 @@ public class ConfigClientsHelper extends HelperBase {
/** plugins */
public String getForm3() {
StringBuilder buf = new StringBuilder(1024);
- buf.append("
\n" +
+ buf.append("
\n" +
"
").append(_t("Plugin")).append("
")
.append(_t("Run at Startup?")).append("
")
.append(_t("Control")).append("
")
@@ -290,15 +290,17 @@ public class ConfigClientsHelper extends HelperBase {
}
s = stripHTML(appProps, "websiteURL");
if (s != null) {
- desc.append("
");
buf.append("")
.append(_t("Force the mobile console to be used"))
- .append(" \n");
+ .append("
\n");
return buf.toString();
}
@@ -136,15 +144,16 @@ public class ConfigUIHelper extends HelperBase {
}
StringBuilder buf = new StringBuilder(512);
for (int i = 0; i < langs.length; i++) {
- // we use "lang" so it is set automagically in CSSHelper
- buf.append("")
- .append(" ");
+ .append("")
+ .append("
");
int under = lang.indexOf('_');
String slang = (under > 0) ? lang.substring(0, under) : lang;
buf.append(Messages.getDisplayLanguage(slang, langs[i][2], _context));
@@ -154,7 +163,7 @@ public class ConfigUIHelper extends HelperBase {
.append(Messages.getString(name, _context, Messages.COUNTRY_BUNDLE_NAME))
.append(')');
}
- buf.append(" \n");
+ buf.append("
\n");
}
return buf.toString();
}
@@ -164,7 +173,7 @@ public class ConfigUIHelper extends HelperBase {
StringBuilder buf = new StringBuilder(512);
ConsolePasswordManager mgr = new ConsolePasswordManager(_context);
Map userpw = mgr.getMD5(RouterConsoleRunner.PROP_CONSOLE_PW);
- buf.append("
");
+ buf.append("
");
if (userpw.isEmpty()) {
buf.append("
");
buf.append(_t("Add a user and password to enable."));
@@ -173,7 +182,7 @@ public class ConfigUIHelper extends HelperBase {
buf.append("
");
for (int i = msgs.size() - 1; i >= 0; i--) {
String msg = msgs.get(i);
// don't display the dup message if it is last
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java
index ba977a6e8..ad4dcadab 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java
@@ -116,9 +116,7 @@ public class NetDbHelper extends HelperBase {
private void renderNavBar() throws IOException {
StringBuilder buf = new StringBuilder(1024);
buf.append("
");
- // TODO fix up the non-light themes
- String theme = _context.getProperty(CSSHelper.PROP_THEME_NAME);
- boolean span = _graphical && (theme == null || theme.equals(CSSHelper.DEFAULT_THEME));
+ boolean span = _graphical;
if (!span)
buf.append("
");
int tab = getTab();
@@ -139,9 +137,9 @@ public class NetDbHelper extends HelperBase {
buf.append("").append(_t(titles[i])).append("");
}
if (span)
- buf.append(" \n");
+ buf.append("\n");
else if (i != titles.length - 1)
- buf.append(" |\n");
+ buf.append(" \n");
}
if (!span)
buf.append("
");
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
index c9a34ece0..2d3318823 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
@@ -124,7 +124,7 @@ class NetDbRenderer {
public void renderLeaseSetHTML(Writer out, boolean debug) throws IOException {
StringBuilder buf = new StringBuilder(4*1024);
if (debug)
- buf.append("
Debug mode - Sorted by hash distance, closest first
\n");
+ buf.append("
Debug mode - Sorted by hash distance, closest first
\n");
Hash ourRKey;
Set leases;
DecimalFormat fmt;
@@ -142,9 +142,50 @@ class NetDbRenderer {
int rapCount = 0;
BigInteger median = null;
int c = 0;
+
+
+ // Summary
+ FloodfillNetworkDatabaseFacade netdb = (FloodfillNetworkDatabaseFacade)_context.netDb();
+ if (debug) {
+ buf.append("
Center of Key Space (router hash): " + ourRKey.toBase64());
+ if (median != null) {
+ double log2 = biLog2(median);
+ buf.append("
")
+ .append("
Median distance (bits):
").append(fmt.format(log2)).append("
\n");
+ // 2 for 4 floodfills... -1 for median
+ // this can be way off for unknown reasons
+ int total = (int) Math.round(Math.pow(2, 2 + 256 - 1 - log2));
+ buf.append("
Estimated total floodfills:
").append(total).append("
\n");
+ buf.append("
Estimated total leasesets:
").append(total * rapCount / 4);
+ } else {
+ buf.append("Not floodfill or no data.");
+ }
+ buf.append("
\n");
+ }
+ buf.append("
\n");
+
if (leases.isEmpty()) {
if (!debug)
- buf.append("").append(_t("none")).append("");
+ buf.append("
").append(_t("No Leasesets currently active.")).append("
");
} else {
if (debug) {
// Find the center of the RAP leasesets
@@ -154,109 +195,91 @@ class NetDbRenderer {
}
medianCount = rapCount / 2;
}
+
long now = _context.clock().now();
for (LeaseSet ls : leases) {
Destination dest = ls.getDestination();
Hash key = dest.calculateHash();
- buf.append("").append(_t("LeaseSet")).append(": ").append(key.toBase64()).append("\n");
+ buf.append("
Network data (only valid if floodfill):");
- //buf.append("
Center of Key Space (router hash): " + ourRKey.toBase64());
- if (median != null) {
- double log2 = biLog2(median);
- buf.append("
Median distance (bits): ").append(fmt.format(log2));
- // 2 for 4 floodfills... -1 for median
- // this can be way off for unknown reasons
- int total = (int) Math.round(Math.pow(2, 2 + 256 - 1 - log2));
- buf.append("
Estimated total floodfills: ").append(total);
- buf.append("
");
// versions table
List versionList = new ArrayList(versions.objects());
if (!versionList.isEmpty()) {
Collections.sort(versionList, Collections.reverseOrder(new VersionComparator()));
- buf.append("
\n");
+ buf.append("
\n");
buf.append("
" + _t("Version") + "
" + _t("Count") + "
\n");
for (String routerVersion : versionList) {
int num = versions.count(routerVersion);
@@ -364,7 +387,7 @@ class NetDbRenderer {
start = end;
// transports table
- buf.append("
\n");
+ buf.append("
\n");
buf.append("
" + _t("Transports") + "
" + _t("Count") + "
\n");
for (int i = 0; i < TNAMES.length; i++) {
int num = transportCount[i];
@@ -386,7 +409,7 @@ class NetDbRenderer {
List countryList = new ArrayList(countries.objects());
if (!countryList.isEmpty()) {
Collections.sort(countryList, new CountryComparator());
- buf.append("
\n");
+ buf.append("
\n");
buf.append("
" + _t("Country") + "
" + _t("Count") + "
\n");
for (String country : countryList) {
int num = countries.count(country);
@@ -448,31 +471,39 @@ class NetDbRenderer {
*/
private void renderRouterInfo(StringBuilder buf, RouterInfo info, boolean isUs, boolean full) {
String hash = info.getIdentity().getHash().toBase64();
- buf.append("