propagate from branch 'i2p.i2p.zzz.test3' (head 1f086d33dd3479afceb025d2da7956d7470fb3e5)
to branch 'i2p.i2p' (head 6959293ce260b9da4d61776717c02e20a0c7b2dd)
@@ -711,7 +711,7 @@ public class I2PSnarkServlet extends HttpServlet {
|
||||
out.write("<span class=\"snarkConfigTitle\">Configuration:</span><br />\n");
|
||||
out.write("Data directory: <input type=\"text\" size=\"40\" name=\"dataDir\" value=\"" + dataDir + "\" ");
|
||||
out.write("title=\"Directory to store torrents and data\" disabled=\"true\" /> <i>(Edit i2psnark.config and restart to change)</i><br />\n");
|
||||
out.write("Auto start: <input type=\"checkbox\" name=\"autoStart\" value=\"true\" "
|
||||
out.write("Auto start: <input type=\"checkbox\" class=\"optbox\" name=\"autoStart\" value=\"true\" "
|
||||
+ (autoStart ? "checked " : "")
|
||||
+ "title=\"If true, automatically start torrents that are added\" />");
|
||||
//Auto add: <input type="checkbox" name="autoAdd" value="true" title="If true, automatically add torrents that are found in the data directory" />
|
||||
@@ -738,7 +738,7 @@ public class I2PSnarkServlet extends HttpServlet {
|
||||
out.write("Up bandwidth limit: <input type=\"text\" name=\"upBW\" value=\""
|
||||
+ _manager.util().getMaxUpBW() + "\" size=\"3\" maxlength=\"3\" /> KBps <i>(Half <a href=\"/config.jsp\" target=\"blank\">available bandwidth</a> recommended.)</i><br />\n");
|
||||
|
||||
out.write("Use open trackers also: <input type=\"checkbox\" name=\"useOpenTrackers\" value=\"true\" "
|
||||
out.write("Use open trackers also: <input type=\"checkbox\" class=\"optbox\" name=\"useOpenTrackers\" value=\"true\" "
|
||||
+ (useOpenTrackers ? "checked " : "")
|
||||
+ "title=\"If true, uses open trackers in addition\" /> ");
|
||||
out.write("Announce URLs: <input type=\"text\" name=\"openTrackers\" value=\""
|
||||
|
@@ -55,7 +55,7 @@ public class ConfigClientsHandler extends FormHandler {
|
||||
else
|
||||
startWebApp(app);
|
||||
} else {
|
||||
addFormError("Unsupported " + _action);
|
||||
addFormError("Unsupported " + _action + ".");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,18 +70,18 @@ public class ConfigClientsHandler extends FormHandler {
|
||||
ca.disabled = val == null;
|
||||
}
|
||||
ClientAppConfig.writeClientAppConfig(_context, clients);
|
||||
addFormNotice("Client configuration saved successfully - restart required to take effect");
|
||||
addFormNotice("Client configuration saved successfully - restart required to take effect.");
|
||||
}
|
||||
|
||||
private void startClient(int i) {
|
||||
List clients = ClientAppConfig.getClientApps(_context);
|
||||
if (i >= clients.size()) {
|
||||
addFormError("Bad client index");
|
||||
addFormError("Bad client index.");
|
||||
return;
|
||||
}
|
||||
ClientAppConfig ca = (ClientAppConfig) clients.get(i);
|
||||
LoadClientAppsJob.runClient(ca.className, ca.clientName, LoadClientAppsJob.parseArgs(ca.args), _log);
|
||||
addFormNotice("Client " + ca.clientName + " started");
|
||||
addFormNotice("Client " + ca.clientName + " started.");
|
||||
}
|
||||
|
||||
private void saveWebAppChanges() {
|
||||
@@ -98,7 +98,7 @@ public class ConfigClientsHandler extends FormHandler {
|
||||
props.setProperty(name, "" + (val != null));
|
||||
}
|
||||
RouterConsoleRunner.storeWebAppProperties(props);
|
||||
addFormNotice("WebApp configuration saved successfully - restart required to take effect");
|
||||
addFormNotice("WebApp configuration saved successfully - restart required to take effect.");
|
||||
}
|
||||
|
||||
// Big hack for the moment, not using properties for directory and port
|
||||
@@ -116,14 +116,14 @@ public class ConfigClientsHandler extends FormHandler {
|
||||
path = new File(path, app + ".war");
|
||||
s.addWebApplication("/"+ app, path.getAbsolutePath()).start();
|
||||
// no passwords... initialize(wac);
|
||||
addFormNotice("WebApp <a href=\"/" + app + "/\">" + app + "</a> started");
|
||||
addFormNotice("WebApp <a href=\"/" + app + "/\">" + app + "</a> started.");
|
||||
} catch (Exception ioe) {
|
||||
addFormError("Failed to start " + app + " " + ioe);
|
||||
addFormError("Failed to start " + app + " " + ioe + ".");
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
addFormError("Failed to find server");
|
||||
addFormError("Failed to find server.");
|
||||
}
|
||||
}
|
||||
|
@@ -14,8 +14,8 @@ public class ConfigClientsHelper extends HelperBase {
|
||||
|
||||
public String getForm1() {
|
||||
StringBuilder buf = new StringBuilder(1024);
|
||||
buf.append("<table border=\"1\">\n");
|
||||
buf.append("<tr><th>Client</th><th>Run at Startup?</th><th>Start Now</th><th>Class and arguments</th></tr>\n");
|
||||
buf.append("<table>\n");
|
||||
buf.append("<tr><th align=\"right\">Client</th><th>Run at Startup?</th><th>Start Now</th><th align=\"left\">Class and arguments</th></tr>\n");
|
||||
|
||||
List clients = ClientAppConfig.getClientApps(_context);
|
||||
for (int cur = 0; cur < clients.size(); cur++) {
|
||||
@@ -30,8 +30,8 @@ public class ConfigClientsHelper extends HelperBase {
|
||||
|
||||
public String getForm2() {
|
||||
StringBuilder buf = new StringBuilder(1024);
|
||||
buf.append("<table border=\"1\">\n");
|
||||
buf.append("<tr><th>WebApp</th><th>Run at Startup?</th><th>Start Now</th><th>Description</th></tr>\n");
|
||||
buf.append("<table>\n");
|
||||
buf.append("<tr><th align=\"right\">WebApp</th><th>Run at Startup?</th><th>Start Now</th><th align=\"left\">Description</th></tr>\n");
|
||||
Properties props = RouterConsoleRunner.webAppProperties();
|
||||
Set keys = new TreeSet(props.keySet());
|
||||
for (Iterator iter = keys.iterator(); iter.hasNext(); ) {
|
||||
@@ -47,7 +47,7 @@ public class ConfigClientsHelper extends HelperBase {
|
||||
}
|
||||
|
||||
private void renderForm(StringBuilder buf, String index, String name, boolean urlify, boolean enabled, boolean ro, String desc) {
|
||||
buf.append("<tr><td>");
|
||||
buf.append("<tr><td class=\"mediumtags\" align=\"right\" width=\"25%\">");
|
||||
if (urlify && enabled) {
|
||||
String link = "/";
|
||||
if (! RouterConsoleRunner.ROUTERCONSOLE.equals(name))
|
||||
@@ -56,16 +56,16 @@ public class ConfigClientsHelper extends HelperBase {
|
||||
} else {
|
||||
buf.append(name);
|
||||
}
|
||||
buf.append("</td><td align=\"center\"><input type=\"checkbox\" name=\"").append(index).append(".enabled\" value=\"true\" ");
|
||||
buf.append("</td><td align=\"center\" width=\"10%\"><input type=\"checkbox\" class=\"optbox\" name=\"").append(index).append(".enabled\" value=\"true\" ");
|
||||
if (enabled) {
|
||||
buf.append("checked=\"true\" ");
|
||||
if (ro)
|
||||
buf.append("disabled=\"true\" ");
|
||||
}
|
||||
buf.append("/></td><td> ");
|
||||
buf.append("/></td><td align=\"center\" width=\"15%\">");
|
||||
if (!enabled) {
|
||||
buf.append("<button type=\"submit\" name=\"action\" value=\"Start ").append(index).append("\" >Start<span class=hide> ").append(index).append("</span></button>");
|
||||
}
|
||||
buf.append(" </td><td>").append(desc).append("</td></tr>\n");
|
||||
buf.append("</td><td align=\"left\" width=\"50%\">").append(desc).append("</td></tr>\n");
|
||||
}
|
||||
}
|
||||
|
@@ -47,7 +47,7 @@ public class ConfigTunnelsHandler extends FormHandler {
|
||||
boolean saveRequired = false;
|
||||
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Saving changes, with props = " + _settings);
|
||||
_log.debug("Saving changes, with props = " + _settings + ".");
|
||||
|
||||
int updated = 0;
|
||||
int index = 0;
|
||||
@@ -67,7 +67,7 @@ public class ConfigTunnelsHandler extends FormHandler {
|
||||
try {
|
||||
client.fromBase64(poolName);
|
||||
} catch (DataFormatException dfe) {
|
||||
addFormError("Internal error (pool name could not resolve - " + poolName + ")");
|
||||
addFormError("Internal error (pool name could not resolve - " + poolName + ").");
|
||||
index++;
|
||||
continue;
|
||||
}
|
||||
@@ -76,7 +76,7 @@ public class ConfigTunnelsHandler extends FormHandler {
|
||||
}
|
||||
|
||||
if ( (in == null) || (out == null) ) {
|
||||
addFormError("Internal error (pool settings cound not be found for " + poolName + ")");
|
||||
addFormError("Internal error (pool settings cound not be found for " + poolName + ").");
|
||||
index++;
|
||||
continue;
|
||||
}
|
||||
@@ -131,14 +131,14 @@ public class ConfigTunnelsHandler extends FormHandler {
|
||||
}
|
||||
|
||||
if (updated > 0)
|
||||
addFormNotice("Updated settings for " + updated + " pools");
|
||||
addFormNotice("Updated settings for " + updated + " pools.");
|
||||
|
||||
if (saveRequired) {
|
||||
boolean saved = _context.router().saveConfig();
|
||||
if (saved)
|
||||
addFormNotice("Exploratory tunnel configuration saved successfully");
|
||||
addFormNotice("Exploratory tunnel configuration saved successfully.");
|
||||
else
|
||||
addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs");
|
||||
addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs.");
|
||||
}
|
||||
}
|
||||
private static final int getInt(Object val) {
|
||||
|
@@ -62,18 +62,18 @@ public class ConfigTunnelsHelper extends HelperBase {
|
||||
in.getLength() + in.getLengthVariance() <= 0 ||
|
||||
out.getLength() <= 0 ||
|
||||
out.getLength() + out.getLengthVariance() <= 0)
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 0-hop tunnels</font></th></tr>");
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 0-hop tunnels.</font></th></tr>");
|
||||
else if (in.getLength() <= 1 ||
|
||||
in.getLength() + in.getLengthVariance() <= 1 ||
|
||||
out.getLength() <= 1 ||
|
||||
out.getLength() + out.getLengthVariance() <= 1)
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 1-hop tunnels</font></th></tr>");
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 1-hop tunnels.</font></th></tr>");
|
||||
if (in.getLength() + Math.abs(in.getLengthVariance()) >= WARN_LENGTH ||
|
||||
out.getLength() + Math.abs(out.getLengthVariance()) >= WARN_LENGTH)
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include very long tunnels</font></th></tr>");
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include very long tunnels.</font></th></tr>");
|
||||
if (in.getQuantity() + in.getBackupQuantity() >= WARN_QUANTITY ||
|
||||
out.getQuantity() + out.getBackupQuantity() >= WARN_QUANTITY)
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include high tunnel quantities</font></th></tr>");
|
||||
buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include high tunnel quantities.</font></th></tr>");
|
||||
|
||||
buf.append("<tr><th></th><th><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound Tunnels\"/> Inbound</th><th><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound Tunnels\" title=\"Outbound\"/> Outbound</th></tr>\n");
|
||||
|
||||
|
@@ -24,8 +24,8 @@ public class ConfigUIHandler extends FormHandler {
|
||||
else
|
||||
_context.router().setConfigSetting(CSSHelper.PROP_THEME_NAME, _config);
|
||||
if (_context.router().saveConfig())
|
||||
addFormNotice("Theme change successfully saved (<a href=\"configui.jsp\">refresh page to view</a>)");
|
||||
addFormNotice("Theme change successfully saved (<a href=\"configui.jsp\">refresh page</a> to view).");
|
||||
else
|
||||
addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs");
|
||||
addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs.");
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@ public class ConfigUIHelper extends HelperBase {
|
||||
StringBuilder buf = new StringBuilder(512);
|
||||
String current = _context.getProperty(CSSHelper.PROP_THEME_NAME, CSSHelper.DEFAULT_THEME);
|
||||
for (String theme : themes) {
|
||||
buf.append("<input type=\"radio\" name=\"theme\" ");
|
||||
buf.append("<input type=\"radio\" class=\"optbox\" name=\"theme\" ");
|
||||
if (theme.equals(current))
|
||||
buf.append("checked=\"true\" ");
|
||||
buf.append("value=\"").append(theme).append("\"/>").append(theme).append("<br />\n");
|
||||
|
@@ -42,10 +42,10 @@ public class ConfigUpdateHelper extends HelperBase {
|
||||
public String getUpdateThroughProxy() {
|
||||
String proxy = _context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY);
|
||||
if (Boolean.valueOf(proxy).booleanValue())
|
||||
return "<input type=\"checkbox\" value=\"true\" name=\"updateThroughProxy\" checked=\"true\" >";
|
||||
return "<input type=\"checkbox\" class=\"optbox\" value=\"true\" name=\"updateThroughProxy\" checked=\"true\" >";
|
||||
else
|
||||
|
||||
return "<input type=\"checkbox\" value=\"true\" name=\"updateThroughProxy\" >";
|
||||
return "<input type=\"checkbox\" class=\"optbox\" value=\"true\" name=\"updateThroughProxy\" >";
|
||||
}
|
||||
|
||||
private static final long PERIODS[] = new long[] { 12*60*60*1000l, 24*60*60*1000l, 48*60*60*1000l, -1l };
|
||||
|
@@ -109,13 +109,13 @@ public class GraphHelper extends HelperBase {
|
||||
_out.write("<p />[<a href=\"configstats.jsp\">Select Stats to Graph</a>]<p />");
|
||||
_out.write("<form action=\"graphs.jsp\" method=\"GET\">");
|
||||
_out.write("Periods: <input size=\"3\" type=\"text\" name=\"periodCount\" value=\"" + _periodCount + "\" /><br />\n");
|
||||
_out.write("Plot averages: <input type=\"radio\" name=\"showEvents\" value=\"false\" " + (_showEvents ? "" : "checked=\"true\" ") + " /> ");
|
||||
_out.write("or plot events: <input type=\"radio\" name=\"showEvents\" value=\"true\" "+ (_showEvents ? "checked=\"true\" " : "") + " /><br />\n");
|
||||
_out.write("Plot averages: <input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"false\" " + (_showEvents ? "" : "checked=\"true\" ") + " /> ");
|
||||
_out.write("or plot events: <input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"true\" "+ (_showEvents ? "checked=\"true\" " : "") + " /><br />\n");
|
||||
_out.write("Image sizes: width: <input size=\"4\" type=\"text\" name=\"width\" value=\"" + _width
|
||||
+ "\" /> pixels, height: <input size=\"4\" type=\"text\" name=\"height\" value=\"" + _height
|
||||
+ "\" /><br />\n");
|
||||
_out.write("Refresh delay: <select name=\"refreshDelay\"><option value=\"60\">1 minute</option><option value=\"120\">2 minutes</option><option value=\"300\">5 minutes</option><option value=\"600\">10 minutes</option><option value=\"1800\">30 minutes</option><option value=\"3600\">1 hour</option><option value=\"-1\">Never</option></select><br />\n");
|
||||
_out.write("<hr /><input type=\"submit\" value=\"Redraw\" /></div>");
|
||||
_out.write("<hr /><div class=\"formaction\"><input type=\"submit\" value=\"Redraw\" /></div></div>");
|
||||
} catch (IOException ioe) {
|
||||
ioe.printStackTrace();
|
||||
}
|
||||
|
@@ -30,6 +30,7 @@
|
||||
<b>I2P will work best if you configure your rates to match the speed of your internet connection.</b>
|
||||
</p>
|
||||
<p>
|
||||
<div class="wideload">
|
||||
<table>
|
||||
<tr><td><input style="text-align: right; width: 5em;" name="inboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="inboundRate" />" /> KBps
|
||||
In <td>(<jsp:getProperty name="nethelper" property="inboundRateBits" />)<br />
|
||||
@@ -49,7 +50,7 @@
|
||||
-->
|
||||
<tr><td><jsp:getProperty name="nethelper" property="sharePercentageBox" />
|
||||
Share <td>(<jsp:getProperty name="nethelper" property="shareRateBits" />)<br />
|
||||
</table>
|
||||
</table></div>
|
||||
</p><p>
|
||||
<% int share = nethelper.getShareBandwidth();
|
||||
if (share < 12) {
|
||||
@@ -59,15 +60,14 @@
|
||||
out.print("It improves your anonymity by creating cover traffic, and helps the network.<br />");
|
||||
} else {
|
||||
out.print("You have configured I2P to share<b> " + share + "KBps</b>. ");
|
||||
out.print("The higher the share bandwidth the more you improve your anonymity and help the network.<br />");
|
||||
out.print("The higher the share bandwidth the more you improve your anonymity and help the network.<hr />");
|
||||
}
|
||||
%>
|
||||
</p><p>
|
||||
<input type="submit" name="save" value="Save changes" /> <input type="reset" value="Cancel" /><br />
|
||||
</p>
|
||||
<!--
|
||||
</p><div class="formaction">
|
||||
<input type="submit" name="save" value="Save changes" /> <input type="reset" value="Cancel" /></div>
|
||||
<!--
|
||||
<b>Enable load testing: </b>
|
||||
<input type="checkbox" name="enableloadtesting" value="true" <jsp:getProperty name="nethelper" property="enableLoadTesting" /> />
|
||||
<input type="checkbox" class="optbox" name="enableloadtesting" value="true" <jsp:getProperty name="nethelper" property="enableLoadTesting" /> />
|
||||
<p>If enabled, your router will periodically anonymously probe some of your peers
|
||||
to see what sort of throughput they can handle. This improves your router's ability
|
||||
to pick faster peers, but can cost substantial bandwidth. Relevant data from the
|
||||
@@ -80,20 +80,20 @@
|
||||
<b>The default settings will work for most people. There is <a href="#chelp">help below</a>.</b>
|
||||
</p><p>
|
||||
<b>UPnP Configuration:</b><br />
|
||||
<input type="checkbox" name="upnp" value="true" <jsp:getProperty name="nethelper" property="upnpChecked" /> />
|
||||
<input type="checkbox" class="optbox" name="upnp" value="true" <jsp:getProperty name="nethelper" property="upnpChecked" /> />
|
||||
Enable UPnP to open firewall ports - <a href="peers.jsp#upnp">UPnP status</a>
|
||||
</p><p>
|
||||
<b>IP Configuration:</b><br />
|
||||
Externally reachable hostname or IP address:<br />
|
||||
<input type="radio" name="udpAutoIP" value="local,upnp,ssu" <%=nethelper.getUdpAutoIPChecked(3) %> />
|
||||
<input type="radio" class="optbox" name="udpAutoIP" value="local,upnp,ssu" <%=nethelper.getUdpAutoIPChecked(3) %> />
|
||||
Use all auto-detect methods<br />
|
||||
<input type="radio" name="udpAutoIP" value="local,ssu" <%=nethelper.getUdpAutoIPChecked(4) %> />
|
||||
<input type="radio" class="optbox" name="udpAutoIP" value="local,ssu" <%=nethelper.getUdpAutoIPChecked(4) %> />
|
||||
Disable UPnP IP address detection<br />
|
||||
<input type="radio" name="udpAutoIP" value="upnp,ssu" <%=nethelper.getUdpAutoIPChecked(5) %> />
|
||||
<input type="radio" class="optbox" name="udpAutoIP" value="upnp,ssu" <%=nethelper.getUdpAutoIPChecked(5) %> />
|
||||
Ignore local interface IP address<br />
|
||||
<input type="radio" name="udpAutoIP" value="ssu" <%=nethelper.getUdpAutoIPChecked(0) %> />
|
||||
<input type="radio" class="optbox" name="udpAutoIP" value="ssu" <%=nethelper.getUdpAutoIPChecked(0) %> />
|
||||
Use SSU IP address detection only<br />
|
||||
<input type="radio" name="udpAutoIP" value="fixed" <%=nethelper.getUdpAutoIPChecked(1) %> />
|
||||
<input type="radio" class="optbox" name="udpAutoIP" value="fixed" <%=nethelper.getUdpAutoIPChecked(1) %> />
|
||||
Specify hostname or IP:
|
||||
<input name ="udpHost1" type="text" size="16" value="<jsp:getProperty name="nethelper" property="udphostname" />" />
|
||||
<% String[] ips = nethelper.getAddresses();
|
||||
@@ -110,14 +110,14 @@
|
||||
}
|
||||
%>
|
||||
<br />
|
||||
<input type="radio" name="udpAutoIP" value="hidden" <%=nethelper.getUdpAutoIPChecked(2) %> />
|
||||
<input type="radio" class="optbox" name="udpAutoIP" value="hidden" <%=nethelper.getUdpAutoIPChecked(2) %> />
|
||||
Hidden mode - do not publish IP <i>(prevents participating traffic)</i><br />
|
||||
</p><p>
|
||||
<b>UDP Configuration:</b><br />
|
||||
UDP port:
|
||||
<input name ="udpPort" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="configuredUdpPort" />" /><br />
|
||||
<!-- let's keep this simple...
|
||||
<input type="checkbox" name="requireIntroductions" value="true" <jsp:getProperty name="nethelper" property="requireIntroductionsChecked" /> />
|
||||
<input type="checkbox" class="optbox" name="requireIntroductions" value="true" <jsp:getProperty name="nethelper" property="requireIntroductionsChecked" /> />
|
||||
Require SSU introductions
|
||||
<i>(Enable if you cannot open your firewall)</i>
|
||||
</p><p>
|
||||
@@ -126,31 +126,32 @@
|
||||
</p><p>
|
||||
<b>TCP Configuration:</b><br />
|
||||
Externally reachable hostname or IP address:<br />
|
||||
<input type="radio" name="ntcpAutoIP" value="true" <%=nethelper.getTcpAutoIPChecked(2) %> />
|
||||
<input type="radio" class="optbox" name="ntcpAutoIP" value="true" <%=nethelper.getTcpAutoIPChecked(2) %> />
|
||||
Use auto-detected IP address
|
||||
<i>(currently <jsp:getProperty name="nethelper" property="udpIP" />)</i>
|
||||
if we are not firewalled<br />
|
||||
<input type="radio" name="ntcpAutoIP" value="always" <%=nethelper.getTcpAutoIPChecked(3) %> />
|
||||
<input type="radio" class="optbox" name="ntcpAutoIP" value="always" <%=nethelper.getTcpAutoIPChecked(3) %> />
|
||||
Always use auto-detected IP address (Not firewalled)<br />
|
||||
<input type="radio" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(1) %> />
|
||||
<input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(1) %> />
|
||||
Specify hostname or IP:
|
||||
<input name ="ntcphost" type="text" size="16" value="<jsp:getProperty name="nethelper" property="ntcphostname" />" /><br />
|
||||
<input type="radio" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(0) %> />
|
||||
<input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(0) %> />
|
||||
Disable inbound (Firewalled)<br />
|
||||
<input type="radio" name="ntcpAutoIP" value="disabled" <%=nethelper.getTcpAutoIPChecked(4) %> />
|
||||
<input type="radio" class="optbox" name="ntcpAutoIP" value="disabled" <%=nethelper.getTcpAutoIPChecked(4) %> />
|
||||
Completely disable <i>(select only if behind a firewall that throttles or blocks outbound TCP)</i><br />
|
||||
</p><p>
|
||||
Externally reachable TCP port:<br />
|
||||
<input type="radio" name="ntcpAutoPort" value="2" <%=nethelper.getTcpAutoPortChecked(2) %> />
|
||||
<input type="radio" class="optbox" name="ntcpAutoPort" value="2" <%=nethelper.getTcpAutoPortChecked(2) %> />
|
||||
Use the same port configured for UDP
|
||||
<i>(currently <jsp:getProperty name="nethelper" property="udpPort" />)</i><br />
|
||||
<input type="radio" name="ntcpAutoPort" value="1" <%=nethelper.getTcpAutoPortChecked(1) %> />
|
||||
<input type="radio" class="optbox" name="ntcpAutoPort" value="1" <%=nethelper.getTcpAutoPortChecked(1) %> />
|
||||
Specify Port:
|
||||
<input name ="ntcpport" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="ntcpport" />" /><br />
|
||||
</p><p><b>Note: Changing these settings will restart your router.</b>
|
||||
</p>
|
||||
</p><hr><div class="formaction">
|
||||
<input type="submit" name="save" value="Save changes" /> <input type="reset" value="Cancel" />
|
||||
</div>
|
||||
</div>
|
||||
<h3><a name="chelp">Configuration Help:</a></h3>
|
||||
<div align="justify">
|
||||
<p>
|
||||
@@ -248,7 +249,7 @@
|
||||
<hr />
|
||||
<!--
|
||||
<b>Dynamic Router Keys: </b>
|
||||
<input type="checkbox" name="dynamicKeys" value="true" <jsp:getProperty name="nethelper" property="dynamicKeysChecked" /> /><br />
|
||||
<input type="checkbox" class="optbox" name="dynamicKeys" value="true" <jsp:getProperty name="nethelper" property="dynamicKeysChecked" /> /><br />
|
||||
<p>
|
||||
This setting causes your router identity to be regenerated every time your IP address
|
||||
changes. If you have a dynamic IP this option can speed up your reintegration into
|
||||
|
@@ -16,12 +16,13 @@
|
||||
<div class="main" id="main">
|
||||
|
||||
<%@include file="confignav.jsp" %>
|
||||
|
||||
|
||||
<jsp:useBean class="net.i2p.router.web.ConfigAdvancedHandler" id="formhandler" scope="request" />
|
||||
<jsp:setProperty name="formhandler" property="*" />
|
||||
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
|
||||
<jsp:getProperty name="formhandler" property="allMessages" />
|
||||
<div class="configure">
|
||||
<div class="wideload">
|
||||
<form action="configadvanced.jsp" method="POST">
|
||||
<% String prev = System.getProperty("net.i2p.router.web.ConfigAdvancedHandler.nonce");
|
||||
if (prev != null) System.setProperty("net.i2p.router.web.ConfigAdvancedHandler.noncePrev", prev);
|
||||
@@ -30,15 +31,14 @@
|
||||
<input type="hidden" name="action" value="blah" />
|
||||
<h3>Advanced I2P Configuration</h3>
|
||||
<textarea rows="32" cols="60" name="config" wrap="off"><jsp:getProperty name="advancedhelper" property="settings" /></textarea><br /><hr>
|
||||
<p align="right">
|
||||
<div class="formaction">
|
||||
<input type="submit" name="shouldsave" value="Apply" />
|
||||
<input type="reset" value="Cancel" />
|
||||
</p>
|
||||
<p>
|
||||
NOTE: Some changes may require a restart to take effect.
|
||||
</p>
|
||||
<input type="reset" value="Cancel" /><br />
|
||||
<b>NOTE:</b> Some changes may require a restart to take effect.
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -35,14 +35,13 @@ button span.hide{
|
||||
<h3>Client Configuration</h3>
|
||||
<p>
|
||||
The Java clients listed below are started by the router and run in the same JVM.
|
||||
</p><p>
|
||||
</p><p> <div class="wideload">
|
||||
<jsp:getProperty name="clientshelper" property="form1" />
|
||||
</p><p>
|
||||
<i>All changes require restart to take effect. To change other client options, edit the clients.config file.</i>
|
||||
</p> <hr /><p>
|
||||
</p> <hr /><div class="formaction">
|
||||
<input type="submit" name="action" value="Save Client Configuration" />
|
||||
</p>
|
||||
<hr />
|
||||
</div></div>
|
||||
<h3>WebApp Configuration</h3>
|
||||
<p>
|
||||
The Java web applications listed below are started by the webConsole client and run in the same JVM as the router.
|
||||
@@ -54,15 +53,18 @@ button span.hide{
|
||||
A web app may also be disabled by removing the .war file from the webapps directory;
|
||||
however the .war file and web app will reappear when you update your router to a newer version,
|
||||
so disabling the web app here is the preferred method.
|
||||
</p><p>
|
||||
</p><p><div class="wideload">
|
||||
<jsp:getProperty name="clientshelper" property="form2" />
|
||||
</p><p><hr>
|
||||
<input type="submit" name="action" value="Save WebApp Configuration" />
|
||||
</p><hr><p>
|
||||
</p>
|
||||
<p>
|
||||
<i>All changes require restart to take effect. To change other webapp options, edit the webapps.config file.</i>
|
||||
</p>
|
||||
<hr><div class="formaction">
|
||||
<input type="submit" name="action" value="Save WebApp Configuration" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -11,7 +11,7 @@
|
||||
<h1>I2P Keyring Configuration</h1>
|
||||
<div class="main" id="main">
|
||||
<%@include file="confignav.jsp" %>
|
||||
|
||||
|
||||
<jsp:useBean class="net.i2p.router.web.ConfigKeyringHandler" id="formhandler" scope="request" />
|
||||
<jsp:setProperty name="formhandler" property="*" />
|
||||
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
|
||||
@@ -26,8 +26,9 @@
|
||||
<h3>Keyring</h3>
|
||||
The router keyring is used to decrypt encrypted leaseSets.
|
||||
The keyring may contain keys for local or remote encrypted destinations.
|
||||
<p><jsp:getProperty name="keyringhelper" property="summary" />
|
||||
</p>
|
||||
<div class="wideload"><p>
|
||||
<jsp:getProperty name="keyringhelper" property="summary" />
|
||||
</p></div>
|
||||
|
||||
<hr />
|
||||
|
||||
@@ -40,22 +41,22 @@
|
||||
Enter keys for encrypted remote destinations here.
|
||||
Keys for local destinations must be entered on the <a href="i2ptunnel/index.jsp">I2PTunnel page</a>.
|
||||
<p>
|
||||
<div class="wideload">
|
||||
<table>
|
||||
<tr>
|
||||
<td>Dest. name, hash, or full key:
|
||||
<td><textarea name="peer" cols="44" rows="1" style="height: 3em;" wrap="off"></textarea>
|
||||
<td class="mediumtags" align="right">Dest. name, hash, or full key:</td>
|
||||
<td><textarea name="peer" cols="44" rows="1" style="height: 3em;" wrap="off"></textarea></td>
|
||||
<tr>
|
||||
<td align="right">Session Key:
|
||||
<td><input type="text" size="55" name="key" />
|
||||
<td class="mediumtags" align="right">Session Key:</td>
|
||||
<td><input type="text" size="55" name="key" /></td>
|
||||
<tr>
|
||||
<td>
|
||||
<td><div align="right">
|
||||
<input type="submit" name="action" value="Add key" />
|
||||
</div>
|
||||
<td align="right">
|
||||
<input type="submit" name="action" value="Add key" /></td>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
@@ -13,7 +13,7 @@
|
||||
<h1>I2P Logging Configuration</h1>
|
||||
<div class="main" id="main">
|
||||
<%@include file="confignav.jsp" %>
|
||||
|
||||
|
||||
<jsp:useBean class="net.i2p.router.web.ConfigLoggingHandler" id="formhandler" scope="request" />
|
||||
<jsp:setProperty name="formhandler" property="*" />
|
||||
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
|
||||
@@ -26,34 +26,35 @@
|
||||
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigLoggingHandler.nonce")%>" />
|
||||
<input type="hidden" name="action" value="blah" />
|
||||
<h3>Configure I2P Logging Options</h3>
|
||||
<div class="wideload">
|
||||
<table border="0" cellspacing="5">
|
||||
<tr>
|
||||
<td valign="top"><b>Logging filename:</b>
|
||||
<td class="mediumtags" align="right"><b>Logging filename:</b>
|
||||
<td><input type="text" name="logfilename" size="40" value="<jsp:getProperty name="logginghelper" property="logFilePattern" />" />
|
||||
<br /> <i>(the symbol '@' will be replaced during log rotation)</i>
|
||||
<tr>
|
||||
<td valign="top"><b>Log record format:</b>
|
||||
<td class="mediumtags" align="right"><b>Log record format:</b>
|
||||
<td><input type="text" name="logformat" size="20" value="<jsp:getProperty name="logginghelper" property="recordPattern" />" />
|
||||
<br /> <i>(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority,
|
||||
'm' = message)</i>
|
||||
<tr>
|
||||
<td valign="top"><b>Log date format:</b>
|
||||
<td class="mediumtags" align="right"><b>Log date format:</b>
|
||||
<td><input type="text" name="logdateformat" size="20" value="<jsp:getProperty name="logginghelper" property="datePattern" />" />
|
||||
<br /> <i>('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss'
|
||||
= second, 'SSS' = millisecond)</i>
|
||||
<tr>
|
||||
<td valign="top"><b>Max log file size:</b>
|
||||
<td class="mediumtags" align="right"><b>Max log file size:</b>
|
||||
<td><input type="text" name="logfilesize" size="4" value="<jsp:getProperty name="logginghelper" property="maxFileSize" />" />
|
||||
<br />
|
||||
<tr>
|
||||
<td valign="top"><b>Default log level:</b>
|
||||
<td class="mediumtags" align="right"><b>Default log level:</b>
|
||||
<td><jsp:getProperty name="logginghelper" property="defaultLogLevelBox" /> <br /> <i>(DEBUG and INFO are not recommended defaults,
|
||||
as they will drastically slow down your router)</i>
|
||||
<tr>
|
||||
<td valign="top"><b>Log level overrides:</b>
|
||||
<td class="mediumtags" align="right"><b>Log level overrides:</b>
|
||||
<td><jsp:getProperty name="logginghelper" property="logLevelTable" />
|
||||
<tr>
|
||||
<td colspan="2" valign="top"><hr>
|
||||
<td colspan="2"><hr>
|
||||
<tr>
|
||||
<td>
|
||||
<td> <div align="right">
|
||||
@@ -64,5 +65,6 @@
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -37,18 +37,19 @@
|
||||
<a name="unsh"> </a>
|
||||
<a name="bonus"> </a>
|
||||
<h2>Manual Peer Controls</h2>
|
||||
Router Hash:
|
||||
<input type="text" size="55" name="peer" value="<%=peer%>" />
|
||||
<div class="mediumtags">Router Hash:
|
||||
<input type="text" size="55" name="peer" value="<%=peer%>" /></div>
|
||||
<h3>Manually Shitlist / Unshitlist a Router</h3>
|
||||
Shitlisting will prevent the participation of this peer in tunnels you create.
|
||||
<p>
|
||||
<hr />
|
||||
<div class="formaction">
|
||||
<input type="submit" name="action" value="Shitlist peer until restart" />
|
||||
<input type="submit" name="action" value="Unshitlist peer" />
|
||||
<% if (! "".equals(peer)) { %>
|
||||
<font color="blue"><---- click to verify action</font>
|
||||
<!-- <font color="blue"><---- click to verify action</font> -->
|
||||
<% } %>
|
||||
</p>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<h3>Adjust Profile Bonuses</h3>
|
||||
Bonuses may be positive or negative, and affect the peer's inclusion in Fast
|
||||
and High Capacity tiers. Fast peers are used for client tunnels, and High
|
||||
@@ -59,24 +60,24 @@
|
||||
if (! "".equals(peer)) {
|
||||
// get existing bonus values?
|
||||
}
|
||||
%>
|
||||
Speed:
|
||||
%>
|
||||
<hr />
|
||||
<div class="mediumtags">Speed:
|
||||
<input type="text" size="8" name="speed" value="<%=speed%>" />
|
||||
Capacity:
|
||||
<input type="text" size="8" name="capacity" value="<%=capacity%>" />
|
||||
<input type="submit" name="action" value="Adjust peer bonuses" />
|
||||
<input type="submit" name="action" value="Adjust peer bonuses" /></div>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
<hr />
|
||||
<a name="shitlist"> </a>
|
||||
<jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" />
|
||||
<jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
|
||||
<jsp:getProperty name="profilesHelper" property="shitlistSummary" />
|
||||
<hr />
|
||||
<div class="wideload">
|
||||
<jsp:getProperty name="peerhelper" property="blocklistSummary" />
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
@@ -26,11 +26,11 @@
|
||||
<p>Graceful shutdown lets the router satisfy the agreements it has already made
|
||||
before shutting down, but may take a few minutes. If you need to kill the
|
||||
router immediately, that option is available as well.</p>
|
||||
|
||||
<hr><div class="formaction">
|
||||
<input type="submit" name="action" value="Shutdown gracefully" />
|
||||
<input type="submit" name="action" value="Shutdown immediately" />
|
||||
<input type="submit" name="action" value="Cancel graceful shutdown" />
|
||||
<hr>
|
||||
</div>
|
||||
<% if (System.getProperty("wrapper.version") != null) { %>
|
||||
<p>If you want the router to restart itself after shutting down, you can choose one of
|
||||
the following. This is useful in some situations - for example, if you changed
|
||||
@@ -38,30 +38,32 @@
|
||||
or the interface it listens on. A graceful restart will take a few minutes (but your peers
|
||||
will appreciate your patience), while a hard restart does so immediately. After tearing down
|
||||
the router, it will wait 1 minute before starting back up again.</p>
|
||||
|
||||
<hr><div class="formaction">
|
||||
<input type="submit" name="action" value="Graceful restart" />
|
||||
<input type="submit" name="action" value="Hard restart" />
|
||||
<% } %>
|
||||
<hr>
|
||||
<% } %></div>
|
||||
|
||||
<% if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %>
|
||||
<h3>Systray integration</h3>
|
||||
<p>On the windows platform, there is a small application to sit in the system
|
||||
tray, allowing you to view the router's status (later on, I2P client applications
|
||||
will be able to integrate their own functionality into the system tray as well).
|
||||
If you are on windows, you can either enable or disable that icon here.</p>
|
||||
<hr><div class="formaction">
|
||||
<input type="submit" name="action" value="Show systray icon" />
|
||||
<input type="submit" name="action" value="Hide systray icon" />
|
||||
<hr>
|
||||
</div>
|
||||
<h3>Run on startup</h3>
|
||||
<p>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. You can
|
||||
also run the <code>install_i2p_service_winnt.bat</code> (or
|
||||
<code>uninstall_i2p_service_winnt.bat</code>) from the command line, if you prefer.</p>
|
||||
<hr><div class="formaction">
|
||||
<input type="submit" name="action" value="Run I2P on startup" />
|
||||
<input type="submit" name="action" value="Don't run I2P on startup" /><br />
|
||||
<input type="submit" name="action" value="Don't run I2P on startup" /></div>
|
||||
<p><b>Note:</b> If you are running I2P as service right now, removing it will shut
|
||||
down your router immediately. You may want to consider shutting down gracefully, as
|
||||
above, then running uninstall_i2p_service_winnt.bat.</p><hr>
|
||||
above, then running uninstall_i2p_service_winnt.bat.</p>
|
||||
<% } %>
|
||||
|
||||
<% if (System.getProperty("wrapper.version") != null) { %>
|
||||
@@ -69,17 +71,19 @@
|
||||
<p>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>
|
||||
<hr><div class="formaction">
|
||||
<input type="submit" name="action" value="Dump threads" />
|
||||
<% } %><hr>
|
||||
<% } %></div>
|
||||
|
||||
<h3>Launch browser on router startup?</h3>
|
||||
<p>I2P's main configuration interface is this web console, so for your convenience
|
||||
I2P can launch a web browser pointing at
|
||||
<a href="http://127.0.0.1:7657/index.jsp">http://127.0.0.1:7657/index.jsp</a> whenever
|
||||
the router starts up.</p>
|
||||
<hr><div class="formaction">
|
||||
<input type="submit" name="action" value="View console on startup" />
|
||||
<input type="submit" name="action" value="Do not view console on startup" />
|
||||
</form><hr>
|
||||
</form></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
@@ -56,7 +56,7 @@ function toggleAll(category)
|
||||
<h1>I2P Stats Configuration</h1>
|
||||
<div class="main" id="main">
|
||||
<%@include file="confignav.jsp" %>
|
||||
|
||||
|
||||
<jsp:useBean class="net.i2p.router.web.ConfigStatsHandler" id="formhandler" scope="request" />
|
||||
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
|
||||
<jsp:setProperty name="formhandler" property="*" />
|
||||
@@ -73,39 +73,39 @@ function toggleAll(category)
|
||||
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigStatsHandler.nonce")%>" />
|
||||
<h3>Configure I2P Stat Collection</h3>
|
||||
Enable full stats?
|
||||
<input type="checkbox" name="isFull" value="true" <%
|
||||
<input type="checkbox" class="optbox" name="isFull" value="true" <%
|
||||
if (statshelper.getIsFull()) { %>checked="true" <% } %>/>
|
||||
(change requires restart to take effect)<br />
|
||||
Stat file: <input type="text" name="filename" value="<%=statshelper.getFilename()%>" /><br />
|
||||
Filter: (<a href="javascript: void(null);" onclick="toggleAll('*')">toggle all</a>)<hr />
|
||||
<div class="wideload">
|
||||
<table>
|
||||
<% while (statshelper.hasMoreStats()) {
|
||||
while (statshelper.groupRequired()) { %>
|
||||
<tr><td valign="top" align="left" colspan="3">
|
||||
<tr class="tablefooter"><td align="left" colspan="3">
|
||||
<b><%=statshelper.getCurrentGroupName()%></b>
|
||||
(<a href="javascript: void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')">toggle all</a>)
|
||||
</td></tr><tr><td>Log</td><td>Graph</td><td></td></tr><%
|
||||
</td></tr><tr class="tablefooter"><td align="center"><b>Log</b></td><td align="center"><b>Graph</b></td><td></td></tr><%
|
||||
} // end iterating over required groups for the current stat %>
|
||||
<tr><td valign="top" align="left">
|
||||
<tr><td align="center">
|
||||
<a name="<%=statshelper.getCurrentStatName()%>"></a>
|
||||
<input id="<%=statshelper.getCurrentGroupName()%>" type="checkbox" name="statList" value="<%=statshelper.getCurrentStatName()%>" <%
|
||||
<input id="<%=statshelper.getCurrentGroupName()%>" type="checkbox" class="optbox" name="statList" value="<%=statshelper.getCurrentStatName()%>" <%
|
||||
if (statshelper.getCurrentIsLogged()) { %>checked="true" <% } %>/></td>
|
||||
<td valign="top" align="left">
|
||||
<td align="center">
|
||||
<% if (statshelper.getCurrentCanBeGraphed()) { %>
|
||||
<input id="<%=statshelper.getCurrentGroupName()%>" type="checkbox" name="graphList" value="<%=statshelper.getCurrentGraphName()%>" <%
|
||||
<input id="<%=statshelper.getCurrentGroupName()%>" type="checkbox" class="optbox" name="graphList" value="<%=statshelper.getCurrentGraphName()%>" <%
|
||||
if (statshelper.getCurrentIsGraphed()) { %>checked="true" <% } %>/><% } %></td>
|
||||
<td valign="top" align="left"><b><%=statshelper.getCurrentStatName()%>:</b><br />
|
||||
<td align="left"><b><%=statshelper.getCurrentStatName()%>:</b><br />
|
||||
<%=statshelper.getCurrentStatDescription()%></td></tr><%
|
||||
} // end iterating over all stats %>
|
||||
<tr><td colspan="3"><hr /></td></tr>
|
||||
<tr><td><input type="checkbox" name="explicitFilter" /></td>
|
||||
<tr><td colspan="3"></td></tr>
|
||||
<tr><td align="center"><input type="checkbox" class="optbox" name="explicitFilter" /></td>
|
||||
<td colspan="2">Advanced filter:
|
||||
<input type="text" name="explicitFilterValue" value="<%=statshelper.getExplicitFilter()%>" size="40" /></td></tr>
|
||||
<tr><td colspan="3"><hr /></td></tr>
|
||||
<tr><td><input type="submit" name="shouldsave" value="Save changes" /> </td>
|
||||
<td><input type="reset" value="Cancel" /></td><td></td></tr></form>
|
||||
<tr class="tablefooter"><td colspan="3" align="right"><input type="submit" name="shouldsave" value="Save changes" /><input type="reset" value="Cancel" /></td></tr></form>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -14,7 +14,6 @@
|
||||
<h1>I2P Tunnel Configuration</h1>
|
||||
<div class="main" id="main">
|
||||
<%@include file="confignav.jsp" %>
|
||||
|
||||
<jsp:useBean class="net.i2p.router.web.ConfigTunnelsHandler" id="formhandler" scope="request" />
|
||||
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
|
||||
<jsp:setProperty name="formhandler" property="shouldsave" value="<%=request.getParameter("shouldsave")%>" />
|
||||
@@ -31,7 +30,7 @@
|
||||
High CPU and/or high outbound bandwidth usage may result.
|
||||
Change these settings with care, and adjust them if you have problems.
|
||||
</i></p>
|
||||
|
||||
<div class="wideload">
|
||||
<form action="configtunnels.jsp" method="POST">
|
||||
<% String prev = System.getProperty("net.i2p.router.web.ConfigTunnelsHandler.nonce");
|
||||
if (prev != null) System.setProperty("net.i2p.router.web.ConfigTunnelsHandler.noncePrev", prev);
|
||||
@@ -42,9 +41,10 @@
|
||||
<i>Note - Exploratory tunnel setting changes are stored in the router.config file.</i></br>
|
||||
<i>Client tunnel changes are temporary and are not saved.</i><br>
|
||||
<i>To make permanent client tunnel changes see the </i><a href="i2ptunnel/index.jsp">i2ptunnel page</a>.<br>
|
||||
<hr /> <input type="submit" name="shouldsave" value="Save changes" /> <input type="reset" value="Cancel" />
|
||||
<hr /><div class="formaction"><input type="submit" name="shouldsave" value="Save changes" /> <input type="reset" value="Cancel" /></div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -34,9 +34,9 @@
|
||||
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigUIHandler.nonce")%>" />
|
||||
<input type="hidden" name="action" value="blah" />
|
||||
<jsp:getProperty name="uihelper" property="settings" />
|
||||
<hr>
|
||||
<hr><div class="formaction">
|
||||
<input type="submit" name="shouldsave" value="Apply" /> <input type="reset" value="Cancel" />
|
||||
</form>
|
||||
</form></div>
|
||||
<% } else { %>
|
||||
Theme selection disabled for Internet Explorer, sorry.<hr>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.
|
||||
|
@@ -28,52 +28,49 @@
|
||||
System.setProperty("net.i2p.router.web.ConfigUpdateHandler.nonce", new java.util.Random().nextLong()+""); %>
|
||||
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigUpdateHandler.nonce")%>" />
|
||||
<h3>Check for I2P and news updates</h3>
|
||||
<table border="0" cellspacing="5">
|
||||
<div class="wideload"><table border="0" cellspacing="5">
|
||||
<tr>
|
||||
<td colspan="2"></tr>
|
||||
<tr>
|
||||
<td><b>News:</b></td>
|
||||
<td class= "mediumtags" align="right"><b>News:</b></td>
|
||||
<td> <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> <i>Update In Progress</i><br /> <% } else { %> <input type="submit" name="action" value="Check for update now" />
|
||||
<% } %></tr>
|
||||
<tr>
|
||||
<td colspan="2"><hr /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>News URL:</b></td>
|
||||
<td class= "mediumtags" align="right"><b>News URL:</b></td>
|
||||
<td><input type="text" size="60" name="newsURL" value="<jsp:getProperty name="updatehelper" property="newsURL" />"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Refresh frequency:</b>
|
||||
<td class= "mediumtags" align="right"><b>Refresh frequency:</b>
|
||||
<td><jsp:getProperty name="updatehelper" property="refreshFrequencySelectBox" />
|
||||
<tr>
|
||||
<td><b>Update policy:</b>
|
||||
<td class= "mediumtags" align="right"><b>Update policy:</b>
|
||||
<td><jsp:getProperty name="updatehelper" property="updatePolicySelectBox" />
|
||||
<tr>
|
||||
<td><b>Update through the eepProxy?</b>
|
||||
<td class= "mediumtags" align="right"><b>Update through the eepProxy?</b>
|
||||
<td><jsp:getProperty name="updatehelper" property="updateThroughProxy" />
|
||||
<tr>
|
||||
<td><b>eepProxy host:</b>
|
||||
<td class= "mediumtags" align="right"><b>eepProxy host:</b>
|
||||
<td><input type="text" size="10" name="proxyHost" value="<jsp:getProperty name="updatehelper" property="proxyHost" />" />
|
||||
<tr>
|
||||
<td><b>eepProxy port:</b>
|
||||
<td class= "mediumtags" align="right"><b>eepProxy port:</b>
|
||||
<td><input type="text" size="4" name="proxyPort" value="<jsp:getProperty name="updatehelper" property="proxyPort" />" />
|
||||
<tr>
|
||||
<td><b>Update URLs:</b>
|
||||
<td class= "mediumtags" align="right"><b>Update URLs:</b>
|
||||
<td><textarea name="updateURL" wrap="off"><jsp:getProperty name="updatehelper" property="updateURL" /></textarea>
|
||||
<tr>
|
||||
<td><b>Trusted keys:</b>
|
||||
<td class= "mediumtags" align="right"><b>Trusted keys:</b>
|
||||
<td><textarea name="trustedKeys" wrap="off"><jsp:getProperty name="updatehelper" property="trustedKeys" /></textarea>
|
||||
<tr>
|
||||
<tr>
|
||||
<td colspan="2"><hr />
|
||||
<tr>
|
||||
<tr>
|
||||
<td>
|
||||
<td><div align="right">
|
||||
<td><div class="formaction">
|
||||
<input type="submit" name="action" value="Save" />
|
||||
<input type="reset" value="Cancel" />
|
||||
</div>
|
||||
</table>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -18,3 +18,4 @@
|
||||
<jsp:useBean class="net.i2p.router.web.CSSHelper" id="cssHelper" scope="request" />
|
||||
<jsp:setProperty name="cssHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
|
||||
<link href="<%=cssHelper.getTheme(request.getHeader("User-Agent"))%>console.css" rel="stylesheet" type="text/css" />
|
||||
<!--[if IE]><link href="/themes/console/classic/ieshim.css" rel="stylesheet" type="text/css" /><![endif]-->
|
@@ -11,6 +11,7 @@
|
||||
<h1>I2P Performance Graphs</h1>
|
||||
<div class="main" id="main">
|
||||
<div class="graphspanel">
|
||||
<div class="widepanel">
|
||||
<jsp:useBean class="net.i2p.router.web.GraphHelper" id="graphHelper" scope="request" />
|
||||
<jsp:setProperty name="graphHelper" property="*" />
|
||||
<jsp:setProperty name="graphHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
|
||||
@@ -18,5 +19,6 @@
|
||||
<jsp:getProperty name="graphHelper" property="images" />
|
||||
<jsp:getProperty name="graphHelper" property="form" />
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@@ -10,6 +10,7 @@
|
||||
<%@include file="summary.jsp" %>
|
||||
<h1>I2P Network Database Summary</h1>
|
||||
<div class="main" id="main">
|
||||
<div class="wideload">
|
||||
<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="writer" value="<%=out%>" />
|
||||
@@ -18,6 +19,6 @@
|
||||
<jsp:setProperty name="netdbHelper" property="lease" value="<%=request.getParameter("l")%>" />
|
||||
<jsp:getProperty name="netdbHelper" property="netDbSummary" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
<%@include file="summary.jsp" %>
|
||||
<h1>I2P Network Peer Profiles</h1>
|
||||
<div class="main" id="main">
|
||||
<div class="main" id="main"><div class="wideload">
|
||||
<jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" />
|
||||
<jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
|
||||
<jsp:getProperty name="profilesHelper" property="profileSummary" />
|
||||
@@ -17,6 +17,6 @@
|
||||
<a name="shitlist"> </a>
|
||||
<jsp:getProperty name="profilesHelper" property="shitlistSummary" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -62,7 +62,7 @@
|
||||
if (!shutdownSoon) {
|
||||
out.print("<hr /><p><form action=\"summaryframe.jsp\" method=\"GET\">\n");
|
||||
if ("0".equals(d)) {
|
||||
out.print("<b>Refresh (s):<b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" />\n");
|
||||
out.print("<b>Refresh (s):<b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" align=\"right\" />\n");
|
||||
out.print("<button type=\"submit\">Enable</button>\n");
|
||||
} else {
|
||||
// this will load in the iframe but subsequent pages will not have the iframe
|
||||
|
@@ -26,9 +26,9 @@
|
||||
<jsp:getProperty name="linkhelper" property="content" />
|
||||
<% } else { %>
|
||||
<u><b>I2P Services</b></u><br />
|
||||
<a href="susimail/susimail" target="blank">Susimail</a>
|
||||
<a href="susidns/index.jsp" target="_blank">SusiDNS</a>
|
||||
<a href="i2psnark/" target="_blank">Torrents</a>
|
||||
<a href="susidns/index.jsp" target="_blank">Addressbook</a>
|
||||
<a href="i2psnark/" target="_blank">Torrents</a>
|
||||
<a href="susimail/susimail" target="blank">Webmail</a>
|
||||
<a href="http://127.0.0.1:7658/" target="_blank">Webserver</a><hr />
|
||||
<u><b>I2P Internals</b></u><br />
|
||||
<a href="i2ptunnel/index.jsp" target="_blank">I2PTunnel</a>
|
||||
|
@@ -1545,7 +1545,7 @@ public class WebMail extends HttpServlet
|
||||
"<tr><td align=\"right\">Cc:</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_CC + "\" value=\"" + cc + "\"></td></tr>\n" +
|
||||
"<tr><td align=\"right\">Bcc:</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_BCC + "\" value=\"" + bcc + "\"></td></tr>\n" +
|
||||
"<tr><td align=\"right\">Subject:</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_SUBJECT + "\" value=\"" + subject + "\"></td></tr>\n" +
|
||||
"<tr><td> </td><td align=\"left\"><input type=\"checkbox\" name=\"" + NEW_BCC_TO_SELF + "\" value=\"1\"" + ( bccToSelf.compareToIgnoreCase( "false" ) != 0 ? "checked" : "" )+ ">Bcc to self</td></tr>\n" +
|
||||
"<tr><td> </td><td align=\"left\"><input type=\"checkbox\" class=\"optbox\" name=\"" + NEW_BCC_TO_SELF + "\" value=\"1\"" + ( bccToSelf.compareToIgnoreCase( "false" ) != 0 ? "checked" : "" )+ ">Bcc to self</td></tr>\n" +
|
||||
"<tr><td colspan=\"2\" align=\"center\"><textarea cols=\"" + Config.getProperty( CONFIG_COMPOSER_COLS, 80 )+ "\" rows=\"" + Config.getProperty( CONFIG_COMPOSER_ROWS, 10 )+ "\" name=\"" + NEW_TEXT + "\">" + text + "</textarea>" +
|
||||
"<tr><td colspan=\"2\" align=\"center\"><hr></td></tr>\n" +
|
||||
"<tr><td align=\"right\">New Attachment:</td><td align=\"left\"><input type=\"file\" size=\"50%\" name=\"" + NEW_FILENAME + "\" value=\"\"><input type=\"submit\" name=\"" + NEW_UPLOAD + "\" value=\"Upload File\"></td></tr>" );
|
||||
@@ -1558,7 +1558,7 @@ public class WebMail extends HttpServlet
|
||||
wroteHeader = true;
|
||||
}
|
||||
Attachment attachment = (Attachment)it.next();
|
||||
out.println( "<tr><td colspan=\"2\" align=\"center\"><input type=\"checkbox\" name=\"check" + attachment.hashCode() + "\" value=\"1\"> " + attachment.getFileName() + "</td></tr>");
|
||||
out.println( "<tr><td colspan=\"2\" align=\"center\"><input type=\"checkbox\" class=\"optbox\" name=\"check" + attachment.hashCode() + "\" value=\"1\"> " + attachment.getFileName() + "</td></tr>");
|
||||
}
|
||||
}
|
||||
out.println( "</table>" );
|
||||
@@ -1632,7 +1632,7 @@ public class WebMail extends HttpServlet
|
||||
", markAll=" + sessionObject.markAll +
|
||||
", invert=" + sessionObject.invert +
|
||||
", clear=" + sessionObject.clear );
|
||||
out.println( "<tr class=\"list" + bg + "\"><td><input type=\"checkbox\" name=\"check" + i + "\" value=\"1\"" +
|
||||
out.println( "<tr class=\"list" + bg + "\"><td><input type=\"checkbox\" class=\"optbox\" name=\"check" + i + "\" value=\"1\"" +
|
||||
( idChecked ? "checked" : "" ) + ">" + ( RELEASE ? "" : "" + i ) + "</td><td>" + link + mail.shortSender + "</a></td><td> </td><td>" + link + mail.shortSubject + "</a></td><td> </td><td>" + mail.formattedDate + "</a></td><td> </td><td>" + mail.size + " Bytes</a></td></tr>" );
|
||||
bg = 1 - bg;
|
||||
i++;
|
||||
|
@@ -502,7 +502,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
|
||||
public String renderStatusHTML() {
|
||||
StringBuilder buf = new StringBuilder(1024);
|
||||
buf.append("<h2>Inbound sessions</h2>");
|
||||
buf.append("<table border=\"1\">");
|
||||
buf.append("<table>");
|
||||
Set<TagSet> inbound = getInboundTagSets();
|
||||
Map<SessionKey, Set<TagSet>> inboundSets = new HashMap(inbound.size());
|
||||
for (Iterator<TagSet> iter = inbound.iterator(); iter.hasNext();) {
|
||||
@@ -528,7 +528,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
|
||||
|
||||
buf.append("<h2><b>Outbound sessions</b></h2>");
|
||||
|
||||
buf.append("<table border=\"1\">");
|
||||
buf.append("<table>");
|
||||
Set<OutboundSession> outbound = getOutboundSessions();
|
||||
for (Iterator<OutboundSession> iter = outbound.iterator(); iter.hasNext();) {
|
||||
OutboundSession sess = iter.next();
|
||||
|
15
history.txt
@@ -1,3 +1,18 @@
|
||||
2009-08-03 dr|z3d
|
||||
* Extensive update to the Classic theme; custom css hacks for IE.
|
||||
|
||||
2009-08-02 dr|z3d
|
||||
* Better support for Internet Explorer/classic theme.
|
||||
* Incremental improvements to classic theme.
|
||||
* More UI tweaks and fiddles.
|
||||
* Fixes for I2PSnark UI; more to come.
|
||||
|
||||
2009-07-31 dr|z3d
|
||||
* Resolve anomalous buttons and text fields in console ui.
|
||||
* Enhance presentation of data in /peers.jsp.
|
||||
* Fix themes issue with horizontal width of radio/checkbox icons.
|
||||
* Other cosmetic UI enhancements.
|
||||
|
||||
* 2009-07-31 0.7.6 released
|
||||
|
||||
2009-07-31 zzz
|
||||
|
@@ -1,10 +1,15 @@
|
||||
/* Optimised for less capable browers and system specifications */
|
||||
|
||||
body {
|
||||
margin: 1em 0em;
|
||||
padding: 0em;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-align: left;
|
||||
background: #FFF;
|
||||
background: #bbf;
|
||||
color: #000;
|
||||
font: 10pt/120% Verdana, Tahoma, Helvetica, sans-serif;
|
||||
/*
|
||||
font: 10pt/140% Verdana, Tahoma, Helvetica, sans-serif;
|
||||
*/
|
||||
font: 9pt/140% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
.hide {
|
||||
@@ -16,18 +21,64 @@ img {
|
||||
}
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
font-size: 8pt !important;
|
||||
width: 100%;
|
||||
overflow-x: scroll;
|
||||
}
|
||||
|
||||
div.logo {
|
||||
float: left;
|
||||
position-relative: top 20px ;
|
||||
width: 200px;
|
||||
left: 1em;
|
||||
top: 1em;
|
||||
margin: 0em;
|
||||
padding: .5em;
|
||||
margin: 0 0 0 20px;
|
||||
padding: 10px 5px;
|
||||
text-align: center;
|
||||
border: 5px solid #ddf;
|
||||
background-color: #eef;
|
||||
-moz-border-radius: 15px;
|
||||
-moz-box-shadow: inset 0px 0px 0px 2px #99f;
|
||||
-khtml-border-radius: 15px;
|
||||
-khtml-box-shadow: inset 0px 0px 0px 2px #99f;
|
||||
}
|
||||
|
||||
div.logo hr {
|
||||
color: #ddf;
|
||||
background: #ddf;
|
||||
height: 5px;
|
||||
border: 0px solid #ddf;
|
||||
margin: 8px -3px;
|
||||
}
|
||||
|
||||
div.logo a:link, div.logo a:visited {
|
||||
text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.5);
|
||||
}
|
||||
|
||||
div.logo a:active {
|
||||
text-shadow: 0px 0px 1px rgba(255, 96, 0, 0.7);
|
||||
color: #f60;
|
||||
}
|
||||
|
||||
div.logo a:hover {
|
||||
text-shadow: 0px 0px 1px rgba(128, 0, 0, 0.7);
|
||||
color: #900;
|
||||
}
|
||||
|
||||
div.warning a:link {
|
||||
color: #f60;
|
||||
text-shadow: 0px 0px 1px rgba(255, 96, 0, 0.5);
|
||||
}
|
||||
|
||||
div.warning a:visited{
|
||||
color: #f90;
|
||||
}
|
||||
|
||||
div.warning a:hover{
|
||||
color: #d30;
|
||||
text-shadow: 0px 0px 1px rgba(255, 96, 0, 0.7);
|
||||
}
|
||||
|
||||
div.warning a:active{
|
||||
color: #900;
|
||||
}
|
||||
|
||||
div.toolbar {
|
||||
@@ -37,78 +88,202 @@ div.toolbar {
|
||||
}
|
||||
|
||||
div.routersummaryouter {
|
||||
float: left;
|
||||
float: left;
|
||||
width: 200px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
clear: left;/* fixes a bug in Opera */
|
||||
overflow: auto;
|
||||
clear: left; /* fixes a bug in Opera */
|
||||
}
|
||||
|
||||
div.routersummary {
|
||||
background: #fafaff;
|
||||
width: 175px;
|
||||
background: #ddf;
|
||||
width: 190px;
|
||||
color: inherit;
|
||||
margin: 0em;
|
||||
padding: 5px;
|
||||
text-align: left;
|
||||
border: medium solid #efefff;
|
||||
margin: 0;
|
||||
padding: 7px 0 0 0px;
|
||||
text-align: center !important;
|
||||
border: 5px solid #bbf;
|
||||
font-size: 9pt;
|
||||
word-wrap: break-word;
|
||||
font: 9pt/125%;
|
||||
-moz-box-shadow: inset 0px 0px 0px 1px #99f;
|
||||
}
|
||||
|
||||
div.routersummary hr {
|
||||
color: #ccf;
|
||||
background: #ccf;
|
||||
color: #bbf;
|
||||
background: #bbf;
|
||||
height: 2px;
|
||||
border: 0px solid #ccf;
|
||||
margin: 10px 0;
|
||||
border-bottom: 1px inset #bbf;
|
||||
margin: 5px 1px 4px 1px;
|
||||
-moz-box-shadow: inset 0px -1px 0px 1px #99f;
|
||||
}
|
||||
|
||||
div.routersummary p {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.routersummary a:link, div.routersummary a:visited {
|
||||
text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.3);
|
||||
}
|
||||
|
||||
div.routersummary a:hover {
|
||||
text-shadow: 0px 0px 1px rgba(255, 96, 0, 0.7);
|
||||
color: #f60;
|
||||
}
|
||||
|
||||
div.routersummary input[type=text] {
|
||||
text-align: right !important;
|
||||
}
|
||||
|
||||
div.warning {
|
||||
margin: 0em 1em 1em 224px;
|
||||
padding: .5em 1em;
|
||||
background: #ffefef;
|
||||
border: medium solid #ffafaf;
|
||||
margin: 20px 20px 10px 260px;
|
||||
padding: 0px 20px 20px 75px;
|
||||
background: #ffd;
|
||||
border: 5px solid #fb7;
|
||||
text-align: left;
|
||||
color: inherit;
|
||||
background-image:url("../images/errortriangle.png");
|
||||
background-position: 17px center;
|
||||
background-repeat:no-repeat;
|
||||
-moz-border-radius: 15px;
|
||||
-moz-box-shadow: inset 0px 0px 0px 2px #f60;
|
||||
-kthml-border-radius: 15px;
|
||||
-khtml-box-shadow: inset 0px 0px 0px 2px #f60;
|
||||
}
|
||||
|
||||
div.warning hr {
|
||||
color: #fb7;
|
||||
background: #fb7;
|
||||
height: 5px;
|
||||
border: 0px solid #fb7;
|
||||
margin: 5px 0;
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
div.warning h3 {
|
||||
border-bottom: 5px solid #fb7;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
div.main {
|
||||
margin: 0em 1em 1em 224px;
|
||||
padding: .5em 1em;
|
||||
background: #ffffef;
|
||||
border: medium solid #ffffd0;
|
||||
margin: 0px 0px 0px 195px;
|
||||
padding: 15px 15px 15px 15px;
|
||||
background: #eef;
|
||||
border: 5px solid #bbf;
|
||||
border-top: 0;
|
||||
text-align: left;
|
||||
color: inherit;
|
||||
color: #001;
|
||||
min-width: 570px;
|
||||
-moz-box-shadow: inset 0px 0px 0px 1px #99f;
|
||||
}
|
||||
|
||||
div.main li {
|
||||
padding-bottom: 10px;
|
||||
list-style: square;
|
||||
}
|
||||
|
||||
div.main li:first-child {
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
div.main textarea {
|
||||
width: 100% !important;
|
||||
width: 98% !important;
|
||||
margin: 2px 0 2px 5px;
|
||||
}
|
||||
|
||||
div.news {
|
||||
margin: 0em 1em 1em 224px;
|
||||
padding: .5em 1em;
|
||||
margin: -5px 0px 0 195px;
|
||||
padding: -10px 15px 8px 15px;
|
||||
background: #ffffc0;
|
||||
border: medium solid #ffffa0;
|
||||
border: 5px solid #bbf;
|
||||
text-align: justify;
|
||||
color: inherit;
|
||||
min-width: 600px;
|
||||
padding-bottom: 8px;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
-moz-box-shadow: inset 0px 0px 0px 1px #99f;
|
||||
}
|
||||
|
||||
/* convert the list entry to our title */
|
||||
|
||||
div.news li {
|
||||
text-align: justify;
|
||||
list-style: none;
|
||||
margin: -15px 15px -20px -20px;
|
||||
padding: 0px 0 15px 0;
|
||||
border-bottom: 2px solid #cc7;
|
||||
border-top: 0px solid #cc7;
|
||||
padding: 3px 5px 5px 5px;
|
||||
font-size: 12pt;
|
||||
color: #540;
|
||||
}
|
||||
|
||||
div.news p {
|
||||
color: #330;
|
||||
}
|
||||
div.news a:link {
|
||||
color: #773;
|
||||
text-shadow: 0px 0px 1px rgba(128, 128, 48, 0.3);
|
||||
}
|
||||
|
||||
div.news a:visited {
|
||||
color: #f00 !important;
|
||||
text-shadow: 0px 0px 1px rgba(128, 128, 48, 0.3);
|
||||
}
|
||||
|
||||
div.news hr {
|
||||
color: #cc7;
|
||||
background: #cc7;
|
||||
height: 2px;
|
||||
border: 0px solid #cc7;
|
||||
margin: 5px 0;
|
||||
}
|
||||
|
||||
div.confignav {
|
||||
padding: 1em;
|
||||
background: #efefff;
|
||||
padding: 12px 0 15px 0;
|
||||
background: #cfc;
|
||||
margin: -20px -20px 0 -20px;
|
||||
border: 5px solid #bbf;
|
||||
-moz-box-shadow: inset 0px 0px 0px 1px #99f;
|
||||
}
|
||||
|
||||
div.configure {
|
||||
padding: 1em;
|
||||
background: #ffffc0;
|
||||
margin: 1px -20px 0 -20px;
|
||||
padding: 0px 20px 0px 20px;
|
||||
}
|
||||
|
||||
div.configure table {
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
-moz-box-shadow: inset 0px 0px 1px 1px #001;
|
||||
}
|
||||
|
||||
div.configure tr, div.configure td {
|
||||
padding: 10px 2px;
|
||||
}
|
||||
|
||||
div.configure tr {
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #bbf;
|
||||
}
|
||||
|
||||
div.messages {
|
||||
padding: 1em;
|
||||
background: #fafaff;
|
||||
padding: 0px 10px;
|
||||
background: #fff;
|
||||
border: 5px solid #bbf;
|
||||
border-right: 0;
|
||||
margin: -5px -15px 10px -20px;
|
||||
text-align: center;
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
color: #474;
|
||||
-moz-box-shadow: inset 0px 0px 0px 1px #99f;
|
||||
}
|
||||
|
||||
div.messages li, div.messages ul {
|
||||
padding: 15px 0 5px 5px;
|
||||
margin: -15px 0 0 0;
|
||||
}
|
||||
|
||||
div.messages span.error {
|
||||
@@ -121,43 +296,80 @@ div.messages span.notice {
|
||||
|
||||
h1 {
|
||||
font-size: 18pt;
|
||||
text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.7);
|
||||
text-align: center;
|
||||
border: 5px solid #bbf;
|
||||
padding: 13px 10px 12px 10px;
|
||||
margin: 0 0px 0 195px;
|
||||
line-height: 93%;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.3em;
|
||||
background: #fff;
|
||||
min-width: 600px;
|
||||
-moz-box-shadow: inset 0px 0px 0px 1px #99f;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 12pt;
|
||||
font-size: 14pt;
|
||||
padding: 10px;
|
||||
border-bottom: 5px solid #bbf;
|
||||
border-top: 0px solid #bbf;
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 10pt;
|
||||
font-size: 12pt;
|
||||
padding: 0 10px 10px 10px;
|
||||
border-bottom: 5px solid #bbf;
|
||||
border-top: 0px solid #bbf;
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
|
||||
.proxyfooter{
|
||||
font-size: 7pt;
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
|
||||
table {
|
||||
/* border-collapse: collapse; */
|
||||
border: 5px solid #dfd;
|
||||
border-collapse: collapse;
|
||||
border: 5px solid #bbf;
|
||||
margin: 5px 0px;
|
||||
cell-padding: 1px;
|
||||
font-size: 7pt;
|
||||
background: #fff;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
table hr {
|
||||
padding: 0px 0;
|
||||
color: #bbf;
|
||||
background: #bbf;
|
||||
border: 0px solid #bbf;
|
||||
margin: 0px -5px;
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
table tt {
|
||||
font-size: 7.5pt;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: #ccf;
|
||||
padding: 5px 2px;
|
||||
background-color: #fff;
|
||||
padding: 8px 2px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid #88f;
|
||||
}
|
||||
|
||||
tt {
|
||||
font-size: 8pt;
|
||||
}
|
||||
|
||||
tt, pre {
|
||||
font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 2px;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
tr:nth-child(even) {
|
||||
@@ -169,11 +381,11 @@ tr:nth-child(odd) {
|
||||
}
|
||||
|
||||
hr {
|
||||
color: #ff9;
|
||||
background: #ff9;
|
||||
height: 2px;
|
||||
border: 0px solid #ff9;
|
||||
margin: 10px 0;
|
||||
color: #bbf;
|
||||
background: #bbf;
|
||||
height: 5px;
|
||||
border: 0px solid #bbf;
|
||||
margin: 5px 0;
|
||||
}
|
||||
|
||||
.statusnotes {
|
||||
@@ -181,6 +393,148 @@ hr {
|
||||
font-size: 8pt;
|
||||
color: #001;
|
||||
text-align: center;
|
||||
margin: -3px 0 0 0;
|
||||
background: #fff;
|
||||
}
|
||||
margin: -7px 0 7px 0;
|
||||
background: #bbf;
|
||||
border: 5px solid #bbf;
|
||||
border-top: 0;
|
||||
padding: 4px 0 2px 0;
|
||||
}
|
||||
|
||||
input {
|
||||
margin: 3px 5px 3px 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
input[type=text] {
|
||||
margin: 3px 5px 3px 5px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
select {
|
||||
margin: 3px 5px 3px 5px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
submit {
|
||||
margin: 3px 5px 3px 5px;
|
||||
padding 2px 0;
|
||||
font: 8pt/140% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
p {
|
||||
padding: 5px 20px 0px 20px;
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
.formaction {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.langbox {
|
||||
margin: 29px -15px 0px 5px;
|
||||
color: #001;
|
||||
font-size: 7pt;
|
||||
width: 180px;
|
||||
text-align: center;
|
||||
float: right;
|
||||
valign: middle;
|
||||
}
|
||||
|
||||
.langbox img {
|
||||
padding: 0 2px; /* Ignored by IE8 */
|
||||
}
|
||||
|
||||
a:link{
|
||||
color: #006;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
a:visited{
|
||||
color: #448;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
a:hover{
|
||||
color: #f60;
|
||||
text-decoration: underline;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
a:active{
|
||||
color: #f93;
|
||||
text-decoration: underline;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-size: 9pt;
|
||||
margin: 0px 20px;
|
||||
}
|
||||
|
||||
tt {
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
color: darkgreen;
|
||||
}
|
||||
|
||||
.tablefooter {
|
||||
border: 1px solid #88f;
|
||||
}
|
||||
|
||||
.tablefooter tr, .tablefooter td {
|
||||
background: #bbf;
|
||||
font-size: 8pt;
|
||||
font-weight: bold;
|
||||
line-height: 150%;
|
||||
word-wrap: nowrap;
|
||||
padding: 8px 1px;
|
||||
}
|
||||
|
||||
.tidylist {
|
||||
text-align: justify;
|
||||
padding-right: 30px;
|
||||
}
|
||||
|
||||
div.graphspanel {
|
||||
padding: 20px 10px;
|
||||
margin: -20px;
|
||||
background: #ddf url('images/lightbluetile.png');
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
border: 5px solid #bbf;
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
div.graphspanel img {
|
||||
border: 1px solid #99f;
|
||||
padding: 2px;
|
||||
margin: 6px;
|
||||
background: #ddf;
|
||||
-moz-box-shadow: inset 0px 0px 1px 1px #99f;
|
||||
}
|
||||
|
||||
div.graphspanel img:hover {
|
||||
border: 1px solid #003;
|
||||
padding: 2px;
|
||||
margin: 6px;
|
||||
text-align: center !important;
|
||||
background: #001;
|
||||
-moz-box-shadow: inset 0px 0px 2px 1px #f60;
|
||||
}
|
||||
|
||||
div.graphspanel hr {
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
div.graphspanel form {
|
||||
text-align: left;
|
||||
margin: 0 20px;
|
||||
}
|
||||
|
||||
div.graphspanel h3 {
|
||||
text-align: left;
|
||||
}
|
152
installer/resources/themes/console/classic/ieshim.css
Normal file
@@ -0,0 +1,152 @@
|
||||
/* Welcome to the wonderful world of kludgey IE fixes */
|
||||
|
||||
.wideload {
|
||||
overflow: auto;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.formaction {
|
||||
text-align: left !important;
|
||||
margin: -10px 0 10px 0;
|
||||
}
|
||||
|
||||
div.configure {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
div.configure p, div.configure table {
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
div.main ul {
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
div.configure textarea {
|
||||
width: 450px !important;
|
||||
}
|
||||
|
||||
div.configure input {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
div.configure table {
|
||||
width: 550px !important;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h1 {
|
||||
padding: 15px 10px 16px -10px !important;
|
||||
margin: 0 0px 0 175px !important;
|
||||
background-color: #bbf !important;
|
||||
color: #001;
|
||||
}
|
||||
|
||||
h2 {
|
||||
padding-top: 0;
|
||||
text-align: left !important;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin-top: 10px;
|
||||
text-align: left !important
|
||||
}
|
||||
|
||||
div.confignav {
|
||||
padding: 15px 0 15px 0;
|
||||
border-left: 0px;
|
||||
margin-left: -15px;
|
||||
border-top: 5px solid #bbf;
|
||||
margin-bottom: 10px !important;
|
||||
}
|
||||
|
||||
div.messages {
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
margin: -10px -15px 0px -15px;
|
||||
}
|
||||
|
||||
div.main, div.news {
|
||||
margin: -5px 0px 10px 185px;
|
||||
border: 5px solid #bbf;
|
||||
}
|
||||
|
||||
div.main hr, div.news hr {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
div.main {
|
||||
border-top: 5px solid #bbf;
|
||||
}
|
||||
|
||||
div.news {
|
||||
border-left: 5px solid #bbf;
|
||||
margin: -5px 0px 0 185px;
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
|
||||
div.news hr {
|
||||
color: #bbf;
|
||||
background: #bbf;
|
||||
height: 3px;
|
||||
border: 0px;
|
||||
margin: 0 -10px 0 -13px !important;
|
||||
}
|
||||
|
||||
div.routersummary {
|
||||
color: #001;
|
||||
padding-left: 0px;
|
||||
border-left: 5px solid #bbf;
|
||||
}
|
||||
|
||||
div.routersummary submit {
|
||||
padding: 0;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
div.news li {
|
||||
padding-top: 0px 0px !important;
|
||||
margin-bottom: -23px !important;
|
||||
}
|
||||
|
||||
div.logo {
|
||||
}
|
||||
|
||||
div.warning {
|
||||
padding: 0px 20px 20px 80px;
|
||||
margin-top: -20px;
|
||||
margin-left: -10px !important;
|
||||
}
|
||||
|
||||
.langbox {
|
||||
margin: 22px -20px 0px 5px;
|
||||
}
|
||||
|
||||
td {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
padding-left: 3px;
|
||||
padding-right: 1px;
|
||||
}
|
||||
|
||||
div.configure hr{
|
||||
margin: 10px 0 15px 0;
|
||||
}
|
||||
|
||||
input {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.graphspanel img {
|
||||
border: 1px solid #99f;
|
||||
margin: 6px 0 !important;
|
||||
background: #ddf;
|
||||
-moz-box-shadow: inset 0px 0px 1px 1px #99f;
|
||||
}
|
||||
|
||||
div.graphspanel hr {
|
||||
margin: 20px 0;
|
||||
}
|
@@ -65,7 +65,7 @@ div.toolbar a:visited {
|
||||
}
|
||||
|
||||
div.toolbar a:hover, button:hover{
|
||||
border: 1px solid #eeeeff;
|
||||
border: 1px solid #f60;
|
||||
background: #003;
|
||||
color: #f60;
|
||||
}
|
||||
@@ -89,7 +89,7 @@ div.routersummary {
|
||||
width: 175px;
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
border: 1px solid #9999ff;
|
||||
border: 1px solid #99f;
|
||||
background: #003;
|
||||
background: url(images/darkbluebg.png);
|
||||
color: #eef;
|
||||
@@ -102,6 +102,28 @@ div.routersummary {
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #eef;
|
||||
}
|
||||
|
||||
div.routersummary input[type=text] {
|
||||
text-align: right !important;
|
||||
-moz-box-shadow: inset 1px 1px 1px 0px #000;
|
||||
}
|
||||
|
||||
div.routersummary hr {
|
||||
color: #99f;
|
||||
background: #99f;
|
||||
height: 1px;
|
||||
border-bottom: 1px outset #bbf;
|
||||
margin: 5px -10px 4px -10px;
|
||||
}
|
||||
|
||||
div.routersummary hr {
|
||||
color: #bbf;
|
||||
background: #bbf;
|
||||
height: 2px;
|
||||
border-bottom: 1px outset #bbf;
|
||||
margin: 8px -10px 7px -10px;
|
||||
-moz-box-shadow: inset 0px -4px 2px 1px #001;
|
||||
}
|
||||
|
||||
div.warning {
|
||||
margin: 5px 20px 10px 240px;
|
||||
padding: 0px 25px 20px 75px;
|
||||
@@ -254,14 +276,25 @@ table {
|
||||
background: #003;
|
||||
}
|
||||
|
||||
table hr {
|
||||
padding: 0px 0;
|
||||
color: #99f;
|
||||
background: #99f;
|
||||
border: 0px solid #99f;
|
||||
margin: 0px 0px;
|
||||
height: 1px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
th {
|
||||
padding: 6px 3px;
|
||||
padding: 6px 2px;
|
||||
color: #eef;
|
||||
text-align: center;
|
||||
font-size: 8pt;
|
||||
font-size: 9pt;
|
||||
background: #004 url('images/tabletitledark.png') repeat-x;
|
||||
border-top: 1px solid #99f;
|
||||
border-bottom: 1px solid #99f;
|
||||
border-bottom: 1px solid #99f !important;
|
||||
line-height: 110%;
|
||||
}
|
||||
|
||||
tr {
|
||||
@@ -285,7 +318,7 @@ tr:last-child {
|
||||
}
|
||||
*/
|
||||
td {
|
||||
padding: 6px 4px;
|
||||
padding: 6px 3px;
|
||||
color: #eef;
|
||||
vertical-align: middle;
|
||||
border-top: 1px inset #006;
|
||||
@@ -391,7 +424,7 @@ h2 {
|
||||
color: #fff;
|
||||
text-shadow: 0px 0px 1px rgba(255, 255, 255, 0.5);
|
||||
letter-spacing: 0.05em;
|
||||
background: #003 url('images/darkbluebg.png');
|
||||
background: #003 url('images/titletile.png');
|
||||
padding: 5px 10px 8px 10px;
|
||||
wordwrap: none;
|
||||
border: 1px solid #99f;
|
||||
@@ -434,8 +467,9 @@ h4 {
|
||||
font-size: 11pt;
|
||||
}
|
||||
|
||||
button {
|
||||
border: 1px outset #ddddc0;
|
||||
button, button:visited {
|
||||
font: bold 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
border: 1px outset #77f;
|
||||
padding: 1px 3px;
|
||||
background: #bbf;
|
||||
text-decoration: none;
|
||||
@@ -448,12 +482,23 @@ button {
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
min-width: 76px;
|
||||
-moz-box-shadow: inset 0px 1px 1px 0px #55f;
|
||||
background: #003;
|
||||
color: #99f;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
border: 1px solid #f60;
|
||||
-moz-box-shadow: inset 0px 1px 1px 0px #eef;
|
||||
background: #001;
|
||||
color: #f60;
|
||||
}
|
||||
|
||||
button:active {
|
||||
border: 1px inset #f60;
|
||||
background: #f60;
|
||||
color: #fff;
|
||||
-moz-box-shadow: inset 0px 0px 0px 0px #f60;
|
||||
}
|
||||
|
||||
.underline {
|
||||
@@ -486,37 +531,70 @@ sidebarlogo {
|
||||
}
|
||||
|
||||
input {
|
||||
background: #bbf;
|
||||
color: #002;
|
||||
border: 1px outset #55f;
|
||||
-moz-box-shadow: inset 0px 1px 1px 0px #55f;
|
||||
background: #003;
|
||||
color: #99f;
|
||||
margin: 5px;
|
||||
font: bold 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
border: 1px solid #99f;
|
||||
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
padding: 1px 2px;
|
||||
text-decoration: none;
|
||||
min-width: 110px;
|
||||
opacity: 0.8;
|
||||
border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
}
|
||||
|
||||
input:hover {
|
||||
background: #eef;
|
||||
color: #001;
|
||||
background: #001;
|
||||
color: #f60;
|
||||
border: 1px solid #f60;
|
||||
-moz-box-shadow: inset 0px 1px 1px 0px #eef;
|
||||
}
|
||||
|
||||
input:active {
|
||||
background: #002;
|
||||
color: #f30;
|
||||
border: 1px solid #f30;
|
||||
}
|
||||
|
||||
input:active {
|
||||
border: 1px inset #f60;
|
||||
background: #f60;
|
||||
color: #fff;
|
||||
border: 1px solid #f60;
|
||||
}
|
||||
|
||||
input[type=text] {
|
||||
background: #002;
|
||||
color: #eef;
|
||||
margin: 5px 10px;
|
||||
padding: 4px 2px;
|
||||
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
border: 1px solid #bbf;
|
||||
text-decoration: none;
|
||||
border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
-moz-box-shadow: inset 1px 1px 1px 0px #000;
|
||||
}
|
||||
|
||||
input[type=text]:active, input[type=text]:hover {
|
||||
background: #001;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
select {
|
||||
background: #002;
|
||||
color: #eef;
|
||||
margin: 5px;
|
||||
border: 1px solid #99f;
|
||||
border-radius: 0;
|
||||
-moz-border-radius: 0;
|
||||
-khtml-border-radius: 0;
|
||||
margin: 5px 10px;
|
||||
border: 1px solid #bbf;
|
||||
border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
min-width: 110px;
|
||||
font: 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
padding: 2px;
|
||||
@@ -526,13 +604,13 @@ textarea {
|
||||
background: #001;
|
||||
color: #eef;
|
||||
padding: 5px;
|
||||
margin: 15px 15px 5px 0px;
|
||||
margin: 10px;
|
||||
border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
|
||||
min-height: 100px;
|
||||
min-width: 100%;
|
||||
min-width: 97%;
|
||||
text-align: left;
|
||||
border: 1px solid #99f;
|
||||
}
|
||||
@@ -596,4 +674,49 @@ form {}
|
||||
|
||||
.mediumtags {
|
||||
font-size: 9pt;
|
||||
}
|
||||
|
||||
.optbox {
|
||||
min-width: 16px !important;
|
||||
max-width: 16px !important;
|
||||
width: 16px !important;
|
||||
min-height: 16px;
|
||||
max-height: 16px;
|
||||
height: 16px;
|
||||
opacity: 1.0;
|
||||
border: 0;
|
||||
margin: 5px 5px 5px 10px;
|
||||
padding: 2px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.optbox:hover {
|
||||
min-width: 16px !important;
|
||||
max-width: 16px !important;
|
||||
width: 16px !important;
|
||||
min-height: 16px;
|
||||
max-height: 16px;
|
||||
height: 16px;
|
||||
opacity: 1.0;
|
||||
border: 0;
|
||||
margin: 5px 5px 5px 10px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
.cells {
|
||||
border: 1px inset #005;
|
||||
border-left: 1px outset #002;
|
||||
}
|
||||
|
||||
.tablefooter tr, .tablefooter td {
|
||||
background: #004 url('images/tabletitledark.png') repeat-x !important;
|
||||
border-top: 1px solid #99f;
|
||||
border-bottom: 1px solid #99f !important;
|
||||
font-size: 7pt;
|
||||
line-height: 110%;
|
||||
}
|
||||
|
||||
.formaction {
|
||||
text-align: right;
|
||||
}
|
BIN
installer/resources/themes/console/dark/images/titletile.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
installer/resources/themes/console/images/errortriangle.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 38 KiB |
@@ -19,7 +19,7 @@ img {
|
||||
|
||||
pre {
|
||||
width: 98%;
|
||||
overflow-x: scroll;
|
||||
overflow: auto;
|
||||
text-align: left;
|
||||
font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
|
||||
color: #333;
|
||||
@@ -105,6 +105,19 @@ div.routersummary {
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
}
|
||||
|
||||
div.routersummary input[type=text] {
|
||||
text-align: right !important;
|
||||
}
|
||||
|
||||
div.routersummary hr {
|
||||
color: #eef;
|
||||
background: #eef;
|
||||
height: 2px;
|
||||
border-bottom: 1px solid #eef;
|
||||
margin: 8px -10px 7px -10px;
|
||||
-moz-box-shadow: inset 0px 1px 1px 1px #001;
|
||||
}
|
||||
|
||||
div.warning {
|
||||
margin: 5px 20px 10px 240px;
|
||||
padding: 0px 25px 20px 75px;
|
||||
@@ -130,7 +143,6 @@ div.main {
|
||||
text-align: left;
|
||||
color: #001;
|
||||
width: auto;
|
||||
/* overflow-x: scroll; */
|
||||
}
|
||||
|
||||
div.main hr, hr {
|
||||
@@ -227,6 +239,7 @@ div.configure {
|
||||
border-radius: 4px;
|
||||
border: 1px solid #000022;
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
min-width: 400px;
|
||||
}
|
||||
|
||||
div.graphspanel {
|
||||
@@ -238,9 +251,9 @@ div.graphspanel {
|
||||
border-radius: 4px;
|
||||
border: 1px solid #000022;
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
|
||||
div.graphspanel img {
|
||||
border: 1px solid #003;
|
||||
padding: 2px;
|
||||
@@ -248,7 +261,7 @@ div.graphspanel img {
|
||||
text-align: center !important;
|
||||
background: #001;
|
||||
-moz-box-shadow: inset 0px 0px 1px 1px #99f;
|
||||
opacity: 0.9;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
div.graphspanel img:hover {
|
||||
@@ -261,6 +274,10 @@ div.graphspanel img:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
div.graphspanel form {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
div.messages {
|
||||
padding: 10px;
|
||||
margin: 10px 0 20px 0;
|
||||
@@ -299,6 +316,17 @@ table {
|
||||
cell-padding: 1px;
|
||||
font-size: 7pt;
|
||||
background: #b4c8ff url('images/tabletitlelight.png') repeat-x;
|
||||
font: 7pt/130% "Lucida Sans Unicode", Verdana, Bitstream Vera Sans", Tahoma, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
table hr {
|
||||
padding: 0px 0;
|
||||
color: #99f;
|
||||
background: #99f;
|
||||
border: 0px solid #99f;
|
||||
margin: 0px 0px;
|
||||
height: 1px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
th {
|
||||
@@ -307,8 +335,9 @@ th {
|
||||
background: #b4c8ff url('images/tabletitlelight.png') repeat-x;
|
||||
text-align: center;
|
||||
font-size: 9pt;
|
||||
border-bottom: 1px solid #001;
|
||||
border-top: 1px solid #001;
|
||||
line-height: 110%;
|
||||
border-bottom: 1px solid #001 !important;
|
||||
border-top: 1px solid #001 !important;
|
||||
}
|
||||
|
||||
tr {
|
||||
@@ -331,7 +360,7 @@ tr:last-child {
|
||||
}
|
||||
*/
|
||||
td {
|
||||
padding: 5px;
|
||||
padding: 5px 3px;
|
||||
color: #000;
|
||||
vertical-align: middle;
|
||||
border-top: 1px inset #001;
|
||||
@@ -432,7 +461,7 @@ h2 {
|
||||
font-size: 12pt;
|
||||
color: #001;
|
||||
letter-spacing: 0.05em;
|
||||
background: #ddf url('images/lightbluetile.png');
|
||||
background: #ddf url('images/titletile.png');
|
||||
text-shadow: 0px 0px 1px rgba(0, 0, 64, 0.5);
|
||||
padding: 7px 10px;
|
||||
wordwrap: none;
|
||||
@@ -473,10 +502,11 @@ h4 {
|
||||
font-size: 11pt;
|
||||
}
|
||||
|
||||
button {
|
||||
border: 1px outset #ddddc0;
|
||||
button, button:visited {
|
||||
font: bold 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
border: 1px outset #999;
|
||||
padding: 1px 3px;
|
||||
background: #bbf !important;
|
||||
background: #ddf !important;
|
||||
text-decoration: none;
|
||||
border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
@@ -486,18 +516,22 @@ button {
|
||||
margin: 0 1px;
|
||||
text-align: center;
|
||||
min-width: 80px;
|
||||
-moz-box-shadow: inset 0px 2px 8px 0px #fff;
|
||||
color: #006;
|
||||
}
|
||||
|
||||
button:hover{
|
||||
border: 1px solid #f60;
|
||||
background: #f60 !important;
|
||||
color: #fff;
|
||||
-moz-box-shadow: inset 0px 0px 0px 1px #fff;
|
||||
}
|
||||
|
||||
button:active{
|
||||
border: 1px solid #f60;
|
||||
background: #001 !important;
|
||||
color: #f60;
|
||||
-moz-box-shadow: inset 0px 0px 0px 1px #f60;
|
||||
}
|
||||
|
||||
.underline {
|
||||
@@ -526,14 +560,33 @@ input {
|
||||
border: 1px solid #001;
|
||||
text-decoration: none;
|
||||
min-width: 110px;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
input, input:visited {
|
||||
border: 1px outset #999;
|
||||
background: #ddf;
|
||||
color: #001;
|
||||
margin: 5px;
|
||||
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
padding: 1px 2px;
|
||||
text-decoration: none;
|
||||
min-width: 110px;
|
||||
border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
-moz-box-shadow: inset 0px 2px 8px 0px #fff;
|
||||
color: #006;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
|
||||
input:hover {
|
||||
background: #f60;
|
||||
color: #fff;
|
||||
border: 1px solid #f60;
|
||||
opacity: 0.9;
|
||||
opacity: 1.0;
|
||||
-moz-box-shadow: inset 0px 0px 0px 1px #fff;
|
||||
|
||||
}
|
||||
|
||||
input:active {
|
||||
@@ -541,6 +594,17 @@ input:active {
|
||||
color: #f60;
|
||||
border: 1px solid #f60;
|
||||
opacity: 1.0;
|
||||
-moz-box-shadow: inset 0px 0px 0px 1px #f60;
|
||||
}
|
||||
|
||||
input[type=text] {
|
||||
background: #eef;
|
||||
color: #001;
|
||||
margin: 5px 10px 5px 10px;
|
||||
padding: 4px 2px;
|
||||
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
border: 1px solid #001;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
submit {
|
||||
@@ -566,11 +630,15 @@ select {
|
||||
border: 1px solid #001;
|
||||
min-width: 110px;
|
||||
font: 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
text-align: left !important;
|
||||
}
|
||||
|
||||
textarea {
|
||||
padding: 5px;
|
||||
margin: 15px 15px 5px 0px;
|
||||
margin: 5px 15px 5px 10px;
|
||||
background: #eef;
|
||||
color: #003;
|
||||
border-radius: 4px;
|
||||
@@ -578,7 +646,7 @@ textarea {
|
||||
-khtml-border-radius: 4px;
|
||||
font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
|
||||
min-height: 100px;
|
||||
min-width: 100%;
|
||||
min-width: 97%;
|
||||
border: 1px solid #001;
|
||||
}
|
||||
|
||||
@@ -622,7 +690,7 @@ form {}
|
||||
-khtml-border-radius: 4px;
|
||||
text-align: justify;
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
overflow-x: scroll;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
div.joblog:li {
|
||||
@@ -641,4 +709,53 @@ form {}
|
||||
font-size: 8pt;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.optbox {
|
||||
min-width: 16px !important;
|
||||
max-width: 16px !important;
|
||||
width: 16px !important;
|
||||
min-height: 16px;
|
||||
max-height: 16px;
|
||||
height: 16px;
|
||||
opacity: 1.0;
|
||||
border: 0;
|
||||
margin: 5px 5px 5px 10px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
.optbox:hover {
|
||||
min-width: 16px !important;
|
||||
max-width: 16px !important;
|
||||
width: 16px !important;
|
||||
min-height: 16px;
|
||||
max-height: 16px;
|
||||
height: 16px;
|
||||
opacity: 1.0;
|
||||
border: 0;
|
||||
margin: 5px 5px 5px 10px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
.cells {
|
||||
border-left: 1px outset #bbf;
|
||||
border-top: 1px inset #99f !important;
|
||||
border-bottom: 1px inset #99f !important;
|
||||
}
|
||||
|
||||
.tablefooter {
|
||||
background: #b4c8ff url('images/tabletitlelight.png') repeat-x;
|
||||
}
|
||||
|
||||
.tablefooter tr, .tablefooter td {
|
||||
background: #b4c8ff url('images/tabletitlelight.png') repeat-x;
|
||||
border-top: 1px solid #001;
|
||||
border-bottom: 1px solid #001 !important;
|
||||
padding: 8px 2px !important;
|
||||
font-size: 7pt;
|
||||
line-height: 110%;
|
||||
}
|
||||
|
||||
.formaction {
|
||||
text-align: right;
|
||||
}
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 3.4 KiB |
BIN
installer/resources/themes/console/light/images/titletile.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
@@ -56,18 +56,19 @@ body {
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
text-align: left;
|
||||
margin: 0 0 15px 0;
|
||||
padding: 0px;
|
||||
margin: 0 0px 10px 0px;
|
||||
padding: 0;
|
||||
border-spacing: 0px;
|
||||
-moz-border-radius: 4px 0 0 0;
|
||||
-khtml-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
border: 2px solid #930;
|
||||
text-align: center;
|
||||
overflow-x: scroll;
|
||||
background: #ddf url('../console/images/orangetile.png');
|
||||
text-align: left;
|
||||
overflow: auto;
|
||||
background: #f40 url('../console/images/orangetile.png');
|
||||
color: #531;
|
||||
height: 64px;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
pre {
|
||||
@@ -85,6 +86,7 @@ table {
|
||||
padding: 0px;
|
||||
border-width: 0px;
|
||||
border-spacing: 0px;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
th {
|
||||
@@ -92,8 +94,9 @@ th {
|
||||
font-size: 8pt;
|
||||
border-top: 1px outset #001;
|
||||
border-bottom: 1px inset #001;
|
||||
background: #f91 url('/themes/console/images/tabletitleorange.png') repeat-x;
|
||||
text-align: left;
|
||||
background: #f60 url('/themes/console/images/tabletitleorange.png') repeat-x;
|
||||
text-align: right;
|
||||
whitespace: nowrap;
|
||||
}
|
||||
|
||||
.SnarkTorrents {
|
||||
@@ -104,7 +107,7 @@ th {
|
||||
|
||||
td {
|
||||
padding: 5px;
|
||||
text-align: left;
|
||||
text-align: right;
|
||||
}
|
||||
.snarkTorrentEven {
|
||||
background-color: #fb1;
|
||||
@@ -134,8 +137,8 @@ td {
|
||||
.page {
|
||||
background-color: #fff;
|
||||
color:#310;
|
||||
min-width: 700px !important;
|
||||
max-width: 800px !important;
|
||||
min-width: 800px !important;
|
||||
/* max-width: 800px !important; */
|
||||
margin: 20px;
|
||||
padding: 10px 20px 5px 20px;
|
||||
-moz-border-radius: 4px;
|
||||
@@ -173,7 +176,7 @@ hr {
|
||||
}
|
||||
|
||||
a:link{
|
||||
color: #830;
|
||||
color: #930;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
word-wrap: break-word;
|
||||
@@ -186,7 +189,7 @@ a:visited{
|
||||
}
|
||||
|
||||
a:hover{
|
||||
color: #f60;
|
||||
color: #900;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
@@ -35,7 +35,7 @@
|
||||
<p></p>
|
||||
There are many more eepsites - just follow the links from the ones you see,
|
||||
bookmark your favorites, and visit them often!
|
||||
</ul>
|
||||
</ul></ul>
|
||||
<br />
|
||||
<br />
|
||||
<ul>
|
||||
|
@@ -767,10 +767,10 @@ public class Blocklist {
|
||||
out.write("</table>");
|
||||
}
|
||||
if (_blocklistSize > 0) {
|
||||
out.write("<table><tr><td align=center colspan=2><b>IPs from Blocklist File</b></td></tr><tr><td align=center><b>From</b></td><td align=center><b>To</b></td></tr>");
|
||||
out.write("<table><tr><th align=center colspan=2><b>IPs from Blocklist File</b></th></tr><tr><td align=center width=50%><b>From:</b></td><td align=center width=50%><b>To:</b></td></tr>");
|
||||
for (int i = 0; i < _blocklistSize; i++) {
|
||||
int from = getFrom(_blocklist[i]);
|
||||
out.write("<tr><td align=right>"); out.write(toStr(from)); out.write("</td><td align=right>");
|
||||
out.write("<tr><td align=center width=50%>"); out.write(toStr(from)); out.write("</td><td align=center width=50%>");
|
||||
int to = getTo(_blocklist[i]);
|
||||
if (to != from) {
|
||||
out.write(toStr(to)); out.write("</td></tr>\n");
|
||||
@@ -779,7 +779,7 @@ public class Blocklist {
|
||||
}
|
||||
out.write("</table>");
|
||||
} else {
|
||||
out.write("<br>No blocklist file entries");
|
||||
out.write("<br><i>No blocklist file entries.</i>");
|
||||
}
|
||||
out.flush();
|
||||
}
|
||||
|
@@ -607,7 +607,7 @@ public class JobQueue {
|
||||
out.flush();
|
||||
|
||||
StringBuilder buf = new StringBuilder(32*1024);
|
||||
buf.append("<b><div class=\"joblog\"><h3>I2P JobQueue</h3># runners: ").append(numRunners).append(" [states=");
|
||||
buf.append("<b><div class=\"joblog\"><h3>I2P JobQueue</h3><div class=\"wideload\"># runners: ").append(numRunners).append(" [states=");
|
||||
if (states != null)
|
||||
for (int i = 0; i < states.length; i++)
|
||||
buf.append(states[i]).append(" ");
|
||||
@@ -667,7 +667,7 @@ public class JobQueue {
|
||||
|
||||
/** render the HTML for the job stats */
|
||||
private void getJobStats(StringBuilder buf) {
|
||||
buf.append("<table border=\"1\">\n");
|
||||
buf.append("<table>\n");
|
||||
buf.append("<tr><th>Job</th><th>Runs</th>");
|
||||
buf.append("<th>Time</th><th><i>Avg</i></th><th><i>Max</i></th><th><i>Min</i></th>");
|
||||
buf.append("<th>Pending</th><th><i>Avg</i></th><th><i>Max</i></th><th><i>Min</i></th></tr>\n");
|
||||
@@ -734,6 +734,6 @@ public class JobQueue {
|
||||
buf.append("<td><i>").append(minPendingTime).append("</i></td>");
|
||||
buf.append("</tr>\n");
|
||||
|
||||
buf.append("</table>\n");
|
||||
buf.append("</table></div>\n");
|
||||
}
|
||||
}
|
||||
|
@@ -67,7 +67,7 @@ public class PersistentKeyRing extends KeyRing {
|
||||
@Override
|
||||
public void renderStatusHTML(Writer out) throws IOException {
|
||||
StringBuilder buf = new StringBuilder(1024);
|
||||
buf.append("\n<table border=\"1\"><tr><th align=\"left\">Destination Hash<th align=\"left\">Name or Dest.<th align=\"left\">Session Key</tr>");
|
||||
buf.append("\n<table><tr><th align=\"left\">Destination Hash<th align=\"left\">Name or Dest.<th align=\"left\">Session Key</tr>");
|
||||
for (Entry<Hash, SessionKey> e : entrySet()) {
|
||||
buf.append("\n<tr><td>");
|
||||
Hash h = e.getKey();
|
||||
|
@@ -759,7 +759,7 @@ public class Router {
|
||||
buf.setLength(0);
|
||||
buf.append("\n<hr /><a name=\"logs\"> </a>\n");
|
||||
List msgs = _context.logManager().getBuffer().getMostRecentMessages();
|
||||
buf.append("\n<h2>Most recent console messages:</h2><table border=\"1\">\n");
|
||||
buf.append("\n<h2>Most recent console messages:</h2><table>\n");
|
||||
for (Iterator iter = msgs.iterator(); iter.hasNext(); ) {
|
||||
String msg = (String)iter.next();
|
||||
buf.append("<tr><td align=\"left\"><pre>");
|
||||
|
@@ -18,7 +18,7 @@ public class RouterVersion {
|
||||
/** deprecated */
|
||||
public final static String ID = "Monotone";
|
||||
public final static String VERSION = CoreVersion.VERSION;
|
||||
public final static long BUILD = 0;
|
||||
public final static long BUILD = 07;
|
||||
/** for example "-test" */
|
||||
public final static String EXTRA = "";
|
||||
public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA;
|
||||
|
@@ -218,7 +218,11 @@ class ProfileOrganizerRenderer {
|
||||
}
|
||||
buf.append("</table>");
|
||||
|
||||
buf.append("<p><i>Definitions:<ul>");
|
||||
buf.append("<h3>Thresholds:</h3>");
|
||||
buf.append("<b>Speed:</b> ").append(num(_organizer.getSpeedThreshold())).append(" (").append(fast).append(" fast peers)<br />");
|
||||
buf.append("<b>Capacity:</b> ").append(num(_organizer.getCapacityThreshold())).append(" (").append(reliable).append(" high capacity peers)<br />");
|
||||
buf.append("<b>Integration:</b> ").append(num(_organizer.getIntegrationThreshold())).append(" (").append(integrated).append(" well integrated peers)");
|
||||
buf.append("<h3>Definitions:</h3><ul>");
|
||||
buf.append("<li><b>groups</b>: as determined by the profile organizer</li>");
|
||||
buf.append("<li><b>caps</b>: capabilities in the netDb, not used to determine profiles</li>");
|
||||
buf.append("<li><b>speed</b>: peak throughput (bytes per second) over a 1 minute period that the peer has sustained in a single tunnel</li>");
|
||||
@@ -226,10 +230,6 @@ class ProfileOrganizerRenderer {
|
||||
buf.append("<li><b>integration</b>: how many new peers have they told us about lately?</li>");
|
||||
buf.append("<li><b>failing?</b>: is the peer currently swamped (and if possible we should avoid nagging them)?</li>");
|
||||
buf.append("</ul></i>");
|
||||
buf.append("<p><b>Thresholds:</b><br />");
|
||||
buf.append("<b>Speed:</b> ").append(num(_organizer.getSpeedThreshold())).append(" (").append(fast).append(" fast peers)<br />");
|
||||
buf.append("<b>Capacity:</b> ").append(num(_organizer.getCapacityThreshold())).append(" (").append(reliable).append(" high capacity peers)<br />");
|
||||
buf.append("<b>Integration:</b> ").append(num(_organizer.getIntegrationThreshold())).append(" (").append(integrated).append(" well integrated peers)<br />");
|
||||
out.write(buf.toString());
|
||||
out.flush();
|
||||
}
|
||||
|
@@ -619,8 +619,8 @@ public class FIFOBandwidthLimiter {
|
||||
public void renderStatusHTML(Writer out) throws IOException {
|
||||
long now = now();
|
||||
StringBuilder buf = new StringBuilder(4096);
|
||||
buf.append("<p><b id=\"bwlim\">Limiter Status:</b><br />").append(getStatus().toString()).append("</p>\n");
|
||||
buf.append("<p><b>Pending bandwidth requests:</b><ul>");
|
||||
buf.append("<h3><b id=\"bwlim\">Limiter Status:</b></h3>").append(getStatus().toString()).append("\n");
|
||||
buf.append("<h3>Pending bandwidth requests:</h3><ul>");
|
||||
buf.append("<li>Inbound requests: <ol>");
|
||||
synchronized (_pendingInboundRequests) {
|
||||
for (int i = 0; i < _pendingInboundRequests.size(); i++) {
|
||||
@@ -643,7 +643,7 @@ public class FIFOBandwidthLimiter {
|
||||
buf.append("ms ago</li>\n");
|
||||
}
|
||||
}
|
||||
buf.append("</ol></li></ul></p>\n");
|
||||
buf.append("</ol></li></ul></p><hr>\n");
|
||||
out.write(buf.toString());
|
||||
out.flush();
|
||||
}
|
||||
|
@@ -492,7 +492,7 @@ public class TransportManager implements TransportEventListener {
|
||||
t.renderStatusHTML(out, urlBase, sortFlags);
|
||||
}
|
||||
StringBuilder buf = new StringBuilder(4*1024);
|
||||
buf.append("<p><b>Router Transport Addresses:</b><br /><pre>\n");
|
||||
buf.append("<h3>Router Transport Addresses:</h3><pre>\n");
|
||||
for (int i = 0; i < _transports.size(); i++) {
|
||||
Transport t = (Transport)_transports.get(i);
|
||||
if (t.getCurrentAddress() != null)
|
||||
|
@@ -639,19 +639,19 @@ public class NTCPTransport extends TransportImpl {
|
||||
long totalRecv = 0;
|
||||
|
||||
StringBuilder buf = new StringBuilder(512);
|
||||
buf.append("<p><b id=\"ntcpcon\">NTCP connections: ").append(peers.size());
|
||||
buf.append(" limit: ").append(getMaxConnections());
|
||||
buf.append(" timeout: ").append(DataHelper.formatDuration(_pumper.getIdleTimeout()));
|
||||
buf.append("</b><br />\n");
|
||||
buf.append("<table>\n");
|
||||
buf.append("<p><b id=\"ntcpcon\"><h3>NTCP connections: ").append(peers.size());
|
||||
buf.append(". Limit: ").append(getMaxConnections());
|
||||
buf.append(". Timeout: ").append(DataHelper.formatDuration(_pumper.getIdleTimeout()));
|
||||
buf.append(".</b></h3>\n");
|
||||
buf.append("<div class=\"wideload\"><table>\n");
|
||||
buf.append("<tr><th><a href=\"#def.peer\">Peer</a></th>");
|
||||
buf.append("<th>Dir</th>");
|
||||
buf.append("<th align=\"right\"><a href=\"#def.idle\">Idle</a></th>");
|
||||
buf.append("<th align=\"right\"><a href=\"#def.rate\">In/Out</a></th>");
|
||||
buf.append("<th align=\"right\"><a href=\"#def.up\">Up</a></th>");
|
||||
buf.append("<th align=\"right\"><a href=\"#def.skew\">Skew</a></th>");
|
||||
buf.append("<th align=\"right\"><a href=\"#def.send\">Send</a></th>");
|
||||
buf.append("<th align=\"right\"><a href=\"#def.recv\">Recv</a></th>");
|
||||
buf.append("<th align=\"right\"><a href=\"#def.send\">TX</a></th>");
|
||||
buf.append("<th align=\"right\"><a href=\"#def.recv\">RX</a></th>");
|
||||
buf.append("<th>Out queue</th>");
|
||||
buf.append("<th>Backlogged?</th>");
|
||||
buf.append("<th>Reading?</th>");
|
||||
@@ -660,20 +660,20 @@ public class NTCPTransport extends TransportImpl {
|
||||
buf.setLength(0);
|
||||
for (Iterator iter = peers.iterator(); iter.hasNext(); ) {
|
||||
NTCPConnection con = (NTCPConnection)iter.next();
|
||||
buf.append("<tr><td align=\"right\" nowrap>");
|
||||
buf.append("<tr> <td class=\"cells\" align=\"left\" nowrap>");
|
||||
buf.append(_context.commSystem().renderPeerHTML(con.getRemotePeer().calculateHash()));
|
||||
//byte[] ip = getIP(con.getRemotePeer().calculateHash());
|
||||
//if (ip != null)
|
||||
// buf.append(' ').append(_context.blocklist().toStr(ip));
|
||||
buf.append("</td><td align=\"center\"><code>");
|
||||
buf.append("</td> <td class=\"cells\" align=\"center\">");
|
||||
if (con.isInbound())
|
||||
buf.append("in");
|
||||
buf.append("<img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound\"/>");
|
||||
else
|
||||
buf.append("out");
|
||||
buf.append("</code></td><td align=\"right\"><code>");
|
||||
buf.append("<img src=\"/themes/console/images/outbound.png\" alt=\"Outbound\" title=\"Outbound\"/>");
|
||||
buf.append("</td> <td class=\"cells\" align=\"right\">");
|
||||
buf.append(con.getTimeSinceReceive()/1000);
|
||||
buf.append("s/").append(con.getTimeSinceSend()/1000);
|
||||
buf.append("s</code></td><td align=\"right\"><code>");
|
||||
buf.append("s</td> <td class=\"cells\" align=\"center\">");
|
||||
if (con.getTimeSinceReceive() < 10*1000) {
|
||||
buf.append(formatRate(con.getRecvRate()/1024));
|
||||
bpsRecv += con.getRecvRate();
|
||||
@@ -687,47 +687,47 @@ public class NTCPTransport extends TransportImpl {
|
||||
} else {
|
||||
buf.append(formatRate(0));
|
||||
}
|
||||
buf.append("KBps");
|
||||
buf.append("</code></td><td align=\"right\"><code>").append(DataHelper.formatDuration(con.getUptime()));
|
||||
buf.append("K/s");
|
||||
buf.append("</td> <td class=\"cells\" align=\"center\">").append(DataHelper.formatDuration(con.getUptime()));
|
||||
totalUptime += con.getUptime();
|
||||
offsetTotal = offsetTotal + con.getClockSkew();
|
||||
buf.append("</code></td><td align=\"right\"><code>").append(con.getClockSkew());
|
||||
buf.append("s</code></td><td align=\"right\"><code>").append(con.getMessagesSent());
|
||||
buf.append("</td> <td class=\"cells\" align=\"center\">").append(con.getClockSkew());
|
||||
buf.append("s</td> <td class=\"cells\" align=\"center\">").append(con.getMessagesSent());
|
||||
totalSend += con.getMessagesSent();
|
||||
buf.append("</code></td><td align=\"right\"><code>").append(con.getMessagesReceived());
|
||||
buf.append("</td> <td class=\"cells\" align=\"center\">").append(con.getMessagesReceived());
|
||||
totalRecv += con.getMessagesReceived();
|
||||
long outQueue = con.getOutboundQueueSize();
|
||||
if (outQueue <= 0) {
|
||||
buf.append("</code></td><td align=\"right\"><code>No messages");
|
||||
buf.append("</td> <td class=\"cells\" align=\"center\">No messages");
|
||||
} else {
|
||||
buf.append("</code></td><td align=\"right\"><code>").append(outQueue).append(" message");
|
||||
buf.append("</td> <td class=\"cells\" align=\"center\">").append(outQueue).append(" message");
|
||||
if (outQueue > 1)
|
||||
buf.append("s");
|
||||
}
|
||||
buf.append("</code></td><td align=\"center\"><code>").append(con.getConsecutiveBacklog() > 0 ? "true" : "false");
|
||||
buf.append("</td> <td class=\"cells\" align=\"center\">").append(con.getConsecutiveBacklog() > 0 ? "true" : "false");
|
||||
long readTime = con.getReadTime();
|
||||
if (readTime <= 0) {
|
||||
buf.append("</code></td><td align=\"center\"><code>No");
|
||||
buf.append("</td> <td class=\"cells\" align=\"center\">No");
|
||||
} else {
|
||||
buf.append("</code></td><td><code>For ").append(DataHelper.formatDuration(readTime));
|
||||
buf.append("</td> <td class=\"cells\">For ").append(DataHelper.formatDuration(readTime));
|
||||
}
|
||||
buf.append("</code></td></tr>\n");
|
||||
buf.append("</td></tr>\n");
|
||||
out.write(buf.toString());
|
||||
buf.setLength(0);
|
||||
}
|
||||
|
||||
if (peers.size() > 0) {
|
||||
buf.append("<tr><td colspan=\"11\"><hr /></td></tr>\n");
|
||||
buf.append("<tr><td>").append(peers.size()).append(" peers</td><td> </td><td> ");
|
||||
buf.append("</td><td align=\"right\">").append(formatRate(bpsRecv/1024)).append("/").append(formatRate(bpsSend/1024)).append("KBps");
|
||||
buf.append("</td><td align=\"right\">").append(DataHelper.formatDuration(totalUptime/peers.size()));
|
||||
buf.append("</td><td align=\"right\">").append(peers.size() > 0 ? DataHelper.formatDuration(offsetTotal*1000/peers.size()) : "0ms");
|
||||
buf.append("</td><td align=\"right\">").append(totalSend).append("</td><td align=\"right\">").append(totalRecv);
|
||||
buf.append("</td><td> </td><td> </td><td> ");
|
||||
// buf.append("<tr> <td colspan=\"11\"><hr /></td></tr>\n");
|
||||
buf.append("<tr class=\"tablefooter\"> <td align=\"center\"><b>").append(peers.size()).append(" peers</b></td> <td> </td> <td> ");
|
||||
buf.append("</td> <td align=\"center\"><b>").append(formatRate(bpsRecv/1024)).append("/").append(formatRate(bpsSend/1024)).append("K/s</b>");
|
||||
buf.append("</td> <td align=\"center\"><b>").append(DataHelper.formatDuration(totalUptime/peers.size()));
|
||||
buf.append("</b></td> <td align=\"center\"><b>").append(peers.size() > 0 ? DataHelper.formatDuration(offsetTotal*1000/peers.size()) : "0ms");
|
||||
buf.append("</b></td> <td align=\"center\"><b>").append(totalSend).append("</b></td> <td align=\"center\"><b>").append(totalRecv);
|
||||
buf.append("</b></td> <td> </td> <td> </td> <td> ");
|
||||
buf.append("</td></tr>\n");
|
||||
}
|
||||
|
||||
buf.append("</table></p>\n");
|
||||
buf.append("</table></div></p>\n");
|
||||
out.write(buf.toString());
|
||||
buf.setLength(0);
|
||||
}
|
||||
|
@@ -1763,51 +1763,51 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
|
||||
int numPeers = 0;
|
||||
|
||||
StringBuilder buf = new StringBuilder(512);
|
||||
buf.append("<p><b id=\"udpcon\">UDP connections: ").append(peers.size());
|
||||
buf.append(" limit: ").append(getMaxConnections());
|
||||
buf.append(" timeout: ").append(DataHelper.formatDuration(_expireTimeout));
|
||||
buf.append("</b><br />\n");
|
||||
buf.append("<table>\n");
|
||||
buf.append("<tr><th><a href=\"#def.peer\">Peer</a>");
|
||||
buf.append("<p><b id=\"udpcon\"><h3>UDP connections: ").append(peers.size());
|
||||
buf.append(". Limit: ").append(getMaxConnections());
|
||||
buf.append(". Timeout: ").append(DataHelper.formatDuration(_expireTimeout));
|
||||
buf.append(".</b></h3>\n");
|
||||
buf.append("<div class=\"wideload\"><table>\n");
|
||||
buf.append("<tr><th class=\"smallhead\" nowrap><a href=\"#def.peer\">Peer</a>");
|
||||
if (sortFlags != FLAG_ALPHA)
|
||||
buf.append(" <a href=\"").append(urlBase).append("?sort=0\">V</a> ");
|
||||
buf.append("</th><th><a href=\"#def.dir\">Dir/Intro</a></th><th><a href=\"#def.idle\">Idle</a>");
|
||||
buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.dir\" title=\"Direction/Introduction\">Dir</a></th><th class=\"smallhead\" nowrap><a href=\"#def.idle\">Idle</a><br>");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by idle inbound", FLAG_IDLE_IN);
|
||||
buf.append("/");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by idle outbound", FLAG_IDLE_OUT);
|
||||
buf.append("</th>");
|
||||
buf.append("<th><a href=\"#def.rate\">In/Out</a>");
|
||||
buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.rate\">In/Out</a><br>");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by inbound rate", FLAG_RATE_IN);
|
||||
buf.append("/");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by outbound rate", FLAG_RATE_OUT);
|
||||
buf.append("</th>\n");
|
||||
buf.append("<th><a href=\"#def.up\">Up</a>");
|
||||
buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.up\">Up</a><br>");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by connection uptime", FLAG_UPTIME);
|
||||
buf.append("</th><th><a href=\"#def.skew\">skew</a>");
|
||||
buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.skew\">Skew</a><br>");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by clock skew", FLAG_SKEW);
|
||||
buf.append("</th>\n");
|
||||
buf.append("<th><a href=\"#def.cwnd\">Cwnd</a>");
|
||||
buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.cwnd\">Cwnd</a><br>");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by congestion window", FLAG_CWND);
|
||||
buf.append("</th><th><a href=\"#def.ssthresh\">Ssthresh</a>");
|
||||
buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.ssthresh\">Sst</a><br>");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by slow start threshold", FLAG_SSTHRESH);
|
||||
buf.append("</th>\n");
|
||||
buf.append("<th><a href=\"#def.rtt\">Rtt</a>");
|
||||
buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.rtt\">Rtt</a><br>");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time", FLAG_RTT);
|
||||
buf.append("</th><th><a href=\"#def.dev\">Dev</a>");
|
||||
buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.dev\">Dev</a><br>");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time deviation", FLAG_DEV);
|
||||
buf.append("</th><th><a href=\"#def.rto\">Rto</a>");
|
||||
buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.rto\">Rto</a><br>");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by retransmission timeout", FLAG_RTO);
|
||||
buf.append("</th>\n");
|
||||
buf.append("<th><a href=\"#def.mtu\">Mtu</a>");
|
||||
buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.mtu\">Mtu</a><br>");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by maximum transmit unit", FLAG_MTU);
|
||||
buf.append("</th><th><a href=\"#def.send\">Send</a>");
|
||||
buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.send\">TX</a><br>");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets sent", FLAG_SEND);
|
||||
buf.append("</th><th><a href=\"#def.recv\">Recv</a>");
|
||||
buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.recv\">RX</a><br>");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received", FLAG_RECV);
|
||||
buf.append("</th>\n");
|
||||
buf.append("<th><a href=\"#def.resent\">Resent</a>");
|
||||
buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.resent\">ReTX</a><br>");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets retransmitted", FLAG_RESEND);
|
||||
buf.append("</th><th><a href=\"#def.dupRecv\">DupRecv</a>");
|
||||
buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.dupRecv\">DupRX</a><br>");
|
||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received more than once", FLAG_DUP);
|
||||
buf.append("</th>\n");
|
||||
buf.append("</tr>\n");
|
||||
@@ -1819,16 +1819,16 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
|
||||
if (now-peer.getLastReceiveTime() > 60*60*1000)
|
||||
continue; // don't include old peers
|
||||
|
||||
buf.append("<tr><td align=\"right\" nowrap>");
|
||||
buf.append("<tr> <td class=\"cells\" align=\"left\" nowrap>");
|
||||
buf.append(_context.commSystem().renderPeerHTML(peer.getRemotePeer()));
|
||||
//byte ip[] = peer.getRemoteIP();
|
||||
//if (ip != null)
|
||||
// buf.append(' ').append(_context.blocklist().toStr(ip));
|
||||
buf.append("</td><td><code>");
|
||||
buf.append("</td> <td class=\"cells\" nowrap align=\"left\">");
|
||||
if (peer.isInbound())
|
||||
buf.append("in ");
|
||||
buf.append("<img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound\"/> ");
|
||||
else
|
||||
buf.append("out ");
|
||||
buf.append("<img src=\"/themes/console/images/outbound.png\" alt=\"Outbound\" title=\"Outbound\"/> ");
|
||||
if (peer.getWeRelayToThemAs() > 0)
|
||||
buf.append("^");
|
||||
else
|
||||
@@ -1839,107 +1839,107 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
|
||||
boolean appended = false;
|
||||
if (_activeThrottle.isChoked(peer.getRemotePeer())) {
|
||||
if (!appended) buf.append("<br />");
|
||||
buf.append(" [choked]");
|
||||
buf.append(" <i>Choked</i>");
|
||||
appended = true;
|
||||
}
|
||||
if (peer.getConsecutiveFailedSends() > 0) {
|
||||
if (!appended) buf.append("<br />");
|
||||
buf.append(" [").append(peer.getConsecutiveFailedSends()).append(" failures]");
|
||||
buf.append(" <i>").append(peer.getConsecutiveFailedSends()).append(" fail(s)</i>");
|
||||
appended = true;
|
||||
}
|
||||
if (_context.shitlist().isShitlisted(peer.getRemotePeer(), STYLE)) {
|
||||
if (!appended) buf.append("<br />");
|
||||
buf.append(" [shitlisted]");
|
||||
buf.append(" <i>Shitlist</i>");
|
||||
appended = true;
|
||||
}
|
||||
//byte[] ip = getIP(peer.getRemotePeer());
|
||||
//if (ip != null)
|
||||
// buf.append(' ').append(_context.blocklist().toStr(ip));
|
||||
buf.append("</code></td>");
|
||||
buf.append("</td>");
|
||||
|
||||
long idleIn = (now-peer.getLastReceiveTime())/1000;
|
||||
long idleOut = (now-peer.getLastSendTime())/1000;
|
||||
if (idleIn < 0) idleIn = 0;
|
||||
if (idleOut < 0) idleOut = 0;
|
||||
|
||||
buf.append("<td align=\"right\" ><code>");
|
||||
buf.append(" <td class=\"cells\" align=\"right\" >");
|
||||
buf.append(idleIn);
|
||||
buf.append("s/");
|
||||
buf.append(idleOut);
|
||||
buf.append("s</code></td>");
|
||||
buf.append("s</td>");
|
||||
|
||||
int recvBps = (idleIn > 2 ? 0 : peer.getReceiveBps());
|
||||
int sendBps = (idleOut > 2 ? 0 : peer.getSendBps());
|
||||
|
||||
buf.append("<td align=\"right\" ><code>");
|
||||
buf.append(" <td class=\"cells\" align=\"right\" nowrap>");
|
||||
buf.append(formatKBps(recvBps));
|
||||
buf.append("/");
|
||||
buf.append(formatKBps(sendBps));
|
||||
buf.append("KBps ");
|
||||
buf.append("K/s ");
|
||||
//buf.append(formatKBps(peer.getReceiveACKBps()));
|
||||
//buf.append("KBps/");
|
||||
//buf.append("K/s/");
|
||||
//buf.append(formatKBps(peer.getSendACKBps()));
|
||||
//buf.append("KBps ");
|
||||
buf.append("</code></td>");
|
||||
//buf.append("K/s ");
|
||||
buf.append("</td>");
|
||||
|
||||
long uptime = now - peer.getKeyEstablishedTime();
|
||||
|
||||
buf.append("<td align=\"right\" ><code>");
|
||||
buf.append(" <td class=\"cells\" align=\"center\" >");
|
||||
buf.append(DataHelper.formatDuration(uptime));
|
||||
buf.append("</code></td>");
|
||||
buf.append("</td>");
|
||||
|
||||
buf.append("<td align=\"right\" ><code>");
|
||||
buf.append(" <td class=\"cells\" align=\"center\" >");
|
||||
buf.append(peer.getClockSkew());
|
||||
buf.append("s</code></td>");
|
||||
buf.append("s</td>");
|
||||
offsetTotal = offsetTotal + peer.getClockSkew();
|
||||
|
||||
long sendWindow = peer.getSendWindowBytes();
|
||||
|
||||
buf.append("<td align=\"right\" ><code>");
|
||||
buf.append(" <td class=\"cells\" align=\"right\" >");
|
||||
buf.append(sendWindow/1024);
|
||||
buf.append("K");
|
||||
buf.append("/").append(peer.getConcurrentSends());
|
||||
buf.append("/").append(peer.getConcurrentSendWindow());
|
||||
buf.append("/").append(peer.getConsecutiveSendRejections());
|
||||
buf.append("</code></td>");
|
||||
buf.append("</td>");
|
||||
|
||||
buf.append("<td align=\"right\" ><code>");
|
||||
buf.append(" <td class=\"cells\" align=\"center\" >");
|
||||
buf.append(peer.getSlowStartThreshold()/1024);
|
||||
buf.append("K</code></td>");
|
||||
buf.append("K</td>");
|
||||
|
||||
int rtt = peer.getRTT();
|
||||
int rto = peer.getRTO();
|
||||
|
||||
buf.append("<td align=\"right\" ><code>");
|
||||
buf.append(" <td class=\"cells\" align=\"right\" >");
|
||||
buf.append(rtt);
|
||||
buf.append("</code></td>");
|
||||
buf.append("</td>");
|
||||
|
||||
buf.append("<td align=\"right\" ><code>");
|
||||
buf.append(" <td class=\"cells\" align=\"right\" >");
|
||||
buf.append(peer.getRTTDeviation());
|
||||
buf.append("</code></td>");
|
||||
buf.append("</td>");
|
||||
|
||||
buf.append("<td align=\"right\" ><code>");
|
||||
buf.append(" <td class=\"cells\" align=\"right\" >");
|
||||
buf.append(rto);
|
||||
buf.append("</code></td>");
|
||||
buf.append("</td>");
|
||||
|
||||
buf.append("<td align=\"right\" ><code>");
|
||||
buf.append(" <td class=\"cells\" align=\"right\" >");
|
||||
buf.append(peer.getMTU()).append("/").append(peer.getReceiveMTU());
|
||||
|
||||
//.append('/');
|
||||
//buf.append(peer.getMTUIncreases()).append('/');
|
||||
//buf.append(peer.getMTUDecreases());
|
||||
buf.append("</code></td>");
|
||||
buf.append("</td>");
|
||||
|
||||
long sent = peer.getPacketsTransmitted();
|
||||
long recv = peer.getPacketsReceived();
|
||||
|
||||
buf.append("<td align=\"right\" ><code>");
|
||||
buf.append(" <td class=\"cells\" align=\"center\" >");
|
||||
buf.append(sent);
|
||||
buf.append("</code></td>");
|
||||
buf.append("</td>");
|
||||
|
||||
buf.append("<td align=\"right\" ><code>");
|
||||
buf.append(" <td class=\"cells\" align=\"center\" >");
|
||||
buf.append(recv);
|
||||
buf.append("</code></td>");
|
||||
buf.append("</td>");
|
||||
|
||||
//double sent = (double)peer.getPacketsPeriodTransmitted();
|
||||
//double sendLostPct = 0;
|
||||
@@ -1949,16 +1949,16 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
|
||||
long resent = peer.getPacketsRetransmitted();
|
||||
long dupRecv = peer.getPacketsReceivedDuplicate();
|
||||
|
||||
buf.append("<td align=\"right\" ><code>");
|
||||
buf.append(" <td class=\"cells\" align=\"center\" >");
|
||||
//buf.append(formatPct(sendLostPct));
|
||||
buf.append(resent); // + "/" + peer.getPacketsPeriodRetransmitted() + "/" + sent);
|
||||
//buf.append(peer.getPacketRetransmissionRate());
|
||||
buf.append("</code></td>");
|
||||
buf.append("</td>");
|
||||
|
||||
double recvDupPct = (double)peer.getPacketsReceivedDuplicate()/(double)peer.getPacketsReceived();
|
||||
buf.append("<td align=\"right\" ><code>");
|
||||
buf.append(" <td class=\"cells\" align=\"center\" >");
|
||||
buf.append(dupRecv); //formatPct(recvDupPct));
|
||||
buf.append("</code></td>");
|
||||
buf.append("</td>");
|
||||
|
||||
buf.append("</tr>\n");
|
||||
out.write(buf.toString());
|
||||
@@ -1980,25 +1980,25 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
|
||||
numPeers++;
|
||||
}
|
||||
|
||||
buf.append("<tr><td colspan=\"16\"><hr /></td></tr>\n");
|
||||
buf.append(" <tr><td colspan=\"3\"><b>Total</b></td>");
|
||||
buf.append(" <td align=\"right\">");
|
||||
// buf.append("<tr><td colspan=\"16\"><hr /></td></tr>\n");
|
||||
buf.append(" <tr class=\"tablefooter\"> <td colspan=\"3\" align=\"right\"><b>Total</b></td>");
|
||||
buf.append(" <td align=\"center\" nowrap><b>");
|
||||
buf.append(formatKBps(bpsIn)).append("/").append(formatKBps(bpsOut));
|
||||
buf.append("KBps</td>");
|
||||
buf.append(" <td align=\"right\">").append(numPeers > 0 ? DataHelper.formatDuration(uptimeMsTotal/numPeers) : "0s");
|
||||
buf.append("</td><td align=\"right\">").append(numPeers > 0 ? DataHelper.formatDuration(offsetTotal*1000/numPeers) : "0ms").append("</td>\n");
|
||||
buf.append(" <td align=\"right\">");
|
||||
buf.append("K/s</b></td>");
|
||||
buf.append(" <td align=\"center\"><b>").append(numPeers > 0 ? DataHelper.formatDuration(uptimeMsTotal/numPeers) : "0s");
|
||||
buf.append("</b></td> <td align=\"center\"><b>").append(numPeers > 0 ? DataHelper.formatDuration(offsetTotal*1000/numPeers) : "0ms").append("</b></td>\n");
|
||||
buf.append(" <td align=\"center\"><b>");
|
||||
buf.append(numPeers > 0 ? cwinTotal/(numPeers*1024) + "K" : "0K");
|
||||
buf.append("</td><td> </td>\n");
|
||||
buf.append(" <td align=\"right\">");
|
||||
buf.append("</b></td> <td> </td>\n");
|
||||
buf.append(" <td align=\"center\"><b>");
|
||||
buf.append(numPeers > 0 ? rttTotal/numPeers : 0);
|
||||
buf.append("</td><td align=\"right\"> </td><td align=\"right\">");
|
||||
buf.append("</b></td> <td> </td> <td align=\"center\"><b>");
|
||||
buf.append(numPeers > 0 ? rtoTotal/numPeers : 0);
|
||||
buf.append("</td>\n <td> </td><td align=\"right\">");
|
||||
buf.append(sendTotal).append("</td><td align=\"right\">").append(recvTotal).append("</td>\n");
|
||||
buf.append(" <td align=\"right\">").append(resentTotal);
|
||||
buf.append("</td><td align=\"right\">").append(dupRecvTotal).append("</td>\n");
|
||||
buf.append(" </tr></table></p><p>\n");
|
||||
buf.append("</b></td>\n <td> </td> <td align=\"center\"><b>");
|
||||
buf.append(sendTotal).append("</td></b> <td align=\"center\"><b>").append(recvTotal).append("</b></td>\n");
|
||||
buf.append(" <td align=\"center\"><b>").append(resentTotal);
|
||||
buf.append("</b></td> <td align=\"center\"><b>").append(dupRecvTotal).append("</b></td>\n");
|
||||
buf.append(" </tr></table></div></p><p>\n");
|
||||
long bytesTransmitted = _context.bandwidthLimiter().getTotalAllocatedOutboundBytes();
|
||||
// NPE here early
|
||||
double averagePacketSize = _context.statManager().getRate("udp.sendPacketSize").getLifetimeAverageValue();
|
||||
@@ -2006,8 +2006,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
|
||||
resentTotal = (long)_context.statManager().getRate("udp.packetsRetransmitted").getLifetimeEventCount();
|
||||
double nondupSent = ((double)bytesTransmitted - ((double)resentTotal)*averagePacketSize);
|
||||
double bwResent = (nondupSent <= 0 ? 0d : ((((double)resentTotal)*averagePacketSize) / nondupSent));
|
||||
buf.append("Percentage of bytes retransmitted (lifetime): ").append(formatPct(bwResent));
|
||||
buf.append(" <i>(includes retransmission required by packet loss)</i><br /></p>\n");
|
||||
buf.append("<h3>Percentage of bytes retransmitted (lifetime): ").append(formatPct(bwResent));
|
||||
buf.append("</h3><i>(Includes retransmission required by packet loss)</i><br /></p>\n");
|
||||
out.write(buf.toString());
|
||||
buf.setLength(0);
|
||||
out.write(KEY);
|
||||
@@ -2026,27 +2026,27 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
|
||||
}
|
||||
}
|
||||
|
||||
private static final String KEY = "<p>" +
|
||||
"<b id=\"def.peer\">peer</b>: the remote peer<br />\n" +
|
||||
"<b id=\"def.dir\">dir</b>: v means they offer to introduce us, ^ means we offer to introduce them<br />\n" +
|
||||
"<b id=\"def.idle\">idle</b>: the idle time is how long since a packet has been received or sent<br />\n" +
|
||||
"<b id=\"def.rate\">in/out</b>: the rates show a smoothed inbound and outbound transfer rate (KBytes per second)<br />\n" +
|
||||
"<b id=\"def.up\">up</b>: the uptime is how long ago this session was established<br />\n" +
|
||||
"<b id=\"def.skew\">skew</b>: the skew says how far off the other user's clock is, relative to your own<br />\n" +
|
||||
"<b id=\"def.cwnd\">cwnd</b>: the congestion window is how many bytes in 'in flight' you can send w/out an acknowledgement / <br />\n" +
|
||||
" the number of currently active messages being sent /<br />\n" +
|
||||
" the maximum number of concurrent messages to send /<br />\n"+
|
||||
" the number of consecutive sends which were blocked due to throws message window size<br />\n" +
|
||||
"<b id=\"def.ssthresh\">ssthresh</b>: the slow start threshold help make sure the cwnd doesn't grow too fast<br />\n" +
|
||||
"<b id=\"def.rtt\">rtt</b>: the round trip time is how long it takes to get an acknowledgement of a packet<br />\n" +
|
||||
"<b id=\"def.dev\">dev</b>: the standard deviation of the round trip time, to help control the retransmit timeout<br />\n" +
|
||||
"<b id=\"def.rto\">rto</b>: the retransmit timeout controls how frequently an unacknowledged packet will be retransmitted<br />\n" +
|
||||
"<b id=\"def.mtu\">mtu</b>: current sending packet size / estimated receiving packet size<br />\n" +
|
||||
"<b id=\"def.send\">send</b>: the number of packets sent to the peer<br />\n" +
|
||||
"<b id=\"def.recv\">recv</b>: the number of packets received from the peer<br />\n" +
|
||||
"<b id=\"def.resent\">resent</b>: the number of packets retransmitted to the peer<br />\n" +
|
||||
"<b id=\"def.dupRecv\">dupRecv</b>: the number of duplicate packets received from the peer" +
|
||||
"</p>\n";
|
||||
private static final String KEY = "<h3>Definitions:</h3><div class=\"configure\">" +
|
||||
"<br><b id=\"def.peer\">Peer</b>: the remote peer.<br />\n" +
|
||||
"<b id=\"def.dir\">Dir</b>: v means they offer to introduce us, ^ means we offer to introduce them.<br />\n" +
|
||||
"<b id=\"def.idle\">Idle</b>: the idle time is how long since a packet has been received or sent.<br />\n" +
|
||||
"<b id=\"def.rate\">In/out</b>: the rates show a smoothed inbound and outbound transfer rate (KBytes per second).<br />\n" +
|
||||
"<b id=\"def.up\">Up</b>: the uptime is how long ago this session was established.<br />\n" +
|
||||
"<b id=\"def.skew\">Skew</b>: the skew says how far off the other user's clock is, relative to your own.<br />\n" +
|
||||
"<b id=\"def.cwnd\">Cwnd</b>: the congestion window is how many bytes in 'in flight' you can send w/out an acknowledgement, / <br />\n" +
|
||||
" the number of currently active messages being sent, /<br />\n" +
|
||||
" the maximum number of concurrent messages to send, /<br />\n"+
|
||||
" the number of consecutive sends which were blocked due to throws message window size.<br />\n" +
|
||||
"<b id=\"def.ssthresh\">Sst</b>: the slow start threshold helps make sure the cwnd doesn't grow too fast.<br />\n" +
|
||||
"<b id=\"def.rtt\">Rtt</b>: the round trip time is how long it takes to get an acknowledgement of a packet.<br />\n" +
|
||||
"<b id=\"def.dev\">Dev</b>: the standard deviation of the round trip time, to help control the retransmit timeout.<br />\n" +
|
||||
"<b id=\"def.rto\">Rto</b>: the retransmit timeout controls how frequently an unacknowledged packet will be retransmitted.<br />\n" +
|
||||
"<b id=\"def.mtu\">Mtu</b>: current sending packet size / estimated receiving packet size.<br />\n" +
|
||||
"<b id=\"def.send\">TX</b>: the number of packets sent to the peer.<br />\n" +
|
||||
"<b id=\"def.recv\">RX</b>: the number of packets received from the peer.<br />\n" +
|
||||
"<b id=\"def.resent\">ReTX</b>: the number of packets retransmitted to the peer.<br />\n" +
|
||||
"<b id=\"def.dupRecv\">DupRX</b>: the number of duplicate packets received from the peer." +
|
||||
"</div>\n";
|
||||
|
||||
/**
|
||||
* Cache the bid to reduce object churn
|
||||
|
@@ -405,7 +405,7 @@ public class TunnelPoolManager implements TunnelManagerFacade {
|
||||
|
||||
|
||||
public void renderStatusHTML(Writer out) throws IOException {
|
||||
out.write("<h2><a name=\"exploratory\" ></a>Exploratory tunnels (<a href=\"/configtunnels.jsp#exploratory\">config</a>):</h2>\n");
|
||||
out.write("<div class=\"wideload\"><h2><a name=\"exploratory\" ></a>Exploratory tunnels (<a href=\"/configtunnels.jsp#exploratory\">config</a>):</h2>\n");
|
||||
renderPool(out, _inboundExploratory, _outboundExploratory);
|
||||
|
||||
List destinations = null;
|
||||
@@ -455,41 +455,41 @@ public class TunnelPoolManager implements TunnelManagerFacade {
|
||||
}
|
||||
out.write("<tr>");
|
||||
if (cfg.getReceiveTunnel() != null)
|
||||
out.write("<td align=\"center\">" + cfg.getReceiveTunnel().getTunnelId() +"</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + cfg.getReceiveTunnel().getTunnelId() +"</td>");
|
||||
else
|
||||
out.write("<td align=\"center\">n/a</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">n/a</td>");
|
||||
if (cfg.getReceiveFrom() != null)
|
||||
out.write("<td align=\"right\">" + netDbLink(cfg.getReceiveFrom()) +"</td>");
|
||||
out.write(" <td class=\"cells\" align=\"right\">" + netDbLink(cfg.getReceiveFrom()) +"</td>");
|
||||
else
|
||||
out.write("<td align=\"center\"> </td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\"> </td>");
|
||||
if (cfg.getSendTunnel() != null)
|
||||
out.write("<td align=\"center\">" + cfg.getSendTunnel().getTunnelId() +"</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + cfg.getSendTunnel().getTunnelId() +"</td>");
|
||||
else
|
||||
out.write("<td align=\"center\"> </td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\"> </td>");
|
||||
if (cfg.getSendTo() != null)
|
||||
out.write("<td align=\"center\">" + netDbLink(cfg.getSendTo()) +"</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + netDbLink(cfg.getSendTo()) +"</td>");
|
||||
else
|
||||
// out.write("<td align=\"center\"> </td>");
|
||||
out.write("<td align=\"center\"> </td>");
|
||||
// out.write(" <td class=\"cells\" align=\"center\"> </td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\"> </td>");
|
||||
long timeLeft = cfg.getExpiration()-_context.clock().now();
|
||||
if (timeLeft > 0)
|
||||
out.write("<td align=\"center\">" + DataHelper.formatDuration(timeLeft) + "</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + DataHelper.formatDuration(timeLeft) + "</td>");
|
||||
else
|
||||
out.write("<td align=\"center\">(grace period)</td>");
|
||||
out.write("<td align=\"center\">" + cfg.getProcessedMessagesCount() + "KB</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">(grace period)</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + cfg.getProcessedMessagesCount() + "KB</td>");
|
||||
int lifetime = (int) ((_context.clock().now() - cfg.getCreation()) / 1000);
|
||||
if (lifetime <= 0)
|
||||
lifetime = 1;
|
||||
if (lifetime > 10*60)
|
||||
lifetime = 10*60;
|
||||
int bps = 1024 * (int) cfg.getProcessedMessagesCount() / lifetime;
|
||||
out.write("<td align=\"center\">" + bps + "Bps</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + bps + "Bps</td>");
|
||||
if (cfg.getSendTo() == null)
|
||||
out.write("<td align=\"center\">Outbound Endpoint</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">Outbound Endpoint</td>");
|
||||
else if (cfg.getReceiveFrom() == null)
|
||||
out.write("<td align=\"center\">Inbound Gateway</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">Inbound Gateway</td>");
|
||||
else
|
||||
out.write("<td align=\"center\">Participant</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">Participant</td>");
|
||||
out.write("</tr>\n");
|
||||
processed += cfg.getProcessedMessagesCount();
|
||||
}
|
||||
@@ -543,23 +543,23 @@ public class TunnelPoolManager implements TunnelManagerFacade {
|
||||
continue; // don't display tunnels in their grace period
|
||||
live++;
|
||||
if (info.isInbound())
|
||||
out.write("<tr><td align=\"center\"><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound\"/></td>");
|
||||
out.write("<tr> <td class=\"cells\" align=\"center\"><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound\"/></td>");
|
||||
else
|
||||
out.write("<tr><td align=\"center\"><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound\" title=\"Outbound\"/></td>");
|
||||
out.write("<td align=\"center\">" + DataHelper.formatDuration(timeLeft) + "</td>\n");
|
||||
out.write("<td align=\"center\">" + info.getProcessedMessagesCount() + "KB</td>\n");
|
||||
out.write("<tr> <td class=\"cells\" align=\"center\"><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound\" title=\"Outbound\"/></td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + DataHelper.formatDuration(timeLeft) + "</td>\n");
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + info.getProcessedMessagesCount() + "KB</td>\n");
|
||||
for (int j = 0; j < info.getLength(); j++) {
|
||||
Hash peer = info.getPeer(j);
|
||||
TunnelId id = (info.isInbound() ? info.getReceiveTunnelId(j) : info.getSendTunnelId(j));
|
||||
if (_context.routerHash().equals(peer)) {
|
||||
out.write("<td align=\"center\">" + (id == null ? "" : "" + id) + "</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + (id == null ? "" : "" + id) + "</td>");
|
||||
} else {
|
||||
String cap = getCapacity(peer);
|
||||
out.write("<td align=\"center\">" + netDbLink(peer) + (id == null ? "" : " " + id) + cap + "</td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + netDbLink(peer) + (id == null ? "" : " " + id) + cap + "</td>");
|
||||
}
|
||||
if (info.getLength() < maxLength && (info.getLength() == 1 || j == info.getLength() - 2)) {
|
||||
for (int k = info.getLength(); k < maxLength; k++)
|
||||
out.write("<td align=\"center\"> </td>");
|
||||
out.write(" <td class=\"cells\" align=\"center\"> </td>");
|
||||
}
|
||||
}
|
||||
out.write("</tr>\n");
|
||||
@@ -583,8 +583,8 @@ public class TunnelPoolManager implements TunnelManagerFacade {
|
||||
live += pending.size();
|
||||
}
|
||||
if (live <= 0)
|
||||
out.write("<div class=\"statusnotes\"><center>N<b>No tunnels; waiting for the grace period to end.</center></b></div>\n");
|
||||
out.write("<div class=\"statusnotes\"><center><b>Lifetime bandwidth usage: " + DataHelper.formatSize(processedIn*1024) + "<B in, " +
|
||||
out.write("<div class=\"statusnotes\"><center><b>No tunnels; waiting for the grace period to end.</center></b></div>\n");
|
||||
out.write("<div class=\"statusnotes\"><center><b>Lifetime bandwidth usage: " + DataHelper.formatSize(processedIn*1024) + "B in, " +
|
||||
DataHelper.formatSize(processedOut*1024) + "B out</b></center></div>");
|
||||
}
|
||||
|
||||
@@ -605,25 +605,25 @@ public class TunnelPoolManager implements TunnelManagerFacade {
|
||||
out.write("<h2><a name=\"peers\"></a>Tunnel Counts By Peer:</h2>\n");
|
||||
out.write("<table><tr><th>Peer</th><th>Expl. + Client</th><th>% of total</th><th>Part. from + to</th><th>% of total</th></tr>\n");
|
||||
for (Hash h : peerList) {
|
||||
out.write("<tr><td align=\"center\">");
|
||||
out.write("<tr> <td class=\"cells\" align=\"center\">");
|
||||
out.write(netDbLink(h));
|
||||
out.write("<td align=\"center\">" + lc.count(h));
|
||||
out.write("<td align=\"center\">");
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + lc.count(h));
|
||||
out.write(" <td class=\"cells\" align=\"center\">");
|
||||
if (tunnelCount > 0)
|
||||
out.write("" + (lc.count(h) * 100 / tunnelCount));
|
||||
else
|
||||
out.write('0');
|
||||
out.write("<td align=\"center\">" + pc.count(h));
|
||||
out.write("<td align=\"center\">");
|
||||
out.write(" <td class=\"cells\" align=\"center\">" + pc.count(h));
|
||||
out.write(" <td class=\"cells\" align=\"center\">");
|
||||
if (partCount > 0)
|
||||
out.write("" + (pc.count(h) * 100 / partCount));
|
||||
else
|
||||
out.write('0');
|
||||
out.write('\n');
|
||||
}
|
||||
out.write("<tr><td align=\"center\"><b>Tunnels</b><td align=\"center\"><b>" + tunnelCount);
|
||||
out.write("</b><td> </td><td align=\"center\"><b>" + partCount);
|
||||
out.write("</b><td> </td></tr></table>\n");
|
||||
out.write("<tr class=\"tablefooter\"> <td align=\"center\"><b>Tunnels</b> <td align=\"center\"><b>" + tunnelCount);
|
||||
out.write("</b> <td> </td> <td align=\"center\"><b>" + partCount);
|
||||
out.write("</b> <td> </td></tr></table></div>\n");
|
||||
}
|
||||
|
||||
/** @return total number of non-fallback expl. + client tunnels */
|
||||
|