Add a bunch of ids and classes to routerconsole HTML for styling

This commit is contained in:
str4d
2016-04-18 04:12:15 +00:00
parent da62a1114c
commit ac6cd7e4c6
51 changed files with 192 additions and 183 deletions

View File

@ -50,7 +50,7 @@ class BanlistRenderer {
return; return;
} }
buf.append("<ul>"); buf.append("<ul id=\"banlist\">");
for (Map.Entry<Hash, Banlist.Entry> e : entries.entrySet()) { for (Map.Entry<Hash, Banlist.Entry> e : entries.entrySet()) {
Hash key = e.getKey(); Hash key = e.getKey();

View File

@ -112,7 +112,7 @@ public class ConfigClientsHelper extends HelperBase {
/** clients */ /** clients */
public String getForm1() { public String getForm1() {
StringBuilder buf = new StringBuilder(1024); StringBuilder buf = new StringBuilder(1024);
buf.append("<table>\n" + buf.append("<table id=\"clientconfig\">\n" +
"<tr><th align=\"right\">").append(_t("Client")).append("</th><th>") "<tr><th align=\"right\">").append(_t("Client")).append("</th><th>")
.append(_t("Run at Startup?")).append("</th><th>") .append(_t("Run at Startup?")).append("</th><th>")
.append(_t("Control")).append("</th><th align=\"left\">") .append(_t("Control")).append("</th><th align=\"left\">")
@ -198,7 +198,7 @@ public class ConfigClientsHelper extends HelperBase {
/** webapps */ /** webapps */
public String getForm2() { public String getForm2() {
StringBuilder buf = new StringBuilder(1024); StringBuilder buf = new StringBuilder(1024);
buf.append("<table>\n" + buf.append("<table id=\"webappconfig\">\n" +
"<tr><th align=\"right\">").append(_t("WebApp")).append("</th><th>") "<tr><th align=\"right\">").append(_t("WebApp")).append("</th><th>")
.append(_t("Run at Startup?")).append("</th><th>") .append(_t("Run at Startup?")).append("</th><th>")
.append(_t("Control")).append("</th><th align=\"left\">") .append(_t("Control")).append("</th><th align=\"left\">")
@ -227,7 +227,7 @@ public class ConfigClientsHelper extends HelperBase {
/** plugins */ /** plugins */
public String getForm3() { public String getForm3() {
StringBuilder buf = new StringBuilder(1024); StringBuilder buf = new StringBuilder(1024);
buf.append("<table>\n" + buf.append("<table id=\"pluginconfig\">\n" +
"<tr><th align=\"right\">").append(_t("Plugin")).append("</th><th>") "<tr><th align=\"right\">").append(_t("Plugin")).append("</th><th>")
.append(_t("Run at Startup?")).append("</th><th>") .append(_t("Run at Startup?")).append("</th><th>")
.append(_t("Control")).append("</th><th align=\"left\">") .append(_t("Control")).append("</th><th align=\"left\">")

View File

@ -26,7 +26,7 @@ public class ConfigTunnelsHelper extends HelperBase {
cur++; cur++;
} }
buf.append("<table>\n"); buf.append("<table id=\"tunnelconfig\">\n");
TunnelPoolSettings exploratoryIn = _context.tunnelManager().getInboundSettings(); TunnelPoolSettings exploratoryIn = _context.tunnelManager().getInboundSettings();
TunnelPoolSettings exploratoryOut = _context.tunnelManager().getOutboundSettings(); TunnelPoolSettings exploratoryOut = _context.tunnelManager().getOutboundSettings();
@ -69,7 +69,7 @@ public class ConfigTunnelsHelper extends HelperBase {
boolean advanced = isAdvanced(); boolean advanced = isAdvanced();
buf.append("<tr><th colspan=\"3\"><a name=\"").append(prefix).append("\">"); buf.append("<tr><th colspan=\"3\" class=\"th_title\"><a name=\"").append(prefix).append("\">");
buf.append(name).append("</a></th></tr>\n"); buf.append(name).append("</a></th></tr>\n");
if (in.getLength() <= 0 || if (in.getLength() <= 0 ||
in.getLength() + in.getLengthVariance() <= 0 || in.getLength() + in.getLengthVariance() <= 0 ||

View File

@ -9,6 +9,7 @@ public class ConfigUIHelper extends HelperBase {
public String getSettings() { public String getSettings() {
StringBuilder buf = new StringBuilder(512); StringBuilder buf = new StringBuilder(512);
buf.append("<div id=\"availablethemes\">");
String current = _context.getProperty(CSSHelper.PROP_THEME_NAME, CSSHelper.DEFAULT_THEME); String current = _context.getProperty(CSSHelper.PROP_THEME_NAME, CSSHelper.DEFAULT_THEME);
Set<String> themes = themeSet(); Set<String> themes = themeSet();
for (String theme : themes) { for (String theme : themes) {
@ -18,6 +19,7 @@ public class ConfigUIHelper extends HelperBase {
buf.append("value=\"").append(theme).append("\">").append(_t(theme)).append("<br>\n"); buf.append("value=\"").append(theme).append("\">").append(_t(theme)).append("<br>\n");
} }
boolean universalTheming = _context.getBooleanProperty(CSSHelper.PROP_UNIVERSAL_THEMING); boolean universalTheming = _context.getBooleanProperty(CSSHelper.PROP_UNIVERSAL_THEMING);
buf.append("</div><div id=\"themeoptions\">");
buf.append("<input type=\"checkbox\" name=\"universalTheming\" "); buf.append("<input type=\"checkbox\" name=\"universalTheming\" ");
if (universalTheming) if (universalTheming)
buf.append(CHECKED); buf.append(CHECKED);
@ -35,7 +37,7 @@ public class ConfigUIHelper extends HelperBase {
buf.append(CHECKED); buf.append(CHECKED);
buf.append("value=\"1\">") buf.append("value=\"1\">")
.append(_t("Force the mobile console to be used")) .append(_t("Force the mobile console to be used"))
.append("<br>\n"); .append("</div>\n");
return buf.toString(); return buf.toString();
} }
@ -164,7 +166,7 @@ public class ConfigUIHelper extends HelperBase {
StringBuilder buf = new StringBuilder(512); StringBuilder buf = new StringBuilder(512);
ConsolePasswordManager mgr = new ConsolePasswordManager(_context); ConsolePasswordManager mgr = new ConsolePasswordManager(_context);
Map<String, String> userpw = mgr.getMD5(RouterConsoleRunner.PROP_CONSOLE_PW); Map<String, String> userpw = mgr.getMD5(RouterConsoleRunner.PROP_CONSOLE_PW);
buf.append("<table>"); buf.append("<table id=\"consolepass\">");
if (userpw.isEmpty()) { if (userpw.isEmpty()) {
buf.append("<tr><td colspan=\"3\">"); buf.append("<tr><td colspan=\"3\">");
buf.append(_t("Add a user and password to enable.")); buf.append(_t("Add a user and password to enable."));

View File

@ -99,7 +99,7 @@ public class EventLogHelper extends FormHandler {
// So just use the "shared/console nonce". // So just use the "shared/console nonce".
String nonce = CSSHelper.getNonce(); String nonce = CSSHelper.getNonce();
try { try {
_out.write("<br><h3>" + _t("Display Events") + "</h3>"); _out.write("<br><h3 id=\"displayevents\">" + _t("Display Events") + "</h3>");
_out.write("<form action=\"events\" method=\"POST\">\n" + _out.write("<form action=\"events\" method=\"POST\">\n" +
"<input type=\"hidden\" name=\"action\" value=\"save\">\n" + "<input type=\"hidden\" name=\"action\" value=\"save\">\n" +
"<input type=\"hidden\" name=\"nonce\" value=\"" + nonce + "\" >\n"); "<input type=\"hidden\" name=\"nonce\" value=\"" + nonce + "\" >\n");
@ -175,7 +175,7 @@ public class EventLogHelper extends FormHandler {
return _t("No \"{0}\" events found in previous {1}", xev, DataHelper.formatDuration2(_age)); return _t("No \"{0}\" events found in previous {1}", xev, DataHelper.formatDuration2(_age));
} }
StringBuilder buf = new StringBuilder(2048); StringBuilder buf = new StringBuilder(2048);
buf.append("<table><tr><th>"); buf.append("<table id=\"eventlog\"><tr><th>");
buf.append(_t("Time")); buf.append(_t("Time"));
buf.append("</th><th>"); buf.append("</th><th>");
if (isAll) { if (isAll) {

View File

@ -29,7 +29,7 @@ public class FileDumpHelper extends HelperBase {
public String getFileSummary() { public String getFileSummary() {
StringBuilder buf = new StringBuilder(16*1024); StringBuilder buf = new StringBuilder(16*1024);
buf.append("<table><tr><th>File</th><th>Size</th><th>Date</th><th>SHA 256</th><th>Revision</th>" + buf.append("<table id=\"jardump\"><tr><th>File</th><th>Size</th><th>Date</th><th>SHA 256</th><th>Revision</th>" +
"<th>JDK</th><th>Built</th><th>By</th><th>Mods</th></tr>"); "<th>JDK</th><th>Built</th><th>By</th><th>Mods</th></tr>");
// jars added in wrapper.config // jars added in wrapper.config

View File

@ -232,12 +232,12 @@ public class GraphHelper extends FormHandler {
name = r.getRateStat().getName(); name = r.getRateStat().getName();
displayName = name; displayName = name;
} }
_out.write("<h3>"); _out.write("<h3 id=\"graphinfo\">");
_out.write(_t("{0} for {1}", displayName, DataHelper.formatDuration2(_periodCount * period))); _out.write(_t("{0} for {1}", displayName, DataHelper.formatDuration2(_periodCount * period)));
if (_end > 0) if (_end > 0)
_out.write(' ' + _t("ending {0} ago", DataHelper.formatDuration2(_end * period))); _out.write(' ' + _t("ending {0} ago", DataHelper.formatDuration2(_end * period)));
_out.write("</h3><img class=\"statimage\" border=\"0\"" _out.write("</h3><div class=\"graphspanel\"><img class=\"statimage\" border=\"0\""
+ " src=\"viewstat.jsp?stat=" + " src=\"viewstat.jsp?stat="
+ name + name
+ "&amp;showEvents=" + _showEvents + "&amp;showEvents=" + _showEvents
@ -246,7 +246,7 @@ public class GraphHelper extends FormHandler {
+ "&amp;end=" + _end + "&amp;end=" + _end
+ "&amp;width=" + _width + "&amp;width=" + _width
+ "&amp;height=" + _height + "&amp;height=" + _height
+ "\"><p>\n"); + "\"></div><p id=\"graphopts\">\n");
if (_width < MAX_X && _height < MAX_Y) { if (_width < MAX_X && _height < MAX_Y) {
_out.write(link(_stat, _showEvents, _periodCount, _end, _width * 3 / 2, _height * 3 / 2)); _out.write(link(_stat, _showEvents, _periodCount, _end, _width * 3 / 2, _height * 3 / 2));
@ -353,7 +353,7 @@ public class GraphHelper extends FormHandler {
// So just use the "shared/console nonce". // So just use the "shared/console nonce".
String nonce = CSSHelper.getNonce(); String nonce = CSSHelper.getNonce();
try { try {
_out.write("<br><h3>" + _t("Configure Graph Display") + " [<a href=\"configstats\">" + _t("Select Stats") + "</a>]</h3>"); _out.write("<br><h3 id=\"graphdisplay\">" + _t("Configure Graph Display") + " [<a href=\"configstats\">" + _t("Select Stats") + "</a>]</h3>");
_out.write("<form action=\"graphs\" method=\"POST\">\n" + _out.write("<form action=\"graphs\" method=\"POST\">\n" +
"<input type=\"hidden\" name=\"action\" value=\"save\">\n" + "<input type=\"hidden\" name=\"action\" value=\"save\">\n" +
"<input type=\"hidden\" name=\"nonce\" value=\"" + nonce + "\" >\n"); "<input type=\"hidden\" name=\"nonce\" value=\"" + nonce + "\" >\n");
@ -384,7 +384,7 @@ public class GraphHelper extends FormHandler {
if (persistent) if (persistent)
_out.write(HelperBase.CHECKED); _out.write(HelperBase.CHECKED);
_out.write(">" + _out.write(">" +
"<hr><div class=\"formaction\"><input type=\"submit\" class=\"accept\" value=\"" + _t("Save settings and redraw graphs") + "\"></div></form>"); "<hr><div class=\"formaction\" id=\"graphing\"><input type=\"submit\" class=\"accept\" value=\"" + _t("Save settings and redraw graphs") + "\"></div></form>");
} catch (IOException ioe) { } catch (IOException ioe) {
ioe.printStackTrace(); ioe.printStackTrace();
} }

View File

@ -211,7 +211,7 @@ public class HomeHelper extends HelperBase {
private String renderConfig(Collection<App> apps) { private String renderConfig(Collection<App> apps) {
StringBuilder buf = new StringBuilder(1024); StringBuilder buf = new StringBuilder(1024);
buf.append("<table><tr><th>") buf.append("<table class=\"homelinkedit\"><tr><th>")
.append(_t("Remove")) .append(_t("Remove"))
.append("</th><th colspan=\"2\">") .append("</th><th colspan=\"2\">")
.append(_t("Name")) .append(_t("Name"))
@ -238,7 +238,7 @@ public class HomeHelper extends HelperBase {
buf.append(url); buf.append(url);
buf.append("</a></td></tr>\n"); buf.append("</a></td></tr>\n");
} }
buf.append("<tr><td colspan=\"2\" align=\"center\"><b>") buf.append("<tr id=\"addnew\"><td colspan=\"2\" align=\"center\"><b>")
.append(_t("Add")).append(":</b>" + .append(_t("Add")).append(":</b>" +
"</td><td align=\"left\"><input type=\"text\" name=\"nofilter_name\"></td>" + "</td><td align=\"left\"><input type=\"text\" name=\"nofilter_name\"></td>" +
"<td align=\"left\"><input type=\"text\" size=\"40\" name=\"nofilter_url\"></td></tr>"); "<td align=\"left\"><input type=\"text\" size=\"40\" name=\"nofilter_url\"></td></tr>");

View File

@ -120,7 +120,7 @@ public class JobQueueHelper extends HelperBase {
List<String> names = new ArrayList<String>(counter.objects()); List<String> names = new ArrayList<String>(counter.objects());
if (names.size() < 4) if (names.size() < 4)
return; return;
buf.append("<table style=\"width: 30%; margin-left: 100px;\">\n" + buf.append("<table id=\"schedjobs\" style=\"width: 30%; margin-left: 100px;\">\n" +
"<tr><th>").append(_t("Job")).append("</th><th>").append(_t("Queued")).append("<th>"); "<tr><th>").append(_t("Job")).append("</th><th>").append(_t("Queued")).append("<th>");
Collections.sort(names, new JobCountComparator(counter)); Collections.sort(names, new JobCountComparator(counter));
for (String name : names) { for (String name : names) {
@ -137,7 +137,7 @@ public class JobQueueHelper extends HelperBase {
* @since 0.8.9 * @since 0.8.9
*/ */
private void getJobStats(StringBuilder buf) { private void getJobStats(StringBuilder buf) {
buf.append("<table>\n" + buf.append("<table id=\"jobstats\">\n" +
"<tr><th>").append(_t("Job")).append("</th><th>").append(_t("Runs")).append("</th>" + "<tr><th>").append(_t("Job")).append("</th><th>").append(_t("Runs")).append("</th>" +
"<th>").append(_t("Dropped")).append("</th>" + "<th>").append(_t("Dropped")).append("</th>" +
"<th>").append(_t("Time")).append("</th><th><i>").append(_t("Avg")).append("</i></th><th><i>") "<th>").append(_t("Time")).append("</th><th><i>").append(_t("Avg")).append("</i></th><th><i>")

View File

@ -124,7 +124,7 @@ class NetDbRenderer {
public void renderLeaseSetHTML(Writer out, boolean debug) throws IOException { public void renderLeaseSetHTML(Writer out, boolean debug) throws IOException {
StringBuilder buf = new StringBuilder(4*1024); StringBuilder buf = new StringBuilder(4*1024);
if (debug) if (debug)
buf.append("<p>Debug mode - Sorted by hash distance, closest first</p>\n"); buf.append("<p id=\"debugmode\">Debug mode - Sorted by hash distance, closest first</p>\n");
Hash ourRKey; Hash ourRKey;
Set<LeaseSet> leases; Set<LeaseSet> leases;
DecimalFormat fmt; DecimalFormat fmt;
@ -338,14 +338,14 @@ class NetDbRenderer {
if (!showStats) { if (!showStats) {
// the summary table // the summary table
buf.append("<table border=\"0\" cellspacing=\"30\"><tr><th colspan=\"3\">") buf.append("<table id=\"netdboverview\" border=\"0\" cellspacing=\"30\"><tr><th colspan=\"3\">")
.append(_t("Network Database Router Statistics")) .append(_t("Network Database Router Statistics"))
.append("</th></tr><tr><td style=\"vertical-align: top;\">"); .append("</th></tr><tr><td style=\"vertical-align: top;\">");
// versions table // versions table
List<String> versionList = new ArrayList<String>(versions.objects()); List<String> versionList = new ArrayList<String>(versions.objects());
if (!versionList.isEmpty()) { if (!versionList.isEmpty()) {
Collections.sort(versionList, Collections.reverseOrder(new VersionComparator())); Collections.sort(versionList, Collections.reverseOrder(new VersionComparator()));
buf.append("<table>\n"); buf.append("<table id=\"netdbversions\">\n");
buf.append("<tr><th>" + _t("Version") + "</th><th>" + _t("Count") + "</th></tr>\n"); buf.append("<tr><th>" + _t("Version") + "</th><th>" + _t("Count") + "</th></tr>\n");
for (String routerVersion : versionList) { for (String routerVersion : versionList) {
int num = versions.count(routerVersion); int num = versions.count(routerVersion);
@ -364,7 +364,7 @@ class NetDbRenderer {
start = end; start = end;
// transports table // transports table
buf.append("<table>\n"); buf.append("<table id=\"netdbtransports\">\n");
buf.append("<tr><th align=\"left\">" + _t("Transports") + "</th><th>" + _t("Count") + "</th></tr>\n"); buf.append("<tr><th align=\"left\">" + _t("Transports") + "</th><th>" + _t("Count") + "</th></tr>\n");
for (int i = 0; i < TNAMES.length; i++) { for (int i = 0; i < TNAMES.length; i++) {
int num = transportCount[i]; int num = transportCount[i];
@ -386,7 +386,7 @@ class NetDbRenderer {
List<String> countryList = new ArrayList<String>(countries.objects()); List<String> countryList = new ArrayList<String>(countries.objects());
if (!countryList.isEmpty()) { if (!countryList.isEmpty()) {
Collections.sort(countryList, new CountryComparator()); Collections.sort(countryList, new CountryComparator());
buf.append("<table>\n"); buf.append("<table id=\"netdbcountrylist\">\n");
buf.append("<tr><th align=\"left\">" + _t("Country") + "</th><th>" + _t("Count") + "</th></tr>\n"); buf.append("<tr><th align=\"left\">" + _t("Country") + "</th><th>" + _t("Count") + "</th></tr>\n");
for (String country : countryList) { for (String country : countryList) {
int num = countries.count(country); int num = countries.count(country);

View File

@ -78,13 +78,14 @@ class ProfileOrganizerRenderer {
if (mode < 2) { if (mode < 2) {
//buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>"); //buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
buf.append("<p id=\"profiles_overview\" class=\"infohelp\">");
buf.append(ngettext("Showing 1 recent profile.", "Showing {0} recent profiles.", order.size())).append('\n'); buf.append(ngettext("Showing 1 recent profile.", "Showing {0} recent profiles.", order.size())).append('\n');
if (older > 0) if (older > 0)
buf.append(ngettext("Hiding 1 older profile.", "Hiding {0} older profiles.", older)).append('\n'); buf.append(ngettext("Hiding 1 older profile.", "Hiding {0} older profiles.", older)).append('\n');
if (standard > 0) if (standard > 0)
buf.append("<a href=\"/profiles?f=1\">").append(ngettext("Hiding 1 standard profile.", "Hiding {0} standard profiles.", standard)).append("</a>\n"); buf.append("<a href=\"/profiles?f=1\">").append(ngettext("Hiding 1 standard profile.", "Hiding {0} standard profiles.", standard)).append("</a>\n");
buf.append("</p>"); buf.append("</p>");
buf.append("<table>"); buf.append("<table id=\"profiles\">");
buf.append("<tr>"); buf.append("<tr>");
buf.append("<th>").append(_t("Peer")).append("</th>"); buf.append("<th>").append(_t("Peer")).append("</th>");
buf.append("<th>").append(_t("Groups (Caps)")).append("</th>"); buf.append("<th>").append(_t("Groups (Caps)")).append("</th>");
@ -197,7 +198,7 @@ class ProfileOrganizerRenderer {
//buf.append("<h2><a name=\"flood\"></a>").append(_t("Floodfill and Integrated Peers")) //buf.append("<h2><a name=\"flood\"></a>").append(_t("Floodfill and Integrated Peers"))
// .append(" (").append(integratedPeers.size()).append(")</h2>\n"); // .append(" (").append(integratedPeers.size()).append(")</h2>\n");
buf.append("<table>"); buf.append("<div class=\"widescroll\"><table id=\"floodfills\">");
buf.append("<tr>"); buf.append("<tr>");
buf.append("<th class=\"smallhead\">").append(_t("Peer")).append("</th>"); buf.append("<th class=\"smallhead\">").append(_t("Peer")).append("</th>");
buf.append("<th class=\"smallhead\">").append(_t("Caps")).append("</th>"); buf.append("<th class=\"smallhead\">").append(_t("Caps")).append("</th>");
@ -250,7 +251,7 @@ class ProfileOrganizerRenderer {
} }
buf.append("</tr>\n"); buf.append("</tr>\n");
} }
buf.append("</table>"); buf.append("</table></div>");
//// ////
//// don't bother reindenting //// don't bother reindenting

View File

@ -69,12 +69,12 @@ public class StatsGenerator {
for (Map.Entry<String, Set<String>> entry : groups.entrySet()) { for (Map.Entry<String, Set<String>> entry : groups.entrySet()) {
String group = entry.getKey(); String group = entry.getKey();
Set<String> stats = entry.getValue(); Set<String> stats = entry.getValue();
buf.append("<h3><a name=\""); buf.append("<h3 class=\"stats\"><a name=\"");
buf.append(group); buf.append(group);
buf.append("\">"); buf.append("\">");
buf.append(_t(group)); buf.append(_t(group));
buf.append("</a></h3>"); buf.append("</a></h3>");
buf.append("<ul>"); buf.append("<ul class=\"statlist\">");
out.write(buf.toString()); out.write(buf.toString());
buf.setLength(0); buf.setLength(0);
for (String stat : stats) { for (String stat : stats) {

View File

@ -139,7 +139,7 @@ class SummaryBarRenderer {
.append(_t("I2P Services")) .append(_t("I2P Services"))
.append("</a></h3>\n" + .append("</a></h3>\n" +
"<hr class=\"b\"><table><tr><td>" + "<hr class=\"b\"><table id=\"services\"><tr><td>" +
"<a href=\"/susimail/susimail\" target=\"_blank\" title=\"") "<a href=\"/susimail/susimail\" target=\"_blank\" title=\"")
.append(_t("Anonymous webmail client")) .append(_t("Anonymous webmail client"))
@ -456,7 +456,7 @@ class SummaryBarRenderer {
.append("\" target=\"_top\">") .append("\" target=\"_top\">")
.append(_t("Bandwidth in/out")) .append(_t("Bandwidth in/out"))
.append("</a></h3><hr class=\"b\">" + .append("</a></h3><hr class=\"b\">" +
"<table>\n" + "<table id=\"bandwidth\">\n" +
"<tr><td align=\"left\"><b>") "<tr><td align=\"left\"><b>")
.append(DataHelper.formatDuration2(3 * 1000)) // lie and say 3 sec since 1 sec would appear as 1000 ms .append(DataHelper.formatDuration2(3 * 1000)) // lie and say 3 sec since 1 sec would appear as 1000 ms

View File

@ -928,7 +928,7 @@ public class SummaryHelper extends HelperBase {
String imgPath = CSSHelper.BASE_THEME_PATH + theme + "/images/"; String imgPath = CSSHelper.BASE_THEME_PATH + theme + "/images/";
StringBuilder buf = new StringBuilder(2048); StringBuilder buf = new StringBuilder(2048);
buf.append("<table class=\"sidebarconf\"><tr><th>") buf.append("<table id=\"sidebarconf\"><tr><th>")
.append(_t("Remove")) .append(_t("Remove"))
.append("</th><th>") .append("</th><th>")
.append(_t("Name")) .append(_t("Name"))

View File

@ -154,15 +154,15 @@ class SybilRenderer {
ris.add(ri); ris.add(ri);
} }
if (ris.isEmpty()) { if (ris.isEmpty()) {
out.write("<h3>No known floodfills</h3>"); out.write("<h3 class=\"sybils\">No known floodfills</h3>");
return; return;
} }
StringBuilder buf = new StringBuilder(4*1024); StringBuilder buf = new StringBuilder(4*1024);
buf.append("<p><b>This is an experimental network database tool for debugging and analysis. Do not panic even if you see warnings below. " + buf.append("<p id=\"sybilinfo\"><b>This is an experimental network database tool for debugging and analysis. Do not panic even if you see warnings below. " +
"Possible \"threats\" are summarized at the bottom, however these are unlikely to be real threats. " + "Possible \"threats\" are summarized at the bottom, however these are unlikely to be real threats. " +
"If you see anything you would like to discuss with the devs, contact us on IRC #i2p-dev.</b></p>" + "If you see anything you would like to discuss with the devs, contact us on IRC #i2p-dev.</b></p>" +
"<ul><li><a href=\"#known\">FF Summary</a>" + "<div id=\"sybilnav\"><ul><li><a href=\"#known\">FF Summary</a>" +
"</li><li><a href=\"#family\">Same Family</a>" + "</li><li><a href=\"#family\">Same Family</a>" +
"</li><li><a href=\"#ourIP\">IP close to us</a>" + "</li><li><a href=\"#ourIP\">IP close to us</a>" +
"</li><li><a href=\"#sameIP\">Same IP</a>" + "</li><li><a href=\"#sameIP\">Same IP</a>" +
@ -174,10 +174,10 @@ class SybilRenderer {
"</li><li><a href=\"#dht\">DHT neighbors</a>" + "</li><li><a href=\"#dht\">DHT neighbors</a>" +
"</li><li><a href=\"#dest\">Close to our destinations</a>" + "</li><li><a href=\"#dest\">Close to our destinations</a>" +
"</li><li><a href=\"#threats\">Highest threats</a>" + "</li><li><a href=\"#threats\">Highest threats</a>" +
"</li></ul>"); "</li></ul></div>");
renderRouterInfo(buf, _context.router().getRouterInfo(), null, true, false); renderRouterInfo(buf, _context.router().getRouterInfo(), null, true, false);
buf.append("<h3 id=\"known\">Known Floodfills: ").append(ris.size()).append("</h3>"); buf.append("<h3 id=\"known\" class=\"sybils\">Known Floodfills: ").append(ris.size()).append("</h3>");
double tot = 0; double tot = 0;
int count = 200; int count = 200;
@ -209,18 +209,18 @@ class SybilRenderer {
renderPairDistance(out, buf, ris, points); renderPairDistance(out, buf, ris, points);
// Distance to our router analysis // Distance to our router analysis
buf.append("<h3 id=\"ritoday\">Closest Floodfills to Our Routing Key (Where we Store our RI)</h3>"); buf.append("<h3 id=\"ritoday\" class=\"sybils\">Closest Floodfills to Our Routing Key (Where we Store our RI)</h3>");
renderRouterInfoHTML(out, buf, ourRKey, avgMinDist, ris, points); renderRouterInfoHTML(out, buf, ourRKey, avgMinDist, ris, points);
RouterKeyGenerator rkgen = _context.routerKeyGenerator(); RouterKeyGenerator rkgen = _context.routerKeyGenerator();
Hash nkey = rkgen.getNextRoutingKey(us); Hash nkey = rkgen.getNextRoutingKey(us);
buf.append("<h3 id=\"ritmrw\">Closest Floodfills to Tomorrow's Routing Key (Where we will Store our RI)</h3>"); buf.append("<h3 id=\"ritmrw\" class=\"sybils\">Closest Floodfills to Tomorrow's Routing Key (Where we will Store our RI)</h3>");
renderRouterInfoHTML(out, buf, nkey, avgMinDist, ris, points); renderRouterInfoHTML(out, buf, nkey, avgMinDist, ris, points);
buf.append("<h3 id=\"dht\">Closest Floodfills to Our Router Hash (DHT Neighbors if we are Floodfill)</h3>"); buf.append("<h3 id=\"dht\" class=\"sybils\">Closest Floodfills to Our Router Hash (DHT Neighbors if we are Floodfill)</h3>");
renderRouterInfoHTML(out, buf, us, avgMinDist, ris, points); renderRouterInfoHTML(out, buf, us, avgMinDist, ris, points);
// Distance to our published destinations analysis // Distance to our published destinations analysis
buf.append("<h3 id=\"dest\">Floodfills Close to Our Destinations</h3>"); buf.append("<h3 id=\"dest\" class=\"sybils\">Floodfills Close to Our Destinations</h3>");
Map<Hash, TunnelPool> clientInboundPools = _context.tunnelManager().getInboundClientPools(); Map<Hash, TunnelPool> clientInboundPools = _context.tunnelManager().getInboundClientPools();
List<Hash> destinations = new ArrayList<Hash>(clientInboundPools.keySet()); List<Hash> destinations = new ArrayList<Hash>(clientInboundPools.keySet());
boolean debug = _context.getBooleanProperty(HelperBase.PROP_ADVANCED); boolean debug = _context.getBooleanProperty(HelperBase.PROP_ADVANCED);
@ -236,10 +236,10 @@ class SybilRenderer {
Hash rkey = ls.getRoutingKey(); Hash rkey = ls.getRoutingKey();
TunnelPool in = clientInboundPools.get(client); TunnelPool in = clientInboundPools.get(client);
String name = (in != null) ? in.getSettings().getDestinationNickname() : client.toBase64().substring(0,4); String name = (in != null) ? in.getSettings().getDestinationNickname() : client.toBase64().substring(0,4);
buf.append("<h3>Closest floodfills to the Routing Key for " + DataHelper.escapeHTML(name) + " (where we store our LS)</h3>"); buf.append("<h3 class=\"sybils\">Closest floodfills to the Routing Key for " + DataHelper.escapeHTML(name) + " (where we store our LS)</h3>");
renderRouterInfoHTML(out, buf, rkey, avgMinDist, ris, points); renderRouterInfoHTML(out, buf, rkey, avgMinDist, ris, points);
nkey = rkgen.getNextRoutingKey(ls.getHash()); nkey = rkgen.getNextRoutingKey(ls.getHash());
buf.append("<h3>Closest floodfills to Tomorrow's Routing Key for " + DataHelper.escapeHTML(name) + " (where we will store our LS)</h3>"); buf.append("<h3 class=\"sybils\">Closest floodfills to Tomorrow's Routing Key for " + DataHelper.escapeHTML(name) + " (where we will store our LS)</h3>");
renderRouterInfoHTML(out, buf, nkey, avgMinDist, ris, points); renderRouterInfoHTML(out, buf, nkey, avgMinDist, ris, points);
} }
@ -250,7 +250,7 @@ class SybilRenderer {
if (!points.isEmpty()) { if (!points.isEmpty()) {
List<Hash> warns = new ArrayList<Hash>(points.keySet()); List<Hash> warns = new ArrayList<Hash>(points.keySet());
Collections.sort(warns, new PointsComparator(points)); Collections.sort(warns, new PointsComparator(points));
buf.append("<h3 id=\"threats\">Routers with Most Threat Points</h3>"); buf.append("<h3 id=\"threats\" class=\"sybils\">Routers with Most Threat Points</h3>");
for (Hash h : warns) { for (Hash h : warns) {
RouterInfo ri = _context.netDb().lookupRouterInfoLocally(h); RouterInfo ri = _context.netDb().lookupRouterInfoLocally(h);
if (ri == null) if (ri == null)
@ -259,7 +259,7 @@ class SybilRenderer {
double p = pp.points; double p = pp.points;
if (p < MIN_DISPLAY_POINTS) if (p < MIN_DISPLAY_POINTS)
break; // sorted break; // sorted
buf.append("<p><b>Threat Points: " + fmt.format(p) + "</b><ul>"); buf.append("<p class=\"threatpoints\"><b>Threat Points: " + fmt.format(p) + "</b><ul>");
for (String s : pp.reasons) { for (String s : pp.reasons) {
buf.append("<li>").append(s).append("</li>"); buf.append("<li>").append(s).append("</li>");
} }
@ -307,9 +307,9 @@ class SybilRenderer {
} }
double avg = total / (sz * sz / 2); double avg = total / (sz * sz / 2);
buf.append("<h3>Average Floodfill Distance is ").append(fmt.format(avg)).append("</h3>"); buf.append("<h3 class=\"sybils\">Average Floodfill Distance is ").append(fmt.format(avg)).append("</h3>");
buf.append("<h3 id=\"pairs\">Closest Floodfill Pairs by Hash</h3>"); buf.append("<h3 id=\"pairs\" class=\"sybils\">Closest Floodfill Pairs by Hash</h3>");
for (Pair p : pairs) { for (Pair p : pairs) {
double distance = biLog2(p.dist); double distance = biLog2(p.dist);
double point = MIN_CLOSE - distance; double point = MIN_CLOSE - distance;
@ -317,7 +317,7 @@ class SybilRenderer {
break; // sorted; break; // sorted;
if (point >= 2) { if (point >= 2) {
// limit display // limit display
buf.append("<p><b>Hash Distance: ").append(fmt.format(distance)).append(": </b>"); buf.append("<p class=\"hashdist\"><b>Hash Distance: ").append(fmt.format(distance)).append(": </b>");
buf.append("</p>"); buf.append("</p>");
renderRouterInfo(buf, p.r1, null, false, false); renderRouterInfo(buf, p.r1, null, false, false);
renderRouterInfo(buf, p.r2, null, false, false); renderRouterInfo(buf, p.r2, null, false, false);
@ -386,14 +386,14 @@ class SybilRenderer {
byte[] ourIP = getIP(us); byte[] ourIP = getIP(us);
if (ourIP == null) if (ourIP == null)
return; return;
buf.append("<h3 \"ourIP\">Floodfills close to Our IP</h3>"); buf.append("<h3 id=\"ourIP\" class=\"sybils\">Floodfills close to Our IP</h3>");
boolean found = false; boolean found = false;
for (RouterInfo info : ris) { for (RouterInfo info : ris) {
byte[] ip = getIP(info); byte[] ip = getIP(info);
if (ip == null) if (ip == null)
continue; continue;
if (ip[0] == ourIP[0] && ip[1] == ourIP[1]) { if (ip[0] == ourIP[0] && ip[1] == ourIP[1]) {
buf.append("<p><b>"); buf.append("<p id=\"sybil_floodfill\"><b>");
if (ip[2] == ourIP[2]) { if (ip[2] == ourIP[2]) {
if (ip[3] == ourIP[3]) { if (ip[3] == ourIP[3]) {
buf.append("Same IP as us"); buf.append("Same IP as us");
@ -412,14 +412,14 @@ class SybilRenderer {
} }
} }
if (!found) if (!found)
buf.append("<p>None</p>"); buf.append("<p class=\"notfound\">None</p>");
out.write(buf.toString()); out.write(buf.toString());
out.flush(); out.flush();
buf.setLength(0); buf.setLength(0);
} }
private void renderIPGroups32(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException { private void renderIPGroups32(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException {
buf.append("<h3 id=\"sameIP\">Floodfills with the Same IP</h3>"); buf.append("<h3 id=\"sameIP\" class=\"sybils\">Floodfills with the Same IP</h3>");
ObjectCounter<Integer> oc = new ObjectCounter<Integer>(); ObjectCounter<Integer> oc = new ObjectCounter<Integer>();
for (RouterInfo info : ris) { for (RouterInfo info : ris) {
byte[] ip = getIP(info); byte[] ip = getIP(info);
@ -443,7 +443,7 @@ class SybilRenderer {
int i1 = (i >> 16) & 0xff; int i1 = (i >> 16) & 0xff;
int i2 = (i >> 8) & 0xff; int i2 = (i >> 8) & 0xff;
int i3 = i & 0xff; int i3 = i & 0xff;
buf.append("<p><b>").append(count).append(" floodfills with IP ").append(i0).append('.') buf.append("<p class=\"sybil_floodfill\"><b>").append(count).append(" floodfills with IP ").append(i0).append('.')
.append(i1).append('.').append(i2).append('.').append(i3) .append(i1).append('.').append(i2).append('.').append(i3)
.append(":</b></p>"); .append(":</b></p>");
for (RouterInfo info : ris) { for (RouterInfo info : ris) {
@ -465,14 +465,14 @@ class SybilRenderer {
} }
} }
if (!found) if (!found)
buf.append("<p>None</p>"); buf.append("<p class=\"notfound\">None</p>");
out.write(buf.toString()); out.write(buf.toString());
out.flush(); out.flush();
buf.setLength(0); buf.setLength(0);
} }
private void renderIPGroups24(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException { private void renderIPGroups24(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException {
buf.append("<h3 id=\"same24\">Floodfills in the Same /24 (2 minimum)</h3>"); buf.append("<h3 id=\"same24\" class=\"sybils\">Floodfills in the Same /24 (2 minimum)</h3>");
ObjectCounter<Integer> oc = new ObjectCounter<Integer>(); ObjectCounter<Integer> oc = new ObjectCounter<Integer>();
for (RouterInfo info : ris) { for (RouterInfo info : ris) {
byte[] ip = getIP(info); byte[] ip = getIP(info);
@ -495,7 +495,7 @@ class SybilRenderer {
int i0 = i >> 16; int i0 = i >> 16;
int i1 = (i >> 8) & 0xff; int i1 = (i >> 8) & 0xff;
int i2 = i & 0xff; int i2 = i & 0xff;
buf.append("<p><b>").append(count).append(" floodfills in ").append(i0).append('.') buf.append("<p class=\"sybil_floodfill\"><b>").append(count).append(" floodfills in ").append(i0).append('.')
.append(i1).append('.').append(i2).append(".0/24:</b></p>"); .append(i1).append('.').append(i2).append(".0/24:</b></p>");
for (RouterInfo info : ris) { for (RouterInfo info : ris) {
byte[] ip = getIP(info); byte[] ip = getIP(info);
@ -514,14 +514,14 @@ class SybilRenderer {
} }
} }
if (!found) if (!found)
buf.append("<p>None</p>"); buf.append("<p class=\"notfound\">None</p>");
out.write(buf.toString()); out.write(buf.toString());
out.flush(); out.flush();
buf.setLength(0); buf.setLength(0);
} }
private void renderIPGroups16(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException { private void renderIPGroups16(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException {
buf.append("<h3 id=\"same16\">Floodfills in the Same /16 (4 minimum)</h3>"); buf.append("<h3 id=\"same16\" class=\"sybils\">Floodfills in the Same /16 (4 minimum)</h3>");
ObjectCounter<Integer> oc = new ObjectCounter<Integer>(); ObjectCounter<Integer> oc = new ObjectCounter<Integer>();
for (RouterInfo info : ris) { for (RouterInfo info : ris) {
byte[] ip = getIP(info); byte[] ip = getIP(info);
@ -543,7 +543,7 @@ class SybilRenderer {
int i = ii.intValue(); int i = ii.intValue();
int i0 = i >> 8; int i0 = i >> 8;
int i1 = i & 0xff; int i1 = i & 0xff;
buf.append("<p><b>").append(count).append(" floodfills in ").append(i0).append('.') buf.append("<p class=\"sybil_floodfill\"><b>").append(count).append(" floodfills in ").append(i0).append('.')
.append(i1).append(".0.0/16</b></p>"); .append(i1).append(".0.0/16</b></p>");
for (RouterInfo info : ris) { for (RouterInfo info : ris) {
byte[] ip = getIP(info); byte[] ip = getIP(info);
@ -561,14 +561,14 @@ class SybilRenderer {
} }
} }
if (!found) if (!found)
buf.append("<p>None</p>"); buf.append("<p class=\"notfound\">None</p>");
out.write(buf.toString()); out.write(buf.toString());
out.flush(); out.flush();
buf.setLength(0); buf.setLength(0);
} }
private void renderIPGroupsFamily(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException { private void renderIPGroupsFamily(Writer out, StringBuilder buf, List<RouterInfo> ris, Map<Hash, Points> points) throws IOException {
buf.append("<h3>Floodfills in the Same Declared Family</h3>"); buf.append("<h3 id=\"samefamily\" class=\"sybils\">Floodfills in the Same Declared Family</h3>");
ObjectCounter<String> oc = new ObjectCounter<String>(); ObjectCounter<String> oc = new ObjectCounter<String>();
for (RouterInfo info : ris) { for (RouterInfo info : ris) {
String fam = info.getOption("family"); String fam = info.getOption("family");
@ -581,7 +581,7 @@ class SybilRenderer {
boolean found = false; boolean found = false;
for (String s : foo) { for (String s : foo) {
int count = oc.count(s); int count = oc.count(s);
buf.append("<p><b>").append(count).append(" floodfills in declared family \"").append(DataHelper.escapeHTML(s) + '"') buf.append("<p id=\"family\"><b>").append(count).append(" floodfills in declared family \"").append(DataHelper.escapeHTML(s) + '"')
.append("</b></p>"); .append("</b></p>");
for (RouterInfo info : ris) { for (RouterInfo info : ris) {
String fam = info.getOption("family"); String fam = info.getOption("family");
@ -600,7 +600,7 @@ class SybilRenderer {
} }
} }
if (!found) if (!found)
buf.append("<p>None</p>"); buf.append("<p class=\"notfound\">None</p>");
out.write(buf.toString()); out.write(buf.toString());
out.flush(); out.flush();
buf.setLength(0); buf.setLength(0);
@ -725,7 +725,7 @@ class SybilRenderer {
break; break;
} }
double avg = tot / count; double avg = tot / count;
buf.append("<p><b>Totals for " + count + " floodfills: </b>MIN=" + fmt.format(min) + " AVG=" + fmt.format(avg) + " MEDIAN=" + fmt.format(median) + " MAX=" + fmt.format(max) + "</p>\n"); buf.append("<p id=\"sybil_totals\"><b>Totals for " + count + " floodfills: </b>MIN=" + fmt.format(min) + " AVG=" + fmt.format(avg) + " MEDIAN=" + fmt.format(median) + " MAX=" + fmt.format(max) + "</p>\n");
out.write(buf.toString()); out.write(buf.toString());
out.flush(); out.flush();
buf.setLength(0); buf.setLength(0);

View File

@ -33,7 +33,7 @@ class TunnelRenderer {
} }
public void renderStatusHTML(Writer out) throws IOException { public void renderStatusHTML(Writer out) throws IOException {
out.write("<div class=\"wideload\"><h2><a name=\"exploratory\" ></a>" + _t("Exploratory tunnels") + " (<a href=\"/configtunnels#exploratory\">" + _t("configure") + "</a>)</h2>\n"); out.write("<h3 class=\"tabletitle\" id=\"exploratorytunnels\"><a name=\"exploratory\" ></a>" + _t("Exploratory tunnels") + " (<a href=\"/configtunnels#exploratory\">" + _t("configure") + "</a>)</h3>\n");
renderPool(out, _context.tunnelManager().getInboundExploratoryPool(), _context.tunnelManager().getOutboundExploratoryPool()); renderPool(out, _context.tunnelManager().getInboundExploratoryPool(), _context.tunnelManager().getOutboundExploratoryPool());
List<Hash> destinations = null; List<Hash> destinations = null;
@ -54,20 +54,20 @@ class TunnelRenderer {
name = outPool.getSettings().getDestinationNickname(); name = outPool.getSettings().getDestinationNickname();
if (name == null) if (name == null)
name = client.toBase64().substring(0,4); name = client.toBase64().substring(0,4);
out.write("<h2><a name=\"" + client.toBase64().substring(0,4) out.write("<h3 class=\"tabletitle\"><a name=\"" + client.toBase64().substring(0,4)
+ "\" ></a>" + _t("Client tunnels for") + ' ' + DataHelper.escapeHTML(_t(name))); + "\" ></a>" + _t("Client tunnels for") + ' ' + DataHelper.escapeHTML(_t(name)));
if (isLocal) if (isLocal)
out.write(" (<a href=\"/configtunnels#" + client.toBase64().substring(0,4) +"\">" + _t("configure") + "</a>)</h2>\n"); out.write(" (<a href=\"/configtunnels#" + client.toBase64().substring(0,4) +"\">" + _t("configure") + "</a>)</h3>\n");
else else
out.write(" (" + _t("dead") + ")</h2>\n"); out.write(" (" + _t("dead") + ")</h3>\n");
renderPool(out, in, outPool); renderPool(out, in, outPool);
} }
List<HopConfig> participating = _context.tunnelDispatcher().listParticipatingTunnels(); List<HopConfig> participating = _context.tunnelDispatcher().listParticipatingTunnels();
out.write("<h2><a name=\"participating\"></a>" + _t("Participating tunnels") + "</h2>\n"); out.write("<h3 class=\"tabletitle\"><a name=\"participating\"></a>" + _t("Participating tunnels") + "</h3>\n");
if (!participating.isEmpty()) { if (!participating.isEmpty()) {
Collections.sort(participating, new TunnelComparator()); Collections.sort(participating, new TunnelComparator());
out.write("<table><tr><th>" + _t("Receive on") + "</th><th>" + _t("From") + "</th><th>" out.write("<table class=\"tunneldisplay\"><tr><th>" + _t("Receive on") + "</th><th>" + _t("From") + "</th><th>"
+ _t("Send on") + "</th><th>" + _t("To") + "</th><th>" + _t("Expiration") + "</th>" + _t("Send on") + "</th><th>" + _t("To") + "</th><th>" + _t("Expiration") + "</th>"
+ "<th>" + _t("Usage") + "</th><th>" + _t("Rate") + "</th><th>" + _t("Role") + "</th></tr>\n"); + "<th>" + _t("Usage") + "</th><th>" + _t("Rate") + "</th><th>" + _t("Role") + "</th></tr>\n");
} }
@ -136,7 +136,6 @@ class TunnelRenderer {
out.write("<div class=\"statusnotes\"><b>" + _t("none") + "</b></div>\n"); out.write("<div class=\"statusnotes\"><b>" + _t("none") + "</b></div>\n");
out.write("<div class=\"statusnotes\"><b>" + _t("Lifetime bandwidth usage") + ": " + DataHelper.formatSize2(processed*1024) + "B</b></div>\n"); out.write("<div class=\"statusnotes\"><b>" + _t("Lifetime bandwidth usage") + ": " + DataHelper.formatSize2(processed*1024) + "B</b></div>\n");
//renderPeers(out); //renderPeers(out);
out.write("</div>");
} }
private static class TunnelComparator implements Comparator<HopConfig>, Serializable { private static class TunnelComparator implements Comparator<HopConfig>, Serializable {
@ -164,7 +163,7 @@ class TunnelRenderer {
if (info.getLength() > maxLength) if (info.getLength() > maxLength)
maxLength = info.getLength(); maxLength = info.getLength();
} }
out.write("<table><tr><th>" + _t("In/Out") + "</th><th>" + _t("Expiry") + "</th><th>" + _t("Usage") + "</th><th>" + _t("Gateway") + "</th>"); out.write("<table class=\"tunneldisplay\"><tr><th>" + _t("In/Out") + "</th><th>" + _t("Expiry") + "</th><th>" + _t("Usage") + "</th><th>" + _t("Gateway") + "</th>");
if (maxLength > 3) { if (maxLength > 3) {
out.write("<th align=\"center\" colspan=\"" + (maxLength - 2)); out.write("<th align=\"center\" colspan=\"" + (maxLength - 2));
out.write("\">" + _t("Participants") + "</th>"); out.write("\">" + _t("Participants") + "</th>");

View File

@ -15,7 +15,7 @@
<jsp:useBean class="net.i2p.router.web.ConfigNetHelper" id="nethelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigNetHelper" id="nethelper" scope="request" />
<jsp:setProperty name="nethelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <jsp:setProperty name="nethelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<h1><%=intl._t("I2P Bandwidth Configuration")%></h1> <h1><%=intl._t("I2P Bandwidth Configuration")%></h1>
<div class="main" id="main"> <div class="main" id="help">
<%@include file="confignav.jsi" %> <%@include file="confignav.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigNetHandler" id="formhandler" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigNetHandler" id="formhandler" scope="request" />

View File

@ -26,7 +26,7 @@ input.default {
<jsp:useBean class="net.i2p.router.web.HomeHelper" id="homehelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.HomeHelper" id="homehelper" scope="request" />
<jsp:setProperty name="homehelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <jsp:setProperty name="homehelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<h3><%=intl._t("Default Home Page")%></h3> <h3 class="tabletitle"><%=intl._t("Default Home Page")%></h3>
<form action="" method="POST"> <form action="" method="POST">
<input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="nonce" value="<%=pageNonce%>" >
<input type="hidden" name="group" value="0"> <input type="hidden" name="group" value="0">
@ -38,12 +38,12 @@ input.default {
<% <%
if (homehelper.shouldShowSearch()) { if (homehelper.shouldShowSearch()) {
%> %>
<h3><%=intl._t("Search Engines")%></h3> <h3 class="tabletitle"><%=intl._t("Search Engines")%></h3>
<form action="" method="POST"> <form action="" method="POST">
<input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="nonce" value="<%=pageNonce%>" >
<input type="hidden" name="group" value="3"> <input type="hidden" name="group" value="3">
<jsp:getProperty name="homehelper" property="configSearch" /> <jsp:getProperty name="homehelper" property="configSearch" />
<div class="formaction"> <div class="formaction" id="homesearch">
<input type="submit" name="action" class="default" value="<%=intl._t("Add item")%>" > <input type="submit" name="action" class="default" value="<%=intl._t("Add item")%>" >
<input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" > <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" > <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
@ -55,12 +55,12 @@ input.default {
} // shouldShowSearch() } // shouldShowSearch()
%> %>
<h3><%=intl._t("Hidden Services of Interest")%></h3> <h3 class="tabletitle"><%=intl._t("Hidden Services of Interest")%></h3>
<form action="" method="POST"> <form action="" method="POST">
<input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="nonce" value="<%=pageNonce%>" >
<input type="hidden" name="group" value="1"> <input type="hidden" name="group" value="1">
<jsp:getProperty name="homehelper" property="configFavorites" /> <jsp:getProperty name="homehelper" property="configFavorites" />
<div class="formaction"> <div class="formaction" id="homesites">
<input type="submit" name="action" class="default" value="<%=intl._t("Add item")%>" > <input type="submit" name="action" class="default" value="<%=intl._t("Add item")%>" >
<input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" > <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" > <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
@ -69,12 +69,12 @@ input.default {
</div> </div>
</form> </form>
<h3><%=intl._t("Applications and Configuration")%></h3> <h3 class="tabletitle"><%=intl._t("Applications and Configuration")%></h3>
<form action="" method="POST"> <form action="" method="POST">
<input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="nonce" value="<%=pageNonce%>" >
<input type="hidden" name="group" value="2"> <input type="hidden" name="group" value="2">
<jsp:getProperty name="homehelper" property="configServices" /> <jsp:getProperty name="homehelper" property="configServices" />
<div class="formaction"> <div class="formaction" id="homeapps">
<input type="submit" name="action" class="default" value="<%=intl._t("Add item")%>" > <input type="submit" name="action" class="default" value="<%=intl._t("Add item")%>" >
<input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" > <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" > <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >

View File

@ -127,7 +127,7 @@
<%=intl._t("UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address and forward ports.")%> <%=intl._t("UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address and forward ports.")%>
<%=intl._t("UPnP support is beta, and may not work for any number of reasons")%>: <%=intl._t("UPnP support is beta, and may not work for any number of reasons")%>:
</p> </p>
<ul> <ul id="upnphelp">
<li class="tidylist"><%=intl._t("No UPnP-compatible device present")%> <li class="tidylist"><%=intl._t("No UPnP-compatible device present")%>
<li class="tidylist"><%=intl._t("UPnP disabled on the device")%> <li class="tidylist"><%=intl._t("UPnP disabled on the device")%>
<li class="tidylist"><%=intl._t("Software firewall interference with UPnP")%> <li class="tidylist"><%=intl._t("Software firewall interference with UPnP")%>
@ -148,7 +148,7 @@
<%=intl._t("If you think you have opened up your firewall and I2P still thinks you are firewalled, remember that you may have multiple firewalls, for example both software packages and external hardware routers.")%> <%=intl._t("If you think you have opened up your firewall and I2P still thinks you are firewalled, remember that you may have multiple firewalls, for example both software packages and external hardware routers.")%>
<%=intl._t("If there is an error, the <a href=\"logs.jsp\">logs</a> may also help diagnose the problem.")%> <%=intl._t("If there is an error, the <a href=\"logs.jsp\">logs</a> may also help diagnose the problem.")%>
</p> </p>
<ul> <ul id="reachability">
<li class="tidylist"><b><%=intl._t("OK")%></b> - <li class="tidylist"><b><%=intl._t("OK")%></b> -
<%=intl._t("Your UDP port does not appear to be firewalled.")%> <%=intl._t("Your UDP port does not appear to be firewalled.")%>
<li class="tidylist"><b><%=intl._t("Firewalled")%></b> - <li class="tidylist"><b><%=intl._t("Firewalled")%></b> -

View File

@ -78,7 +78,7 @@
<b><%=intl._t("Use non-SSL only")%></b></td></tr> <b><%=intl._t("Use non-SSL only")%></b></td></tr>
<tr><td class="mediumtags" align="right"><b><%=intl._t("Reseed URLs")%>:</b></td> <tr><td class="mediumtags" align="right"><b><%=intl._t("Reseed URLs")%>:</b></td>
<td><textarea wrap="off" name="reseedURL" cols="60" rows="7" spellcheck="false"><jsp:getProperty name="reseedHelper" property="reseedURL" /></textarea> <td><textarea wrap="off" name="reseedURL" cols="60" rows="7" spellcheck="false"><jsp:getProperty name="reseedHelper" property="reseedURL" /></textarea>
<div class="formaction"><input type="submit" name="action" class="reload" value="<%=intl._t("Reset URL list")%>" /></div> <div class="formaction" id="resetreseed"><input type="submit" name="action" class="reload" value="<%=intl._t("Reset URL list")%>" /></div>
</td></tr> </td></tr>
<tr><td class="mediumtags" align="right"><b><%=intl._t("Enable HTTP Proxy?")%></b></td> <tr><td class="mediumtags" align="right"><b><%=intl._t("Enable HTTP Proxy?")%></b></td>

View File

@ -16,13 +16,13 @@
<jsp:useBean class="net.i2p.router.web.ConfigServiceHandler" id="formhandler" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigServiceHandler" id="formhandler" scope="request" />
<%@include file="formhandler.jsi" %> <%@include file="formhandler.jsi" %>
<div class="configure">
<form action="" method="POST"> <form action="" method="POST">
<input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="nonce" value="<%=pageNonce%>" >
<h3><%=intl._t("Shutdown the router")%></h3> <h3 class="ptitle" id="shutdownrouter"><%=intl._t("Shutdown the router")%></h3>
<p><%=intl._t("Graceful shutdown lets the router satisfy the agreements it has already made before shutting down, but may take a few minutes.")%> <p class="infohelp">
<%=intl._t("Graceful shutdown lets the router satisfy the agreements it has already made before shutting down, but may take a few minutes.")%>
<%=intl._t("If you need to kill the router immediately, that option is available as well.")%></p> <%=intl._t("If you need to kill the router immediately, that option is available as well.")%></p>
<hr><div class="formaction"> <hr><div class="formaction" id="shutdown">
<input type="submit" class="stop" name="action" value="<%=intl._t("Shutdown gracefully")%>" > <input type="submit" class="stop" name="action" value="<%=intl._t("Shutdown gracefully")%>" >
<input type="submit" class="stop" name="action" value="<%=intl._t("Shutdown immediately")%>" > <input type="submit" class="stop" name="action" value="<%=intl._t("Shutdown immediately")%>" >
<% if (formhandler.shouldShowCancelGraceful()) { %> <% if (formhandler.shouldShowCancelGraceful()) { %>
@ -30,52 +30,60 @@
<% } %> <% } %>
</div> </div>
<% if (System.getProperty("wrapper.version") != null) { %> <% if (System.getProperty("wrapper.version") != null) { %>
<p><%=intl._t("If you want the router to restart itself after shutting down, you can choose one of the following.")%> <h3 class="ptitle" id="restartrouter"><%=intl._t("Restart the router")%></h3>
<p class="infohelp">
<%=intl._t("If you want the router to restart itself after shutting down, you can choose one of the following.")%>
<%=intl._t("This is useful in some situations - for example, if you changed some settings that client applications only read at startup, such as the routerconsole password or the interface it listens on.")%> <%=intl._t("This is useful in some situations - for example, if you changed some settings that client applications only read at startup, such as the routerconsole password or the interface it listens on.")%>
<%=intl._t("A graceful restart will take a few minutes (but your peers will appreciate your patience), while a hard restart does so immediately.")%> <%=intl._t("A graceful restart will take a few minutes (but your peers will appreciate your patience), while a hard restart does so immediately.")%>
<%=intl._t("After tearing down the router, it will wait 1 minute before starting back up again.")%></p> <%=intl._t("After tearing down the router, it will wait 1 minute before starting back up again.")%></p>
<hr><div class="formaction"> <hr><div class="formaction" id="restart">
<input type="submit" class="reload" name="action" value="<%=intl._t("Graceful restart")%>" > <input type="submit" class="reload" name="action" value="<%=intl._t("Graceful restart")%>" >
<input type="submit" class="reload" name="action" value="<%=intl._t("Hard restart")%>" > <input type="submit" class="reload" name="action" value="<%=intl._t("Hard restart")%>" >
<% } %></div> <% } %></div>
<% if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %> <% if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %>
<h3><%=intl._t("Systray integration")%></h3> <h3 class="ptitle" id="systray"><%=intl._t("Systray integration")%></h3>
<p><%=intl._t("On the windows platform, there is a small application to sit in the system tray, allowing you to view the router's status")%> <p class="infohelp">
<%=intl._t("On the windows platform, there is a small application to sit in the system tray, allowing you to view the router's status")%>
<%=intl._t("(later on, I2P client applications will be able to integrate their own functionality into the system tray as well).")%> <%=intl._t("(later on, I2P client applications will be able to integrate their own functionality into the system tray as well).")%>
<%=intl._t("If you are on windows, you can either enable or disable that icon here.")%></p> <%=intl._t("If you are on windows, you can either enable or disable that icon here.")%></p>
<hr><div class="formaction"> <hr><div class="formaction" id="systray">
<input type="submit" name="action" value="<%=intl._t("Show systray icon")%>" > <input type="submit" name="action" value="<%=intl._t("Show systray icon")%>" >
<input type="submit" name="action" value="<%=intl._t("Hide systray icon")%>" > <input type="submit" name="action" value="<%=intl._t("Hide systray icon")%>" >
</div> </div>
<h3><%=intl._t("Run on startup")%></h3> <h3 class="ptitle" id="runonstartup"><%=intl._t("Run on startup")%></h3>
<p><%=intl._t("You can control whether I2P is run on startup or not by selecting one of the following options - I2P will install (or remove) a service accordingly.")%> <p class="infohelp">
<%=intl._t("You can control whether I2P is run on startup or not by selecting one of the following options - I2P will install (or remove) a service accordingly.")%>
<%=intl._t("If you prefer the command line, you can also run the ")%> <code>install_i2p_service_winnt.bat</code> (<%=intl._t("or")%> <%=intl._t("If you prefer the command line, you can also run the ")%> <code>install_i2p_service_winnt.bat</code> (<%=intl._t("or")%>
<code>uninstall_i2p_service_winnt.bat</code>).</p> <code>uninstall_i2p_service_winnt.bat</code>).</p>
<hr><div class="formaction"> <hr><div class="formaction" id="runonstart">
<input type="submit" name="action" value="<%=intl._t("Run I2P on startup")%>" > <input type="submit" name="action" value="<%=intl._t("Run I2P on startup")%>" >
<input type="submit" name="action" value="<%=intl._t("Don't run I2P on startup")%>" ></div> <input type="submit" name="action" value="<%=intl._t("Don't run I2P on startup")%>" ></div>
<p><b><%=intl._t("Note")%>:</b> <%=intl._t("If you are running I2P as service right now, removing it will shut down your router immediately.")%> <p class="infohelp" id="winfoservice"><b>
<%=intl._t("Note")%>:</b> <%=intl._t("If you are running I2P as service right now, removing it will shut down your router immediately.")%>
<%=intl._t("You may want to consider shutting down gracefully, as above, then running uninstall_i2p_service_winnt.bat.")%></p> <%=intl._t("You may want to consider shutting down gracefully, as above, then running uninstall_i2p_service_winnt.bat.")%></p>
<% } %> <% } %>
<h3><%=intl._t("Debugging")%></h3> <h3 class="ptitle" id="servicedebug"><%=intl._t("Debugging")%></h3>
<p><a href="/jobs"><%=intl._t("View the job queue")%></a>
<% if (System.getProperty("wrapper.version") != null) { %> <% if (System.getProperty("wrapper.version") != null) { %>
<p><%=intl._t("At times, it may be helpful to debug I2P by getting a thread dump. To do so, please select the following option and review the thread dumped to <a href=\"logs.jsp#servicelogs\">wrapper.log</a>.")%></p> <p class="infohelp">
<%=intl._t("At times, it may be helpful to debug I2P by getting a thread dump. To do so, please select the following option and review the thread dumped to <a href=\"logs.jsp#servicelogs\">wrapper.log</a>.")%></p>
<p><a href="/jobs">
<%=intl._t("View the job queue")%></a>
<hr> <hr>
<% } %> <% } %>
<div class="formaction"> <div class="formaction" id="dumpthreads">
<input type="submit" class="reload" name="action" value="<%=intl._t("Force GC")%>" > <input type="submit" class="reload" name="action" value="<%=intl._t("Force GC")%>" >
<% if (System.getProperty("wrapper.version") != null) { %> <% if (System.getProperty("wrapper.version") != null) { %>
<input type="submit" class="download" name="action" value="<%=intl._t("Dump threads")%>" > <input type="submit" class="download" name="action" value="<%=intl._t("Dump threads")%>" >
<% } %> <% } %>
</div> </div>
<h3><%=intl._t("Launch browser on router startup?")%></h3> <h3 class="ptitle" id="browseronstart"><%=intl._t("Launch browser on router startup?")%></h3>
<p><%=intl._t("I2P's main configuration interface is this web console, so for your convenience I2P can launch a web browser on startup pointing at")%> <p class="infohelp">
<%=intl._t("I2P's main configuration interface is this web console, so for your convenience I2P can launch a web browser on startup pointing at")%>
<a href="http://127.0.0.1:7657/">http://127.0.0.1:7657/</a> .</p> <a href="http://127.0.0.1:7657/">http://127.0.0.1:7657/</a> .</p>
<hr><div class="formaction"> <hr><div class="formaction" id="browserstart">
<input type="submit" class="check" name="action" value="<%=intl._t("View console on startup")%>" > <input type="submit" class="check" name="action" value="<%=intl._t("View console on startup")%>" >
<input type="submit" class="delete" name="action" value="<%=intl._t("Do not view console on startup")%>" > <input type="submit" class="delete" name="action" value="<%=intl._t("Do not view console on startup")%>" >
</div></form></div></div></body></html> </div></form></div></body></html>

View File

@ -38,12 +38,12 @@ input.default {
<input type="submit" name="action" class="accept" value="<%=intl._t("Save")%>" > <input type="submit" name="action" class="accept" value="<%=intl._t("Save")%>" >
</form> </form>
<h3><%=intl._t("Customize Summary Bar")%></h3> <h3 class="tabletitle"><%=intl._t("Customize Summary Bar")%></h3>
<form action="" method="POST"> <form action="" method="POST">
<input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="nonce" value="<%=pageNonce%>" >
<input type="hidden" name="group" value="2"> <input type="hidden" name="group" value="2">
<jsp:getProperty name="summaryhelper" property="configTable" /> <jsp:getProperty name="summaryhelper" property="configTable" />
<div class="formaction"> <div class="formaction" id="sidebardefaults">
<input type="submit" class="reload" name="action" value="<%=intl._t("Restore full default")%>" > <input type="submit" class="reload" name="action" value="<%=intl._t("Restore full default")%>" >
<input type="submit" class="reload" name="action" value="<%=intl._t("Restore minimal default")%>" > <input type="submit" class="reload" name="action" value="<%=intl._t("Restore minimal default")%>" >
</div> </div>

View File

@ -73,8 +73,8 @@ function toggleAll(category)
<form id="statsForm" name="statsForm" action="" method="POST"> <form id="statsForm" name="statsForm" action="" method="POST">
<input type="hidden" name="action" value="foo" > <input type="hidden" name="action" value="foo" >
<input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="nonce" value="<%=pageNonce%>" >
<h3><%=intl._t("Configure I2P Stat Collection")%></h3> <h3 class="ptitle"><%=intl._t("Configure I2P Stat Collection")%></h3>
<p><%=intl._t("Enable full stats?")%> <p id="enablefullstats"><b><%=intl._t("Enable full stats?")%></b>
<input type="checkbox" class="optbox" name="isFull" value="true" <% <input type="checkbox" class="optbox" name="isFull" value="true" <%
if (statshelper.getIsFull()) { %>checked="checked" <% } %> > if (statshelper.getIsFull()) { %>checked="checked" <% } %> >
(<%=intl._t("change requires restart to take effect")%>)<br> (<%=intl._t("change requires restart to take effect")%>)<br>
@ -90,16 +90,16 @@ Warning - Log with care, stat file grows without limit.<br>
} // shouldShowLog } // shouldShowLog
%><%=intl._t("Filter")%>: (<a href="javascript:void(null);" onclick="toggleAll('*')"><%=intl._t("toggle all")%></a>)<br></p> %><b><%=intl._t("Filter")%>:</b> (<a href="javascript:void(null);" onclick="toggleAll('*')"><%=intl._t("toggle all")%></a>)<br></p>
<div class="wideload"> <div class="wideload">
<table> <table id="configstats">
<% while (statshelper.hasMoreStats()) { <% while (statshelper.hasMoreStats()) {
while (statshelper.groupRequired()) { %> while (statshelper.groupRequired()) { %>
<tr class="tablefooter"> <tr>
<td align="left" colspan="3" id=<%=statshelper.getCurrentGroupName()%>> <th align="left" colspan="3" id=<%=statshelper.getCurrentGroupName()%>>
<b><%=intl._t(statshelper.getCurrentGroupName())%></b> <b><%=intl._t(statshelper.getCurrentGroupName())%></b>
(<a href="javascript:void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')"><%=intl._t("toggle all")%></a>) (<a href="javascript:void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')"><%=intl._t("toggle all")%></a>)
</td></tr> </th></tr>
<tr class="tablefooter"> <tr class="tablefooter">
<% <%
@ -131,7 +131,7 @@ Warning - Log with care, stat file grows without limit.<br>
<% if (statshelper.getCurrentCanBeGraphed()) { %> <% if (statshelper.getCurrentCanBeGraphed()) { %>
<input type="checkbox" class="optbox <%=statshelper.getCurrentGroupName()%>" name="graphList" value="<%=statshelper.getCurrentGraphName()%>" <% <input type="checkbox" class="optbox <%=statshelper.getCurrentGroupName()%>" name="graphList" value="<%=statshelper.getCurrentGraphName()%>" <%
if (statshelper.getCurrentIsGraphed()) { %>checked="checked" <% } %> ><% } %></td> if (statshelper.getCurrentIsGraphed()) { %>checked="checked" <% } %> ><% } %></td>
<td align="left"><b><%=statshelper.getCurrentStatName()%>:</b><br> <td align="left"><b><%=statshelper.getCurrentStatName()%>:</b>&nbsp;
<%=statshelper.getCurrentStatDescription()%></td></tr><% <%=statshelper.getCurrentStatDescription()%></td></tr><%
} // end iterating over all stats } // end iterating over all stats
@ -145,7 +145,7 @@ Warning - Log with care, stat file grows without limit.<br>
} // shouldShowLog } // shouldShowLog
%> <tr class="tablefooter"><td colspan="3" align="right"> %> <tr class="tablefooter"><td colspan="3" align="right" class="optionsave">
<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" > <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
<input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Save changes")%>" > <input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Save changes")%>" >
</td></tr> </td></tr>

View File

@ -29,8 +29,9 @@ input.default {
<jsp:useBean class="net.i2p.router.web.ConfigUIHandler" id="formhandler" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigUIHandler" id="formhandler" scope="request" />
<%@include file="formhandler.jsi" %> <%@include file="formhandler.jsi" %>
<div class="configure"><div class="topshimten"><h3><%=uihelper._t("Router Console Theme")%></h3></div> <h3 id="themeheading"><%=uihelper._t("Router Console Theme")%></h3>
<form action="" method="POST"> <form action="" method="POST">
<div id ="themesettings">
<input type="hidden" name="consoleNonce" value="<%=net.i2p.router.web.CSSHelper.getNonce()%>" > <input type="hidden" name="consoleNonce" value="<%=net.i2p.router.web.CSSHelper.getNonce()%>" >
<input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="nonce" value="<%=pageNonce%>" >
<input type="hidden" name="action" value="blah" > <input type="hidden" name="action" value="blah" >
@ -45,23 +46,25 @@ input.default {
<%=uihelper._t("If you're not using IE, it's likely that your browser is pretending to be IE; please configure your browser (or proxy) to use a different User Agent string if you'd like to access the console themes.")%> <%=uihelper._t("If you're not using IE, it's likely that your browser is pretending to be IE; please configure your browser (or proxy) to use a different User Agent string if you'd like to access the console themes.")%>
<% } %> <% } %>
<jsp:getProperty name="uihelper" property="forceMobileConsole" /> <jsp:getProperty name="uihelper" property="forceMobileConsole" />
<h3><%=uihelper._t("Router Console Language")%></h3> </div>
<h3 id="langheading"><%=uihelper._t("Router Console Language")%></h3>
<div id="langsettings">
<jsp:getProperty name="uihelper" property="langSettings" /> <jsp:getProperty name="uihelper" property="langSettings" />
<p><%=uihelper._t("Please contribute to the router console translation project! Contact the developers in #i2p-dev on IRC to help.")%> <p id="helptranslate"><%=uihelper._t("Please contribute to the router console translation project! Contact the developers in #i2p-dev on IRC to help.")%>
</p><hr><div class="formaction"> </p><hr><div class="formaction" id="langui">
<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" > <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
<input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Apply")%>" > <input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Apply")%>" >
</div></form> </div></div></form>
<h3><%=uihelper._t("Router Console Password")%></h3> <h3 id="passwordheading"><%=uihelper._t("Router Console Password")%></h3>
<form action="" method="POST"> <form action="" method="POST">
<input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="nonce" value="<%=pageNonce%>" >
<jsp:getProperty name="uihelper" property="passwordForm" /> <jsp:getProperty name="uihelper" property="passwordForm" />
<div class="formaction"> <div class="formaction" id="consolepass">
<input type="submit" name="action" class="default" value="<%=intl._t("Add user")%>" > <input type="submit" name="action" class="default" value="<%=intl._t("Add user")%>" >
<input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" > <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" > <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
<input type="submit" name="action" class="add" value="<%=intl._t("Add user")%>" > <input type="submit" name="action" class="add" value="<%=intl._t("Add user")%>" >
</div> </div>
</form></div> </form>
</div></body></html> </div></body></html>

View File

@ -21,25 +21,22 @@
<jsp:setProperty name="updatehelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <jsp:setProperty name="updatehelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<div class="messages"> <div class="messages">
<jsp:getProperty name="updatehelper" property="newsStatus" /></div> <jsp:getProperty name="updatehelper" property="newsStatus" /></div>
<div class="configure">
<form action="" method="POST"> <form action="" method="POST">
<input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="nonce" value="<%=pageNonce%>" >
<% /* set hidden default */ %> <% /* set hidden default */ %>
<input type="submit" name="action" value="" style="display:none" > <input type="submit" name="action" value="" style="display:none" >
<% if (updatehelper.canInstall()) { %> <% if (updatehelper.canInstall()) { %>
<h3><%=intl._t("Check for I2P and news updates")%></h3> <h3 class="tabletitle"><%=intl._t("Check for I2P and news updates")%></h3>
<div class="wideload"><table border="0" cellspacing="5"> <table id="i2pupdates" class="configtable" border="0" cellspacing="5">
<tr><td colspan="2"></tr>
<tr><td class="mediumtags" align="right"><b><%=intl._t("News &amp; I2P Updates")%>:</b></td> <tr><td class="mediumtags" align="right"><b><%=intl._t("News &amp; I2P Updates")%>:</b></td>
<% } else { %> <% } else { %>
<h3><%=intl._t("Check for news updates")%></h3> <h3><%=intl._t("Check for news updates")%></h3>
<div class="wideload"><table border="0" cellspacing="5"> <table id="i2pupdates" class="configtable" border="0" cellspacing="5">
<tr><td colspan="2"></tr> <tr><td colspan="2"></tr>
<tr><td class="mediumtags" align="right"><b><%=intl._t("News Updates")%>:</b></td> <tr><td class="mediumtags" align="right"><b><%=intl._t("News Updates")%>:</b></td>
<% } // if canInstall %> <% } // if canInstall %>
<td> <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> <i><%=intl._t("Update In Progress")%></i><br> <% } else { %> <input type="submit" name="action" class="check" value="<%=intl._t("Check for updates")%>" /> <td> <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> <i><%=intl._t("Update In Progress")%></i><br> <% } else { %> <input type="submit" name="action" class="check" value="<%=intl._t("Check for updates")%>" />
<% } %></td></tr> <% } %></td></tr>
<tr><td colspan="2"><br></td></tr>
<tr><td class="mediumtags" align="right"><b><%=intl._t("News URL")%>:</b></td> <tr><td class="mediumtags" align="right"><b><%=intl._t("News URL")%>:</b></td>
<td><input type="text" size="60" name="newsURL" <% if (!updatehelper.isAdvanced()) { %>readonly="readonly"<% } %> value="<jsp:getProperty name="updatehelper" property="newsURL" />"></td> <td><input type="text" size="60" name="newsURL" <% if (!updatehelper.isAdvanced()) { %>readonly="readonly"<% } %> value="<jsp:getProperty name="updatehelper" property="newsURL" />"></td>
</tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Refresh frequency")%>:</b> </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Refresh frequency")%>:</b>
@ -76,8 +73,7 @@
<% } else { %> <% } else { %>
<tr><td class="mediumtags" align="center" colspan="2"><b><%=intl._t("Updates will be dispatched via your package manager.")%></b></td></tr> <tr><td class="mediumtags" align="center" colspan="2"><b><%=intl._t("Updates will be dispatched via your package manager.")%></b></td></tr>
<% } // if canInstall %> <% } // if canInstall %>
<tr class="tablefooter"><td colspan="2"> <tr class="tablefooter"><td colspan="2" class="optionsave">
<div class="formaction">
<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" > <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
<input type="submit" name="action" class="accept" value="<%=intl._t("Save")%>" > <input type="submit" name="action" class="accept" value="<%=intl._t("Save")%>" >
</div></td></tr></table></div></form></div></div></body></html> </td></tr></table></form></div></body></html>

View File

@ -31,7 +31,7 @@
<%@include file="summary.jsi" %> <%@include file="summary.jsi" %>
<h1><%=intl._t("I2P Addressbook")%> <span class="newtab"><a href="/susidns/index" target="_blank" title="<%=intl._t("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1> <h1><%=intl._t("I2P Addressbook")%> <span class="newtab"><a href="/susidns/index" target="_blank" title="<%=intl._t("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1>
<div class="main" id="main"> <div class="main" id="dns">
<iframe src="/susidns/index" width="100%" height="100%" frameborder="0" border="0" name="susidnsframe" id="susidnsframe" onload="setupFrame()" allowtransparency="true"> <iframe src="/susidns/index" width="100%" height="100%" frameborder="0" border="0" name="susidnsframe" id="susidnsframe" onload="setupFrame()" allowtransparency="true">
<%=intl._t("Your browser does not support iFrames.")%> <%=intl._t("Your browser does not support iFrames.")%>
&nbsp;<a href="/susidns/index"><%=intl._t("Click here to continue.")%></a> &nbsp;<a href="/susidns/index"><%=intl._t("Click here to continue.")%></a>

View File

@ -19,7 +19,7 @@
</head><body onload="initAjax()"> </head><body onload="initAjax()">
<%@include file="summary.jsi" %> <%@include file="summary.jsi" %>
<h1><%=intl._t("I2P Event Log")%></h1> <h1><%=intl._t("I2P Event Log")%></h1>
<div class="main" id="main"> <div class="main" id="events">
<div class="eventspanel"> <div class="eventspanel">
<div class="widepanel"> <div class="widepanel">
<jsp:getProperty name="eventHelper" property="allMessages" /> <jsp:getProperty name="eventHelper" property="allMessages" />

View File

@ -24,10 +24,11 @@
</head><body onload="initAjax()"> </head><body onload="initAjax()">
<%@include file="summary.jsi" %> <%@include file="summary.jsi" %>
<h1><%=intl._t("I2P Performance Graphs")%></h1> <h1><%=intl._t("I2P Performance Graphs")%></h1>
<div class="main" id="main"> <div class="main" id="graphs">
<div class="graphspanel">
<div class="widepanel"> <div class="widepanel">
<jsp:getProperty name="graphHelper" property="allMessages" /> <jsp:getProperty name="graphHelper" property="allMessages" />
<div class="graphspanel">
<jsp:getProperty name="graphHelper" property="images" /> <jsp:getProperty name="graphHelper" property="images" />
</div>
<jsp:getProperty name="graphHelper" property="form" /> <jsp:getProperty name="graphHelper" property="form" />
</div></div></div></body></html> </div></div></body></html>

View File

@ -14,7 +14,7 @@
</head><body onload="initAjax()"> </head><body onload="initAjax()">
<%@include file="summary.jsi" %> <%@include file="summary.jsi" %>
<h1>I2P Router Help &amp; Support</h1> <h1>I2P Router Help &amp; Support</h1>
<div class="main" id="main"><p> <div class="main" id="help"><p>
<%@include file="help.jsi" %> <%@include file="help.jsi" %>
<%@include file="help-legal.jsi" %> <%@include file="help-legal.jsi" %>

View File

@ -14,7 +14,7 @@
</head><body onload="initAjax()"> </head><body onload="initAjax()">
<%@include file="summary.jsi" %> <%@include file="summary.jsi" %>
<h1>I2P مساعدة لوحة التحكم</h1> <h1>I2P مساعدة لوحة التحكم</h1>
<div class="main" id="main" dir="rtl" lang="ar"><p> <div class="main" id="help" dir="rtl" lang="ar"><p>
اذا رغبت في المساعدة أو ترجمة الوثائق، أو المساعدة في أشياء أخرى، انظر اسفله اذا رغبت في المساعدة أو ترجمة الوثائق، أو المساعدة في أشياء أخرى، انظر اسفله
<a href="http://i2p-projekt.i2p/ar/get-involved">تطوع</a> <a href="http://i2p-projekt.i2p/ar/get-involved">تطوع</a>

View File

@ -15,7 +15,7 @@
<%@include file="summary.jsi" %> <%@include file="summary.jsi" %>
<!-- Traduction de mars 2011 (magma@mail.i2p) --> <!-- Traduction de mars 2011 (magma@mail.i2p) -->
<h1>Aide et assistance du routeur I2P</h1> <h1>Aide et assistance du routeur I2P</h1>
<div class="main" id="main"><p> <div class="main" id="help"><p>
Si vous souhaitez améliorer ou traduire la documentation ou d'autres versants du projet, merci de vous reporter à Si vous souhaitez améliorer ou traduire la documentation ou d'autres versants du projet, merci de vous reporter à
la page consacrée aux <a href="http://i2p-projekt.i2p/fr/get-involved">volontaires</a>. la page consacrée aux <a href="http://i2p-projekt.i2p/fr/get-involved">volontaires</a>.
</p>D'autres détails sont disponibles ici: </p>D'autres détails sont disponibles ici:

View File

@ -14,7 +14,7 @@
</head><body onload="initAjax()"> </head><body onload="initAjax()">
<%@include file="summary.jsi" %> <%@include file="summary.jsi" %>
<h1>I2P Router Help &amp; Support</h1> <h1>I2P Router Help &amp; Support</h1>
<div class="main" id="main"><p> <div class="main" id="help"><p>
Als je wilt helpen om de documentatie te verbeteren of vertalen, of wilt helpen Als je wilt helpen om de documentatie te verbeteren of vertalen, of wilt helpen
met andere aspecten van het project, zie dan de documentatie voor met andere aspecten van het project, zie dan de documentatie voor
<a href="http://i2p-projekt.i2p/nl/get-involved">vrijwilligers.</a> <a href="http://i2p-projekt.i2p/nl/get-involved">vrijwilligers.</a>

View File

@ -16,7 +16,7 @@
<h1>Справка маршрутизатора I2P</h1> <h1>Справка маршрутизатора I2P</h1>
<div class="main" id="main"> <div class="main" id="help">
<p> Если Вы хотите помочь в улучшении или переводе документации, если у Вас есть идеи, как еще помочь проекту, пожалуйста, загляните в раздел документации <p> Если Вы хотите помочь в улучшении или переводе документации, если у Вас есть идеи, как еще помочь проекту, пожалуйста, загляните в раздел документации
<a href="http://i2p-projekt.i2p/ru/get-involved">как стать участником</a>. </p> <a href="http://i2p-projekt.i2p/ru/get-involved">как стать участником</a>. </p>

View File

@ -53,7 +53,7 @@
<%@include file="summary.jsi" %> <%@include file="summary.jsi" %>
<h1><%=intl._t("Hidden Services Manager")%> <span class="newtab"><a href="/i2ptunnel/" target="_blank" title="<%=intl._t("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1> <h1><%=intl._t("Hidden Services Manager")%> <span class="newtab"><a href="/i2ptunnel/" target="_blank" title="<%=intl._t("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1>
<div class="main" id="main"> <div class="main" id="tunnelmgr">
<iframe src="/i2ptunnel/" width="100%" height="100%" frameborder="0" border="0" name="i2ptunnelframe" id="i2ptunnelframe" onload="setupFrame()" allowtransparency="true"> <iframe src="/i2ptunnel/" width="100%" height="100%" frameborder="0" border="0" name="i2ptunnelframe" id="i2ptunnelframe" onload="setupFrame()" allowtransparency="true">
<%=intl._t("Your browser does not support iFrames.")%> <%=intl._t("Your browser does not support iFrames.")%>
&nbsp;<a href="/i2ptunnel/"><%=intl._t("Click here to continue.")%></a> &nbsp;<a href="/i2ptunnel/"><%=intl._t("Click here to continue.")%></a>

View File

@ -9,7 +9,7 @@
<%@include file="summaryajax.jsi" %> <%@include file="summaryajax.jsi" %>
</head><body onload="initAjax()"> </head><body onload="initAjax()">
<%@include file="summary.jsi" %><h1>Jar File Dump</h1> <%@include file="summary.jsi" %><h1>Jar File Dump</h1>
<div class="main" id="main"> <div class="main" id="jardump">
<jsp:useBean class="net.i2p.router.web.FileDumpHelper" id="dumpHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.FileDumpHelper" id="dumpHelper" scope="request" />
<jsp:setProperty name="dumpHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <jsp:setProperty name="dumpHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<jsp:getProperty name="dumpHelper" property="fileSummary" /> <jsp:getProperty name="dumpHelper" property="fileSummary" />

View File

@ -11,8 +11,7 @@
</head><body onload="initAjax()"> </head><body onload="initAjax()">
<%@include file="summary.jsi" %> <%@include file="summary.jsi" %>
<h1><%=intl._t("I2P Network Database")%></h1> <h1><%=intl._t("I2P Network Database")%></h1>
<div class="main" id="main"> <div class="main" id="netdb">
<div class="wideload">
<jsp:useBean class="net.i2p.router.web.NetDbHelper" id="netdbHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.NetDbHelper" id="netdbHelper" scope="request" />
<jsp:setProperty name="netdbHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <jsp:setProperty name="netdbHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<% <%
@ -26,4 +25,4 @@
<jsp:setProperty name="netdbHelper" property="version" value="<%=request.getParameter(\"v\")%>" /> <jsp:setProperty name="netdbHelper" property="version" value="<%=request.getParameter(\"v\")%>" />
<jsp:setProperty name="netdbHelper" property="country" value="<%=request.getParameter(\"c\")%>" /> <jsp:setProperty name="netdbHelper" property="country" value="<%=request.getParameter(\"c\")%>" />
<jsp:getProperty name="netdbHelper" property="netDbSummary" /> <jsp:getProperty name="netdbHelper" property="netDbSummary" />
</div></div></body></html> </div></body></html>

View File

@ -10,7 +10,7 @@
</head><body onload="initAjax()"> </head><body onload="initAjax()">
<%@include file="summary.jsi" %> <%@include file="summary.jsi" %>
<h1><%=intl._t("Latest News")%></h1> <h1><%=intl._t("Latest News")%></h1>
<div class="main" id="main"> <div class="main" id="news">
<jsp:useBean class="net.i2p.router.web.NewsFeedHelper" id="feedHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.NewsFeedHelper" id="feedHelper" scope="request" />
<jsp:setProperty name="feedHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <jsp:setProperty name="feedHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<% feedHelper.setLimit(0); %> <% feedHelper.setLimit(0); %>

View File

@ -17,6 +17,6 @@
<jsp:setProperty name="conhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <jsp:setProperty name="conhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<% conhelper.storeWriter(out); %> <% conhelper.storeWriter(out); %>
<h1>I2P Router &raquo; Old Console</h1> <h1>I2P Router &raquo; Old Console</h1>
<div class="main" id="main"> <div class="main" id="main"><p id="oldconsole">
<jsp:getProperty name="conhelper" property="console" /> <jsp:getProperty name="conhelper" property="console" />
</div></body></html> </p></div></body></html>

View File

@ -11,11 +11,11 @@
</head><body onload="initAjax()"> </head><body onload="initAjax()">
<%@include file="summary.jsi" %> <%@include file="summary.jsi" %>
<h1><%=intl._t("I2P Network Peers")%></h1> <h1><%=intl._t("I2P Network Peers")%></h1>
<div class="main" id="main"><div class="wideload"> <div class="main" id="main">
<jsp:useBean class="net.i2p.router.web.PeerHelper" id="peerHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.PeerHelper" id="peerHelper" scope="request" />
<jsp:setProperty name="peerHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <jsp:setProperty name="peerHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<% peerHelper.storeWriter(out); %> <% peerHelper.storeWriter(out); %>
<jsp:setProperty name="peerHelper" property="urlBase" value="peers.jsp" /> <jsp:setProperty name="peerHelper" property="urlBase" value="peers.jsp" />
<jsp:setProperty name="peerHelper" property="sort" value="<%=request.getParameter(\"sort\") != null ? request.getParameter(\"sort\") : \"\"%>" /> <jsp:setProperty name="peerHelper" property="sort" value="<%=request.getParameter(\"sort\") != null ? request.getParameter(\"sort\") : \"\"%>" />
<jsp:getProperty name="peerHelper" property="peerSummary" /> <jsp:getProperty name="peerHelper" property="peerSummary" />
</div></div></body></html> </div></body></html>

View File

@ -21,4 +21,4 @@
%> %>
<jsp:setProperty name="profilesHelper" property="full" value="<%=request.getParameter(\"f\")%>" /> <jsp:setProperty name="profilesHelper" property="full" value="<%=request.getParameter(\"f\")%>" />
<jsp:getProperty name="profilesHelper" property="summary" /> <jsp:getProperty name="profilesHelper" property="summary" />
<hr></div></div></body></html> </div></div></body></html>

View File

@ -9,8 +9,8 @@
<%@include file="summaryajax.jsi" %> <%@include file="summaryajax.jsi" %>
</head><body onload="initAjax()"> </head><body onload="initAjax()">
<%@include file="summary.jsi" %><h1>Proof of Ownership</h1> <%@include file="summary.jsi" %><h1>Proof of Ownership</h1>
<div class="main" id="main"> <div class="main" id="main"><p id="proof">
<jsp:useBean class="net.i2p.router.web.ProofHelper" id="proofHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ProofHelper" id="proofHelper" scope="request" />
<jsp:setProperty name="proofHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <jsp:setProperty name="proofHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<textarea cols="70" rows="15" wrap="off" readonly="readonly" spellcheck="false"><jsp:getProperty name="proofHelper" property="proof" /></textarea> <textarea cols="70" rows="15" wrap="off" readonly="readonly" spellcheck="false"><jsp:getProperty name="proofHelper" property="proof" /></textarea>
</div></body></html> </p></div></body></html>

View File

@ -15,6 +15,6 @@
<% oldhelper.storeWriter(out); %> <% oldhelper.storeWriter(out); %>
<jsp:setProperty name="oldhelper" property="full" value="<%=request.getParameter(\"f\")%>" /> <jsp:setProperty name="oldhelper" property="full" value="<%=request.getParameter(\"f\")%>" />
<h1><%=intl._t("I2P Router Statistics")%></h1> <h1><%=intl._t("I2P Router Statistics")%></h1>
<div class="main" id="main"> <div class="main" id="stats">
<jsp:getProperty name="oldhelper" property="stats" /> <jsp:getProperty name="oldhelper" property="stats" />
<hr></div></body></html> </div></body></html>

View File

@ -4,7 +4,7 @@
<li class="tidylist"><b>Network integration</b><br> The first time you start I2P it may take a few minutes to bootstrap (integrate) you into the network and find additional peers to optimize your integration, so please be patient. When I2P starts up, and during normal operation, I2P's tunnel build readiness indicator (immediately above the <i>Local Destinations</i> section in the sidepanel) may tell you that I2P is "Rejecting Tunnels"; this is normal behavior and should be of no cause for concern! Once green stars are indicated next to your <i>Local Destinations</i>, there is a wide variety of things you can do with I2P, and below we introduce you to some of them.</li></ul> <li class="tidylist"><b>Network integration</b><br> The first time you start I2P it may take a few minutes to bootstrap (integrate) you into the network and find additional peers to optimize your integration, so please be patient. When I2P starts up, and during normal operation, I2P's tunnel build readiness indicator (immediately above the <i>Local Destinations</i> section in the sidepanel) may tell you that I2P is "Rejecting Tunnels"; this is normal behavior and should be of no cause for concern! Once green stars are indicated next to your <i>Local Destinations</i>, there is a wide variety of things you can do with I2P, and below we introduce you to some of them.</li></ul>
<h3>Services on I2P</h3> <h3 class="welcome">Services on I2P</h3>
<ul class="links"> <ul class="links">
<li class="tidylist"><b>Invisible Internet &amp; Public Web Browsing</b><br>On I2P you can access hidden service websites ("eepsites") and other services (e.g. ssh over I2P, IRC, Jabber etc.) in addition to being able to host your own services. You can also access the normal web anonymously via I2P's built-in web proxy (outproxy). <a href="https://geti2p.net/en/about/browser-config" target="_blank">Configure your browser</a> to use the HTTP proxy at <code>127.0.0.1 port 4444</code>, then browse to a hidden service website or a normal, unencrypted <code>http://</code> address. If you wish to disable or change outproxy access to the normal internet, remove or modify the outproxy entry for <code>false.i2p</code> under the <i>Outproxies</i> option in the <a href="/i2ptunnel/edit?tunnel=0" target="_blank">I2P HTTP Proxy Tunnel Editor</a>. In the "Sites of Interest" section <a href="#eepsites">below</a>, we list a few of the sites hosted on I2P.</li> <li class="tidylist"><b>Invisible Internet &amp; Public Web Browsing</b><br>On I2P you can access hidden service websites ("eepsites") and other services (e.g. ssh over I2P, IRC, Jabber etc.) in addition to being able to host your own services. You can also access the normal web anonymously via I2P's built-in web proxy (outproxy). <a href="https://geti2p.net/en/about/browser-config" target="_blank">Configure your browser</a> to use the HTTP proxy at <code>127.0.0.1 port 4444</code>, then browse to a hidden service website or a normal, unencrypted <code>http://</code> address. If you wish to disable or change outproxy access to the normal internet, remove or modify the outproxy entry for <code>false.i2p</code> under the <i>Outproxies</i> option in the <a href="/i2ptunnel/edit?tunnel=0" target="_blank">I2P HTTP Proxy Tunnel Editor</a>. In the "Sites of Interest" section <a href="#eepsites">below</a>, we list a few of the sites hosted on I2P.</li>
@ -32,7 +32,7 @@
If you're a <a href="http://plugins.i2p/developers/" target="_blank">developer</a>, a complete language-agnostic framework for writing your own plugins is provided with <a href="http://i2p-projekt.i2p/plugins.html" target="_blank">documentation</a>; I2P plugins can be coded in any language.</li> If you're a <a href="http://plugins.i2p/developers/" target="_blank">developer</a>, a complete language-agnostic framework for writing your own plugins is provided with <a href="http://i2p-projekt.i2p/plugins.html" target="_blank">documentation</a>; I2P plugins can be coded in any language.</li>
</ul> </ul>
<h3>Anonymous Encrypted Web Hosting on I2P</h3> <h3 class="welcome">Anonymous Encrypted Web Hosting on I2P</h3>
<ul class="links"> <ul class="links">
<li class="tidylist"><b>Ready to Roll!</b><br>I2P comes with a built-in, ready-to-go web server for hosting your own hidden service website ("eepsite") on the I2P network: a <a href="http://jetty.mortbay.org/" target="_blank">Jetty</a> instance listening on <a href="http://127.0.0.1:7658/" target="_blank">http://127.0.0.1:7658/</a>. To host your own content, <li class="tidylist"><b>Ready to Roll!</b><br>I2P comes with a built-in, ready-to-go web server for hosting your own hidden service website ("eepsite") on the I2P network: a <a href="http://jetty.mortbay.org/" target="_blank">Jetty</a> instance listening on <a href="http://127.0.0.1:7658/" target="_blank">http://127.0.0.1:7658/</a>. To host your own content,
@ -46,7 +46,7 @@
your website, registering an .i2p domain and promoting your site to others are accessible via your own I2P webserver on <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul> your website, registering an .i2p domain and promoting your site to others are accessible via your own I2P webserver on <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul>
<a name="eepsites"></a> <a name="eepsites"></a>
<h3>I2P-Hidden Services of Interest</h3> <h3 class="welcome">I2P-Hidden Services of Interest</h3>
<ul class="links"> <ul class="links">
<li class="tidylist"><b>Invisible Internet Project (I2P) Official Website</b><br><a href="http://i2p-projekt.i2p" target="_blank">i2p-projekt.i2p</a>: Secure and <li class="tidylist"><b>Invisible Internet Project (I2P) Official Website</b><br><a href="http://i2p-projekt.i2p" target="_blank">i2p-projekt.i2p</a>: Secure and
anonymous connections to <a href="https://geti2p.net/en/" target="_blank">geti2p.net</a>. If you want to know more about how I2P works or how you can participate, this is your first port of call!</li> anonymous connections to <a href="https://geti2p.net/en/" target="_blank">geti2p.net</a>. If you want to know more about how I2P works or how you can participate, this is your first port of call!</li>

View File

@ -9,7 +9,7 @@ dessus de la section <i>Destinations locales</i> dans le panneau de contrôle),
s'affichent en face des <i>Destinations locales</i>, le monde d'I2P vous est ouvert, et ci-dessous nous vous en présentons quelques unes. s'affichent en face des <i>Destinations locales</i>, le monde d'I2P vous est ouvert, et ci-dessous nous vous en présentons quelques unes.
</li></ul> </li></ul>
<h3>Les services sur I2P</h3> <h3 class="welcome">Les services sur I2P</h3>
<ul class="links"> <ul class="links">
<li class="tidylist"><b>Internet invisible et exploration anonyme du web public</b><br>Sur I2P vous pouvez accéder <li class="tidylist"><b>Internet invisible et exploration anonyme du web public</b><br>Sur I2P vous pouvez accéder
@ -78,7 +78,7 @@ environnement d'écriture de greffons indépendant de tout langage, avec
n'importe quel langage.</li> n'importe quel langage.</li>
</ul> </ul>
<h3>Hébergement web anonyme crypté sur I2P</h3> <h3 class="welcome">Hébergement web anonyme crypté sur I2P</h3>
<ul class="links"> <ul class="links">
<li class="tidylist"><b>Prêt à servir !</b><br>I2P est fourni avec un serveur web intégré, prêt à héberger votre propre site web <li class="tidylist"><b>Prêt à servir !</b><br>I2P est fourni avec un serveur web intégré, prêt à héberger votre propre site web
@ -94,7 +94,7 @@ d'enregistrement d'un domaine .i2p, et de promotion de votre site, sont accessib
l'adresse <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul> l'adresse <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul>
<a name="eepsites"></a> <a name="eepsites"></a>
<h3>Sites I2P intéressants</h3> <h3 class="welcome">Sites I2P intéressants</h3>
<ul class="links"> <ul class="links">
<li class="tidylist"><b>Le site officiel de l'Invisible Internet Project (I2P)</b><br> <li class="tidylist"><b>Le site officiel de l'Invisible Internet Project (I2P)</b><br>
<a href="http://i2p-projekt.i2p/" target="_blank">i2p-projekt.i2p</a> et son miroir <a href="http://i2p-projekt.i2p/" target="_blank">i2p-projekt.i2p</a> et son miroir

View File

@ -4,7 +4,7 @@
<li class="tidylist"><b>Netwerk integratie</b><br> De eerste keer dat I2P start duurt het mogelijk enkele minuten om de router te integreren in het netwerk en meerdere peers te vinden om de verbinding te optimaliseren. Als I2P opstart, bij een normale werking, geeft de tunnel gereedheid indicator (direct boven het <i>Lokale bestemmingen</i> gedeelte in het zijpaneel) mogelijk de melding "Tunnels Geweigerd"; dit is normaal en is geen reden voor zorgen. Zodra de <i>Lokale bestemmingen</i> eenmaal aangegeven worden met groene sterren zijn er veel mogelijkheden voor het gebruik van I2P, hieronder worden enkele voorbeelden geïntroduceerd.</li></ul> <li class="tidylist"><b>Netwerk integratie</b><br> De eerste keer dat I2P start duurt het mogelijk enkele minuten om de router te integreren in het netwerk en meerdere peers te vinden om de verbinding te optimaliseren. Als I2P opstart, bij een normale werking, geeft de tunnel gereedheid indicator (direct boven het <i>Lokale bestemmingen</i> gedeelte in het zijpaneel) mogelijk de melding "Tunnels Geweigerd"; dit is normaal en is geen reden voor zorgen. Zodra de <i>Lokale bestemmingen</i> eenmaal aangegeven worden met groene sterren zijn er veel mogelijkheden voor het gebruik van I2P, hieronder worden enkele voorbeelden geïntroduceerd.</li></ul>
<h3>Diensten op I2P</h3> <h3 class="welcome">Diensten op I2P</h3>
<ul class="links"> <ul class="links">
<li class="tidylist"><b>Invisible Internet &amp; Public Web Browsing</b><br>Op I2P kan je toegang verkrijgen tot anonieme websites (eepsites) en andere diensten (zoals; SSH over I2P, IRC, Jabber etc.), daarnaast heb je ook de mogelijkheid om je eigen dienst aan te bieden. Je kan ook anoniem toegang krijgen tot het normale Internet via de ingebouwde web proxy (outproxy). <a href="https://geti2p.net/htproxyports.html" target="_blank">Configureer je browser</a> voor het gebruik van de HTTP proxy op <code>127.0.0.1 poort 4444</code>, waarna je naar zowel eepsites als normale, onversleutelde <code>http://</code> websites kan surfen. Als je een aanpassing wilt maken aan de outproxy of deze wilt uitschakelen kan je de 'client tunnel' voor <code>false.i2p</code> onder het <i>Outproxies</i> gedeelte in de <a href="/i2ptunnel/edit?tunnel=0" target="_blank">I2P HTTP Proxy Tunnel Editor</a>. In het "Interessante websites" gedeelte <a href="#eepsites">hier onder</a> staat een lijst met een paar van de bekende sites die op I2P gehost worden.</li> <li class="tidylist"><b>Invisible Internet &amp; Public Web Browsing</b><br>Op I2P kan je toegang verkrijgen tot anonieme websites (eepsites) en andere diensten (zoals; SSH over I2P, IRC, Jabber etc.), daarnaast heb je ook de mogelijkheid om je eigen dienst aan te bieden. Je kan ook anoniem toegang krijgen tot het normale Internet via de ingebouwde web proxy (outproxy). <a href="https://geti2p.net/htproxyports.html" target="_blank">Configureer je browser</a> voor het gebruik van de HTTP proxy op <code>127.0.0.1 poort 4444</code>, waarna je naar zowel eepsites als normale, onversleutelde <code>http://</code> websites kan surfen. Als je een aanpassing wilt maken aan de outproxy of deze wilt uitschakelen kan je de 'client tunnel' voor <code>false.i2p</code> onder het <i>Outproxies</i> gedeelte in de <a href="/i2ptunnel/edit?tunnel=0" target="_blank">I2P HTTP Proxy Tunnel Editor</a>. In het "Interessante websites" gedeelte <a href="#eepsites">hier onder</a> staat een lijst met een paar van de bekende sites die op I2P gehost worden.</li>
@ -23,7 +23,7 @@ en maak verbinding met de <a href="irc://127.0.0.1:6668/i2p">server</a> op <code
<li class="tidylist"><a name="plugins"></a><b>Plugins voor I2P</b><br>Breid de gebruiks mogelijkheden van I2P uit door het installeren van plugins &hellip; blogging, chatting, file sharing en andere plugins zijn al geschreven of geport en wachten op <a href="http://plugins.i2p/plugins/" target="_blank">installatie</a>! Surf naar de plugins en gerelateerde info op <a href="http://plugins.i2p/" target="_blank">plugins.i2p</a>. Als je een <a href="http://plugins.i2p/developers/" target="_blank">ontwikkelaar</a> bent is er een compleet taal-agnostisch framework beschikbaar voor het schrijven van eigen plugins, geleverd met <a href="http://i2p-projekt.i2p/nl/docs/plugins" target="_blank">documentatie</a>; I2P plugins kunnen geprogrammeerd worden in elke taal.</li> <li class="tidylist"><a name="plugins"></a><b>Plugins voor I2P</b><br>Breid de gebruiks mogelijkheden van I2P uit door het installeren van plugins &hellip; blogging, chatting, file sharing en andere plugins zijn al geschreven of geport en wachten op <a href="http://plugins.i2p/plugins/" target="_blank">installatie</a>! Surf naar de plugins en gerelateerde info op <a href="http://plugins.i2p/" target="_blank">plugins.i2p</a>. Als je een <a href="http://plugins.i2p/developers/" target="_blank">ontwikkelaar</a> bent is er een compleet taal-agnostisch framework beschikbaar voor het schrijven van eigen plugins, geleverd met <a href="http://i2p-projekt.i2p/nl/docs/plugins" target="_blank">documentatie</a>; I2P plugins kunnen geprogrammeerd worden in elke taal.</li>
</ul> </ul>
<h3>Anoniem en versleutelde Web Hosting op I2P</h3> <h3 class="welcome">Anoniem en versleutelde Web Hosting op I2P</h3>
<ul class="links"> <ul class="links">
<li class="tidylist"><b>Ready to Roll!</b><br> I2P komt met een ingebouwde, ready-to-go web server voor het hosten van je eigen anonieme website (eepsite) op het I2P netwerk: een <a href="http://jetty.mortbay.org/" target="_blank">Jetty</a> server die luistert op <a href="http://127.0.0.1:7658/" target="_blank">http://127.0.0.1:7658/</a>. Om je eigen inhoud te hosten plaats je simpelweg alle bestanden in de <code>eepsite/docroot/</code> directory (of plaats elke standaard JSP/Servlet .war bestanden onder <code>eepsite/webapps</code>, <li class="tidylist"><b>Ready to Roll!</b><br> I2P komt met een ingebouwde, ready-to-go web server voor het hosten van je eigen anonieme website (eepsite) op het I2P netwerk: een <a href="http://jetty.mortbay.org/" target="_blank">Jetty</a> server die luistert op <a href="http://127.0.0.1:7658/" target="_blank">http://127.0.0.1:7658/</a>. Om je eigen inhoud te hosten plaats je simpelweg alle bestanden in de <code>eepsite/docroot/</code> directory (of plaats elke standaard JSP/Servlet .war bestanden onder <code>eepsite/webapps</code>,
@ -34,7 +34,7 @@ en maak verbinding met de <a href="irc://127.0.0.1:6668/i2p">server</a> op <code
zal je eepsite zichtbaar zijn (maar niet vindbaar) voor anderen. Gedetaïlleerde instructies voor het starten van je eepsite, het registreren van een.i2p domein en promotie van je website aan anderen zijn toegankelijk via je eigen I2P webserver op <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul> zal je eepsite zichtbaar zijn (maar niet vindbaar) voor anderen. Gedetaïlleerde instructies voor het starten van je eepsite, het registreren van een.i2p domein en promotie van je website aan anderen zijn toegankelijk via je eigen I2P webserver op <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul>
<a name="eepsites"></a> <a name="eepsites"></a>
<h3>I2P-Hosted Sites of Interest</h3> <h3 class="welcome">I2P-Hosted Sites of Interest</h3>
<ul class="links"> <ul class="links">
<li class="tidylist"><b>Invisible Internet Project (I2P) Officiële Website</b><br><a href="http://i2p-projekt.i2p/nl/" target="_blank">i2p-projekt.i2p</a>: Veilige en <li class="tidylist"><b>Invisible Internet Project (I2P) Officiële Website</b><br><a href="http://i2p-projekt.i2p/nl/" target="_blank">i2p-projekt.i2p</a>: Veilige en
anonieme verbindingen naar <a href="https://geti2p.net/nl/" target="_blank">geti2p.net</a>. Als je meer wilt weten over hoe I2P werkt of hoe je mee kan doen is dit de website waar je terecht kan!</li> anonieme verbindingen naar <a href="https://geti2p.net/nl/" target="_blank">geti2p.net</a>. Als je meer wilt weten over hoe I2P werkt of hoe je mee kan doen is dit de website waar je terecht kan!</li>

View File

@ -3,7 +3,7 @@
<ul class="links"><li class="tidylist"><b>Начало&hellip;</b><br>Если вы только что запустили I2P, число <i>Активных пиров</i>, отображаемых под секцией <i>Пиры</i> на боковой панели должно начать увеличиваться через несколько минут, и вы так же увидите <i>Локальный туннель</i> с именем <i>Коллективные Клиенты</i>, и, возможно, другие клиентские и серверные туннели в зависимости от того, как настроен I2P (если нет, смотрите секцию по разрешению проблем <a href="#trouble">ниже</a>). Эти <i>Локальные туннели</i> предоставляют соединения на разных портах (и иногда разные протоколы) для сети I2P, позволяя функционировать вашим torrent, e-mail, прокси и другим сервисам. Ваша <a href="/netdb">База данных сети I2P</a> показывает всех известных роутеру пиров в сети. Больше информации доступно на <a href="/help">странице помощи</a>.</li> <ul class="links"><li class="tidylist"><b>Начало&hellip;</b><br>Если вы только что запустили I2P, число <i>Активных пиров</i>, отображаемых под секцией <i>Пиры</i> на боковой панели должно начать увеличиваться через несколько минут, и вы так же увидите <i>Локальный туннель</i> с именем <i>Коллективные Клиенты</i>, и, возможно, другие клиентские и серверные туннели в зависимости от того, как настроен I2P (если нет, смотрите секцию по разрешению проблем <a href="#trouble">ниже</a>). Эти <i>Локальные туннели</i> предоставляют соединения на разных портах (и иногда разные протоколы) для сети I2P, позволяя функционировать вашим torrent, e-mail, прокси и другим сервисам. Ваша <a href="/netdb">База данных сети I2P</a> показывает всех известных роутеру пиров в сети. Больше информации доступно на <a href="/help">странице помощи</a>.</li>
<li class="tidylist"><b>Сетевая интеграция</b><br> Когда вы впервые запускаете I2P, это может занять несколько минут, т.к. роутер выполняет процедуру начальной загрузки (bootstrap) для интеграции в сеть и поиска пиров для оптимизации интегрированности. Будте терпеливы. Когда I2P запускается, и во время нормальной работы, индикатор готовности к построению туннелей (прямо над секцией <i>Локальные туннели</i> на боковой панели) может показывать "Не принимаем туннели"; это нормальное поведение и не стоит слишком беспокоиться. Когда возле ваших <i>Локальных туннелей</i> загорятся зелёные звёздочки, вы сможете делать с I2P разнообразные вещи, и ниже мы представим вам некоторые из них. </li></ul> <li class="tidylist"><b>Сетевая интеграция</b><br> Когда вы впервые запускаете I2P, это может занять несколько минут, т.к. роутер выполняет процедуру начальной загрузки (bootstrap) для интеграции в сеть и поиска пиров для оптимизации интегрированности. Будте терпеливы. Когда I2P запускается, и во время нормальной работы, индикатор готовности к построению туннелей (прямо над секцией <i>Локальные туннели</i> на боковой панели) может показывать "Не принимаем туннели"; это нормальное поведение и не стоит слишком беспокоиться. Когда возле ваших <i>Локальных туннелей</i> загорятся зелёные звёздочки, вы сможете делать с I2P разнообразные вещи, и ниже мы представим вам некоторые из них. </li></ul>
<h3>Сервисы в I2P</h3> <h3 class="welcome">Сервисы в I2P</h3>
<ul class="links"> <ul class="links">
<li class="tidylist"><b>Невидимый Интернет и просмотр обычных сайтов </b><br>В I2P вы можете заходить на анонимные веб-сайты (так же известные как eepsites) и пользоваться другими сервисами (такими как ssh over I2P, IRC, Jabber и т.д.), а так же поддерживать собственные сервисы. Ещё вы можете выходить в обычный веб анонимно через имеющиеся в I2P веб-прокси (outproxy). <a href="https://geti2p.net/ru/about/browser-config" target="_blank">Настройте ваш браузер</a> на использование <a href="http://proxy.i2p" target="_blank">HTTP proxy</a> на <code>127.0.0.1 порт 4444</code>, затем откройте eepsite или обычный <code>http://</code> адрес. Если вы хотите отключить или изменить возможность доступа в обычный интернет через outproxy, удалите или измените содержимое <code>false.i2p</code> в поле опции <i>Outproxies</i> на странице <a href="/i2ptunnel/edit?tunnel=0" target="_blank">редактирования HTTP Proxy туннеля</a>. В секции Достопримечательности <a href="#eepsites">ниже</a>, мы представляем список некоторых сайтов, имеющихся в I2P.</li> <li class="tidylist"><b>Невидимый Интернет и просмотр обычных сайтов </b><br>В I2P вы можете заходить на анонимные веб-сайты (так же известные как eepsites) и пользоваться другими сервисами (такими как ssh over I2P, IRC, Jabber и т.д.), а так же поддерживать собственные сервисы. Ещё вы можете выходить в обычный веб анонимно через имеющиеся в I2P веб-прокси (outproxy). <a href="https://geti2p.net/ru/about/browser-config" target="_blank">Настройте ваш браузер</a> на использование <a href="http://proxy.i2p" target="_blank">HTTP proxy</a> на <code>127.0.0.1 порт 4444</code>, затем откройте eepsite или обычный <code>http://</code> адрес. Если вы хотите отключить или изменить возможность доступа в обычный интернет через outproxy, удалите или измените содержимое <code>false.i2p</code> в поле опции <i>Outproxies</i> на странице <a href="/i2ptunnel/edit?tunnel=0" target="_blank">редактирования HTTP Proxy туннеля</a>. В секции Достопримечательности <a href="#eepsites">ниже</a>, мы представляем список некоторых сайтов, имеющихся в I2P.</li>
@ -23,7 +23,7 @@
<li class="tidylist"><a name="plugins"></a><b>Плагины для I2P</b><br>Повысьте полезность I2P установив плагины&hellip; блоггинг, чат, обмен файлами и другие плагины уже были написаны или портированы и ждут когда вы их <a href="http://plugins.i2p/plugins/" target="_blank">установите</a>! Смотрите плагины и сопутствующую информацию на <a href="http://plugins.i2p" target="_blank">plugins.i2p</a>. Если вы <a href="http://plugins.i2p/developers/" target="_blank">программист</a>, полный языконезависимый фреймворк для написания плагинов доступен и <a href="http://i2p-projekt.i2p/ru/docs/plugins" target="_blank">документирован</a>; I2P плагины могут быть написаны на любом языке.</li> <li class="tidylist"><a name="plugins"></a><b>Плагины для I2P</b><br>Повысьте полезность I2P установив плагины&hellip; блоггинг, чат, обмен файлами и другие плагины уже были написаны или портированы и ждут когда вы их <a href="http://plugins.i2p/plugins/" target="_blank">установите</a>! Смотрите плагины и сопутствующую информацию на <a href="http://plugins.i2p" target="_blank">plugins.i2p</a>. Если вы <a href="http://plugins.i2p/developers/" target="_blank">программист</a>, полный языконезависимый фреймворк для написания плагинов доступен и <a href="http://i2p-projekt.i2p/ru/docs/plugins" target="_blank">документирован</a>; I2P плагины могут быть написаны на любом языке.</li>
</ul> </ul>
<h3>Анонимный шифрованный веб-хостинг в I2P</h3> <h3 class="welcome">Анонимный шифрованный веб-хостинг в I2P</h3>
<ul class="links"> <ul class="links">
<li class="tidylist"><b>Готовы к действию!</b><br>I2P идёт со встроенным готовым к работе веб-сервером для хостинга вашего собственного анонимного веб-сайта (eepsite) в сети I2P: <a href="http://jetty.mortbay.org/" target="_blank">Jetty</a> развёрнут и слушает на <a href="http://127.0.0.1:7658/" target="_blank">http://127.0.0.1:7658/</a>. Для размещения собственного контента, <li class="tidylist"><b>Готовы к действию!</b><br>I2P идёт со встроенным готовым к работе веб-сервером для хостинга вашего собственного анонимного веб-сайта (eepsite) в сети I2P: <a href="http://jetty.mortbay.org/" target="_blank">Jetty</a> развёрнут и слушает на <a href="http://127.0.0.1:7658/" target="_blank">http://127.0.0.1:7658/</a>. Для размещения собственного контента,
@ -37,7 +37,7 @@
I2P-сайта, регистрации .i2p домена и распространению информации о вашем сайте доступны через ваш I2P веб-сервер на странице <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul> I2P-сайта, регистрации .i2p домена и распространению информации о вашем сайте доступны через ваш I2P веб-сервер на странице <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul>
<a name="eepsites"></a> <a name="eepsites"></a>
<h3>Достопримечательности I2P</h3> <h3 class="welcome">Достопримечательности I2P</h3>
<ul class="links"> <ul class="links">
<li class="tidylist"><b>Официальный веб-сайт Invisible Internet Project (I2P)</b><br><a href="http://i2p-projekt.i2p/ru/" target="_blank">i2p-projekt.i2p</a>: безопасный и анонимный <li class="tidylist"><b>Официальный веб-сайт Invisible Internet Project (I2P)</b><br><a href="http://i2p-projekt.i2p/ru/" target="_blank">i2p-projekt.i2p</a>: безопасный и анонимный
доступ к <a href="https://geti2p.net/ru/" target="_blank">geti2p.net</a>. Так же имеется официальное зеркало на <a href="http://geti2p.net" target="_blank">geti2p.net</a>. Если вы хотите узнать больше о том, как работает I2P, или о том, как вы можете принять участие, это послужит вам точкой входа.</li> доступ к <a href="https://geti2p.net/ru/" target="_blank">geti2p.net</a>. Так же имеется официальное зеркало на <a href="http://geti2p.net" target="_blank">geti2p.net</a>. Если вы хотите узнать больше о том, как работает I2P, или о том, как вы можете принять участие, это послужит вам точкой входа.</li>

View File

@ -916,7 +916,7 @@ public class Blocklist {
Set<Integer> singles = new TreeSet<Integer>(); Set<Integer> singles = new TreeSet<Integer>();
singles.addAll(_singleIPBlocklist); singles.addAll(_singleIPBlocklist);
if (!(singles.isEmpty() && _singleIPv6Blocklist.isEmpty())) { if (!(singles.isEmpty() && _singleIPv6Blocklist.isEmpty())) {
out.write("<table><tr><th align=\"center\" colspan=\"2\"><b>"); out.write("<table id=\"banneduntilrestart\"><tr><th align=\"center\" colspan=\"2\"><b>");
out.write(_t("IPs Banned Until Restart")); out.write(_t("IPs Banned Until Restart"));
out.write("</b></td></tr>"); out.write("</b></td></tr>");
// first 0 - 127 // first 0 - 127
@ -953,7 +953,7 @@ public class Blocklist {
out.write("</table>"); out.write("</table>");
} }
if (_blocklistSize > 0) { if (_blocklistSize > 0) {
out.write("<table><tr><th align=\"center\" colspan=\"2\"><b>"); out.write("<table id=\"permabanned\"><tr><th align=\"center\" colspan=\"2\"><b>");
out.write(_t("IPs Permanently Banned")); out.write(_t("IPs Permanently Banned"));
out.write("</b></th></tr><tr><td align=\"center\" width=\"50%\"><b>"); out.write("</b></th></tr><tr><td align=\"center\" width=\"50%\"><b>");
out.write(_t("From")); out.write(_t("From"));

View File

@ -64,7 +64,7 @@ public class PersistentKeyRing extends KeyRing {
@Override @Override
public void renderStatusHTML(Writer out) throws IOException { public void renderStatusHTML(Writer out) throws IOException {
StringBuilder buf = new StringBuilder(1024); StringBuilder buf = new StringBuilder(1024);
buf.append("\n<table><tr><th align=\"left\">Destination Hash<th align=\"left\">Name or Dest.<th align=\"left\">Encryption Key</tr>"); buf.append("\n<table class=\"configtable\"><tr><th align=\"left\">Destination Hash<th align=\"left\">Name or Dest.<th align=\"left\">Encryption Key</tr>");
for (Entry<Hash, SessionKey> e : entrySet()) { for (Entry<Hash, SessionKey> e : entrySet()) {
buf.append("\n<tr><td>"); buf.append("\n<tr><td>");
Hash h = e.getKey(); Hash h = e.getKey();

View File

@ -683,7 +683,7 @@ public class TransportManager implements TransportEventListener {
*/ */
public void renderStatusHTML(Writer out, String urlBase, int sortFlags) throws IOException { public void renderStatusHTML(Writer out, String urlBase, int sortFlags) throws IOException {
if (_context.getBooleanProperty(PROP_ADVANCED)) { if (_context.getBooleanProperty(PROP_ADVANCED)) {
out.write("<p><b>"); out.write("<p id=\"upnpstatus\"><b>");
out.write(_t("Status")); out.write(_t("Status"));
out.write(": "); out.write(": ");
out.write(_t(getReachabilityStatus().toStatusString())); out.write(_t(getReachabilityStatus().toStatusString()));
@ -702,7 +702,7 @@ public class TransportManager implements TransportEventListener {
} }
StringBuilder buf = new StringBuilder(4*1024); StringBuilder buf = new StringBuilder(4*1024);
buf.append("<h3>").append(_t("Router Transport Addresses")).append("</h3><pre>\n"); buf.append("<h3 id=\"transports\">").append(_t("Router Transport Addresses")).append("</h3><pre id=\"transports\">\n");
for (Transport t : _transports.values()) { for (Transport t : _transports.values()) {
if (t.hasCurrentAddress()) { if (t.hasCurrentAddress()) {
for (RouterAddress ra : t.getCurrentAddresses()) { for (RouterAddress ra : t.getCurrentAddresses()) {
@ -721,7 +721,7 @@ public class TransportManager implements TransportEventListener {
} else if (_upnpManager != null) { } else if (_upnpManager != null) {
out.write(_upnpManager.renderStatusHTML()); out.write(_upnpManager.renderStatusHTML());
} else { } else {
out.write("<h3><a name=\"upnp\"></a>" + _t("UPnP is not enabled") + "</h3>\n"); out.write("<h3 id=\"upnpstatus\"><a name=\"upnp\"></a>" + _t("UPnP is not enabled") + "</h3>\n");
} }
out.write("</p>\n"); out.write("</p>\n");
out.flush(); out.flush();

View File

@ -1363,7 +1363,7 @@ public class NTCPTransport extends TransportImpl {
buf.append(". ").append(_t("Status")).append(": ").append(_t(getReachabilityStatus().toStatusString())); buf.append(". ").append(_t("Status")).append(": ").append(_t(getReachabilityStatus().toStatusString()));
} }
buf.append(".</h3>\n" + buf.append(".</h3>\n" +
"<table>\n" + "<table id=\"ntcpconnections\">\n" +
"<tr><th><a href=\"#def.peer\">").append(_t("Peer")).append("</a></th>" + "<tr><th><a href=\"#def.peer\">").append(_t("Peer")).append("</a></th>" +
"<th>").append(_t("Dir")).append("</th>" + "<th>").append(_t("Dir")).append("</th>" +
"<th>").append(_t("IPv6")).append("</th>" + "<th>").append(_t("IPv6")).append("</th>" +

View File

@ -2583,7 +2583,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
buf.append(". ").append(_t("Status")).append(": ").append(_t(_reachabilityStatus.toStatusString())); buf.append(". ").append(_t("Status")).append(": ").append(_t(_reachabilityStatus.toStatusString()));
} }
buf.append(".</h3>\n"); buf.append(".</h3>\n");
buf.append("<table>\n"); buf.append("<div class=\"widescroll\"><table id=\"udpconnections\">\n");
buf.append("<tr><th class=\"smallhead\" nowrap><a href=\"#def.peer\">").append(_t("Peer")).append("</a><br>"); buf.append("<tr><th class=\"smallhead\" nowrap><a href=\"#def.peer\">").append(_t("Peer")).append("</a><br>");
if (sortFlags != FLAG_ALPHA) if (sortFlags != FLAG_ALPHA)
appendSortLinks(buf, urlBase, sortFlags, _t("Sort by peer hash"), FLAG_ALPHA); appendSortLinks(buf, urlBase, sortFlags, _t("Sort by peer hash"), FLAG_ALPHA);
@ -2847,7 +2847,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
buf.append("</td></tr>"); buf.append("</td></tr>");
} }
} // numPeers > 0 } // numPeers > 0
buf.append("</table>\n"); buf.append("</table></div>\n");
/***** /*****
long bytesTransmitted = _context.bandwidthLimiter().getTotalAllocatedOutboundBytes(); long bytesTransmitted = _context.bandwidthLimiter().getTotalAllocatedOutboundBytes();