diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index f2f71e6baa..99b4c22cac 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -711,7 +711,7 @@ public class I2PSnarkServlet extends HttpServlet { out.write("Configuration:
\n"); out.write("Data directory: (Edit i2psnark.config and restart to change)
\n"); - out.write("Auto start: "); //Auto add: @@ -738,7 +738,7 @@ public class I2PSnarkServlet extends HttpServlet { out.write("Up bandwidth limit: KBps (Half available bandwidth recommended.)
\n"); - out.write("Use open trackers also: "); out.write("Announce URLs: = 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 " + app + " started"); + addFormNotice("WebApp " + app + " 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."); } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java index 02b31e8842..47b301d28e 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java @@ -14,8 +14,8 @@ public class ConfigClientsHelper extends HelperBase { public String getForm1() { StringBuilder buf = new StringBuilder(1024); - buf.append("\n"); - buf.append("\n"); + buf.append("
ClientRun at Startup?Start NowClass and arguments
\n"); + buf.append("\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("
ClientRun at Startup?Start NowClass and arguments
\n"); - buf.append("\n"); + buf.append("
WebAppRun at Startup?Start NowDescription
\n"); + buf.append("\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("\n"); + buf.append("\n"); } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHandler.java index c7c7c2eb96..0e59380e19 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHandler.java @@ -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) { diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java index aa2b6a1b07..e5e0a29225 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java @@ -62,18 +62,18 @@ public class ConfigTunnelsHelper extends HelperBase { in.getLength() + in.getLengthVariance() <= 0 || out.getLength() <= 0 || out.getLength() + out.getLengthVariance() <= 0) - buf.append(""); + buf.append(""); else if (in.getLength() <= 1 || in.getLength() + in.getLengthVariance() <= 1 || out.getLength() <= 1 || out.getLength() + out.getLengthVariance() <= 1) - buf.append(""); + buf.append(""); if (in.getLength() + Math.abs(in.getLengthVariance()) >= WARN_LENGTH || out.getLength() + Math.abs(out.getLengthVariance()) >= WARN_LENGTH) - buf.append(""); + buf.append(""); if (in.getQuantity() + in.getBackupQuantity() >= WARN_QUANTITY || out.getQuantity() + out.getBackupQuantity() >= WARN_QUANTITY) - buf.append(""); + buf.append(""); buf.append("\n"); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java index 934bb0c88a..79ea1d1829 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java @@ -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 (refresh page to view)"); + addFormNotice("Theme change successfully saved (refresh page 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."); } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java index 9bfd22077d..11830975ba 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java @@ -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("").append(theme).append("
\n"); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHelper.java index d67f63bfad..5d03d90249 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHelper.java @@ -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 ""; + return ""; else - return ""; + return ""; } private static final long PERIODS[] = new long[] { 12*60*60*1000l, 24*60*60*1000l, 48*60*60*1000l, -1l }; diff --git a/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java index 2ab03ed581..e9749750cd 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java @@ -109,13 +109,13 @@ public class GraphHelper extends HelperBase { _out.write("

[Select Stats to Graph]

"); _out.write("
"); _out.write("Periods:
\n"); - _out.write("Plot averages: "); - _out.write("or plot events:
\n"); + _out.write("Plot averages: "); + _out.write("or plot events:
\n"); _out.write("Image sizes: width: pixels, height:
\n"); _out.write("Refresh delay:
\n"); - _out.write("


"); + _out.write("
"); } catch (IOException ioe) { ioe.printStackTrace(); } diff --git a/apps/routerconsole/jsp/config.jsp b/apps/routerconsole/jsp/config.jsp index 1cf5da92c0..b91a1ce245 100644 --- a/apps/routerconsole/jsp/config.jsp +++ b/apps/routerconsole/jsp/config.jsp @@ -30,6 +30,7 @@ I2P will work best if you configure your rates to match the speed of your internet connection.

+

WebAppRun at Startup?Start NowDescription
"); + buf.append("
"); 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(" "); + buf.append("/>"); if (!enabled) { buf.append(""); } - buf.append(" ").append(desc).append("
").append(desc).append("
ANONYMITY WARNING - Settings include 0-hop tunnels
ANONYMITY WARNING - Settings include 0-hop tunnels.
ANONYMITY WARNING - Settings include 1-hop tunnels
ANONYMITY WARNING - Settings include 1-hop tunnels.
PERFORMANCE WARNING - Settings include very long tunnels
PERFORMANCE WARNING - Settings include very long tunnels.
PERFORMANCE WARNING - Settings include high tunnel quantities
PERFORMANCE WARNING - Settings include high tunnel quantities.
\"Inbound\"  Inbound\"Outbound  Outbound
" /> KBps In ()
@@ -49,7 +50,7 @@ -->
Share ()
-
+

<% 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.
"); } else { out.print("You have configured I2P to share " + share + "KBps. "); - out.print("The higher the share bandwidth the more you improve your anonymity and help the network.
"); + out.print("The higher the share bandwidth the more you improve your anonymity and help the network.


"); } %> -

-
-

- <% } %> -

-
+ +

Adjust Profile Bonuses

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: + %> +
+
Speed: Capacity: - +

- -
" />
+
- +
diff --git a/apps/routerconsole/jsp/configservice.jsp b/apps/routerconsole/jsp/configservice.jsp index 8ca0087c70..942aedf0d0 100644 --- a/apps/routerconsole/jsp/configservice.jsp +++ b/apps/routerconsole/jsp/configservice.jsp @@ -26,11 +26,11 @@

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.

- +
-
+
<% if (System.getProperty("wrapper.version") != null) { %>

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.

- +
- <% } %> -
+ <% } %>
+ <% if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %>

Systray integration

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.

+
-
+

Run on startup

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 install_i2p_service_winnt.bat (or uninstall_i2p_service_winnt.bat) from the command line, if you prefer.

+
-
+

Note: 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.


+ above, then running uninstall_i2p_service_winnt.bat.

<% } %> <% if (System.getProperty("wrapper.version") != null) { %> @@ -69,17 +71,19 @@

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 wrapper.log.

+
- <% } %>
+<% } %>

Launch browser on router startup?

I2P's main configuration interface is this web console, so for your convenience I2P can launch a web browser pointing at http://127.0.0.1:7657/index.jsp whenever the router starts up.

+
-
+
diff --git a/apps/routerconsole/jsp/configstats.jsp b/apps/routerconsole/jsp/configstats.jsp index 9e59efe605..9a2435ec4f 100644 --- a/apps/routerconsole/jsp/configstats.jsp +++ b/apps/routerconsole/jsp/configstats.jsp @@ -56,7 +56,7 @@ function toggleAll(category)

I2P Stats Configuration

<%@include file="confignav.jsp" %> - + " /> @@ -73,39 +73,39 @@ function toggleAll(category) " />

Configure I2P Stat Collection

Enable full stats? - checked="true" <% } %>/> (change requires restart to take effect)
Stat file:
Filter: (toggle all)
+
<% while (statshelper.hasMoreStats()) { while (statshelper.groupRequired()) { %> - <% + <% } // end iterating over required groups for the current stat %> - - - <% } // end iterating over all stats %> - - + + - - - +
+
<%=statshelper.getCurrentGroupName()%> (toggle all) -
LogGraph
LogGraph
+
- checked="true" <% } %>/> + <% if (statshelper.getCurrentCanBeGraphed()) { %> - checked="true" <% } %>/><% } %><%=statshelper.getCurrentStatName()%>:
+
<%=statshelper.getCurrentStatName()%>:
<%=statshelper.getCurrentStatDescription()%>

Advanced filter:

+ diff --git a/apps/routerconsole/jsp/configtunnels.jsp b/apps/routerconsole/jsp/configtunnels.jsp index f7c4911ba3..f6ccb44d77 100644 --- a/apps/routerconsole/jsp/configtunnels.jsp +++ b/apps/routerconsole/jsp/configtunnels.jsp @@ -14,7 +14,6 @@

I2P Tunnel Configuration

<%@include file="confignav.jsp" %> - " /> " /> @@ -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.

- +
<% 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 @@ Note - Exploratory tunnel setting changes are stored in the router.config file.
Client tunnel changes are temporary and are not saved.
To make permanent client tunnel changes see the i2ptunnel page.
-
+
+ diff --git a/apps/routerconsole/jsp/configui.jsp b/apps/routerconsole/jsp/configui.jsp index 3835db33b7..f918bd5b59 100644 --- a/apps/routerconsole/jsp/configui.jsp +++ b/apps/routerconsole/jsp/configui.jsp @@ -34,9 +34,9 @@ " /> -
+
- +
<% } else { %> Theme selection disabled for Internet Explorer, sorry.
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. diff --git a/apps/routerconsole/jsp/configupdate.jsp b/apps/routerconsole/jsp/configupdate.jsp index a8cfa33cd1..d82600da29 100644 --- a/apps/routerconsole/jsp/configupdate.jsp +++ b/apps/routerconsole/jsp/configupdate.jsp @@ -28,52 +28,49 @@ System.setProperty("net.i2p.router.web.ConfigUpdateHandler.nonce", new java.util.Random().nextLong()+""); %> " />

Check for I2P and news updates

- +
- + - + - - - - - - - - -
News:News: <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> Update In Progress
<% } else { %> <% } %>

News URL:News URL: ">
Refresh frequency: + Refresh frequency:
Update policy: + Update policy:
Update through the eepProxy? + Update through the eepProxy?
eepProxy host: + eepProxy host: " />
eepProxy port: + eepProxy port: " />
Update URLs: + Update URLs:
Trusted keys: + Trusted keys: -

-
-
+
+ diff --git a/apps/routerconsole/jsp/css.jsp b/apps/routerconsole/jsp/css.jsp index 60db068350..37b649780b 100644 --- a/apps/routerconsole/jsp/css.jsp +++ b/apps/routerconsole/jsp/css.jsp @@ -18,3 +18,4 @@ " /> console.css" rel="stylesheet" type="text/css" /> + \ No newline at end of file diff --git a/apps/routerconsole/jsp/graphs.jsp b/apps/routerconsole/jsp/graphs.jsp index 64277f0d00..34ee723b76 100644 --- a/apps/routerconsole/jsp/graphs.jsp +++ b/apps/routerconsole/jsp/graphs.jsp @@ -11,6 +11,7 @@

I2P Performance Graphs

+
" /> @@ -18,5 +19,6 @@
+
\ No newline at end of file diff --git a/apps/routerconsole/jsp/netdb.jsp b/apps/routerconsole/jsp/netdb.jsp index d3c70811cc..cac11bf054 100644 --- a/apps/routerconsole/jsp/netdb.jsp +++ b/apps/routerconsole/jsp/netdb.jsp @@ -10,6 +10,7 @@ <%@include file="summary.jsp" %>

I2P Network Database Summary

+
" /> @@ -18,6 +19,6 @@ " />
- +
diff --git a/apps/routerconsole/jsp/profiles.jsp b/apps/routerconsole/jsp/profiles.jsp index c9e673c79a..11529cf551 100644 --- a/apps/routerconsole/jsp/profiles.jsp +++ b/apps/routerconsole/jsp/profiles.jsp @@ -9,7 +9,7 @@ <%@include file="summary.jsp" %>

I2P Network Peer Profiles

-
+
" /> @@ -17,6 +17,6 @@
- +
diff --git a/apps/routerconsole/jsp/summaryframe.jsp b/apps/routerconsole/jsp/summaryframe.jsp index 9532602fa4..d19ea12794 100644 --- a/apps/routerconsole/jsp/summaryframe.jsp +++ b/apps/routerconsole/jsp/summaryframe.jsp @@ -62,7 +62,7 @@ if (!shutdownSoon) { out.print("

\n"); if ("0".equals(d)) { - out.print("Refresh (s): \n"); + out.print("Refresh (s): \n"); out.print("\n"); } else { // this will load in the iframe but subsequent pages will not have the iframe diff --git a/apps/routerconsole/jsp/summarynoframe.jsp b/apps/routerconsole/jsp/summarynoframe.jsp index 2a6252cc40..1713a63364 100644 --- a/apps/routerconsole/jsp/summarynoframe.jsp +++ b/apps/routerconsole/jsp/summarynoframe.jsp @@ -26,9 +26,9 @@ <% } else { %> I2P Services
-Susimail -SusiDNS -Torrents +Addressbook +Torrents +Webmail Webserver
I2P Internals
I2PTunnel diff --git a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java index 12d48e7344..e871dfe817 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java +++ b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java @@ -1545,7 +1545,7 @@ public class WebMail extends HttpServlet "Cc:\n" + "Bcc:\n" + "Subject:\n" + - " Bcc to self\n" + + " Bcc to self\n" + "" + "
\n" + "New Attachment:" ); @@ -1558,7 +1558,7 @@ public class WebMail extends HttpServlet wroteHeader = true; } Attachment attachment = (Attachment)it.next(); - out.println( " " + attachment.getFileName() + ""); + out.println( " " + attachment.getFileName() + ""); } } out.println( "" ); @@ -1632,7 +1632,7 @@ public class WebMail extends HttpServlet ", markAll=" + sessionObject.markAll + ", invert=" + sessionObject.invert + ", clear=" + sessionObject.clear ); - out.println( "" + ( RELEASE ? "" : "" + i ) + "" + link + mail.shortSender + " " + link + mail.shortSubject + " " + mail.formattedDate + " " + mail.size + " Bytes" ); bg = 1 - bg; i++; diff --git a/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java b/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java index f9661240b9..15c1491685 100644 --- a/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java +++ b/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java @@ -502,7 +502,7 @@ public class TransientSessionKeyManager extends SessionKeyManager { public String renderStatusHTML() { StringBuilder buf = new StringBuilder(1024); buf.append("

Inbound sessions

"); - buf.append(""); + buf.append("
"); Set inbound = getInboundTagSets(); Map> inboundSets = new HashMap(inbound.size()); for (Iterator iter = inbound.iterator(); iter.hasNext();) { @@ -528,7 +528,7 @@ public class TransientSessionKeyManager extends SessionKeyManager { buf.append("

Outbound sessions

"); - buf.append("
"); + buf.append("
"); Set outbound = getOutboundSessions(); for (Iterator iter = outbound.iterator(); iter.hasNext();) { OutboundSession sess = iter.next(); diff --git a/history.txt b/history.txt index 10ce5688d4..890f0cd808 100644 --- a/history.txt +++ b/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 diff --git a/installer/resources/themes/console/classic/console.css b/installer/resources/themes/console/classic/console.css index 5cd5ceb850..3231ef874e 100644 --- a/installer/resources/themes/console/classic/console.css +++ b/installer/resources/themes/console/classic/console.css @@ -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; - } \ No newline at end of file + 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; +} \ No newline at end of file diff --git a/installer/resources/themes/console/classic/ieshim.css b/installer/resources/themes/console/classic/ieshim.css new file mode 100644 index 0000000000..9fff032b16 --- /dev/null +++ b/installer/resources/themes/console/classic/ieshim.css @@ -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; +} \ No newline at end of file diff --git a/installer/resources/themes/console/dark/console.css b/installer/resources/themes/console/dark/console.css index 3c17280fe4..5c561e94a9 100644 --- a/installer/resources/themes/console/dark/console.css +++ b/installer/resources/themes/console/dark/console.css @@ -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; } \ No newline at end of file diff --git a/installer/resources/themes/console/dark/images/titletile.png b/installer/resources/themes/console/dark/images/titletile.png new file mode 100644 index 0000000000..945acc5b98 Binary files /dev/null and b/installer/resources/themes/console/dark/images/titletile.png differ diff --git a/installer/resources/themes/console/images/errortriangle.png b/installer/resources/themes/console/images/errortriangle.png new file mode 100644 index 0000000000..f1730ccbf6 Binary files /dev/null and b/installer/resources/themes/console/images/errortriangle.png differ diff --git a/installer/resources/themes/console/images/i2psnark.png b/installer/resources/themes/console/images/i2psnark.png index 31722ab9d2..63fddb1079 100644 Binary files a/installer/resources/themes/console/images/i2psnark.png and b/installer/resources/themes/console/images/i2psnark.png differ diff --git a/installer/resources/themes/console/light/console.css b/installer/resources/themes/console/light/console.css index f7d457c2a2..26f8b40c5c 100644 --- a/installer/resources/themes/console/light/console.css +++ b/installer/resources/themes/console/light/console.css @@ -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; } \ No newline at end of file diff --git a/installer/resources/themes/console/light/images/lightbluetile.png b/installer/resources/themes/console/light/images/lightbluetile.png index e7fc6c1f12..53f9d54dea 100644 Binary files a/installer/resources/themes/console/light/images/lightbluetile.png and b/installer/resources/themes/console/light/images/lightbluetile.png differ diff --git a/installer/resources/themes/console/light/images/titletile.png b/installer/resources/themes/console/light/images/titletile.png new file mode 100644 index 0000000000..beb9552baa Binary files /dev/null and b/installer/resources/themes/console/light/images/titletile.png differ diff --git a/installer/resources/themes/console/snark.css b/installer/resources/themes/console/snark.css index f78956ad1a..a5551156fc 100644 --- a/installer/resources/themes/console/snark.css +++ b/installer/resources/themes/console/snark.css @@ -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; } diff --git a/readme.html b/readme.html index ffabaddf33..3caf086ed9 100644 --- a/readme.html +++ b/readme.html @@ -35,7 +35,7 @@

There are many more eepsites - just follow the links from the ones you see, bookmark your favorites, and visit them often! - +

    diff --git a/router/java/src/net/i2p/router/Blocklist.java b/router/java/src/net/i2p/router/Blocklist.java index 1ce5cb5e7d..a166939b43 100644 --- a/router/java/src/net/i2p/router/Blocklist.java +++ b/router/java/src/net/i2p/router/Blocklist.java @@ -767,10 +767,10 @@ public class Blocklist { out.write("
"); } if (_blocklistSize > 0) { - out.write(""); + out.write("
IPs from Blocklist File
FromTo
"); for (int i = 0; i < _blocklistSize; i++) { int from = getFrom(_blocklist[i]); - out.write("\n"); @@ -779,7 +779,7 @@ public class Blocklist { } out.write("
IPs from Blocklist File
From:To:
"); out.write(toStr(from)); out.write(""); + out.write("
"); out.write(toStr(from)); out.write(""); int to = getTo(_blocklist[i]); if (to != from) { out.write(toStr(to)); out.write("
"); } else { - out.write("
No blocklist file entries"); + out.write("
No blocklist file entries."); } out.flush(); } diff --git a/router/java/src/net/i2p/router/JobQueue.java b/router/java/src/net/i2p/router/JobQueue.java index 557a47b918..af58277ca5 100644 --- a/router/java/src/net/i2p/router/JobQueue.java +++ b/router/java/src/net/i2p/router/JobQueue.java @@ -607,7 +607,7 @@ public class JobQueue { out.flush(); StringBuilder buf = new StringBuilder(32*1024); - buf.append("

I2P JobQueue

# runners: ").append(numRunners).append(" [states="); + buf.append("

I2P JobQueue

# 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("\n"); + buf.append("
\n"); buf.append(""); buf.append(""); buf.append("\n"); @@ -734,6 +734,6 @@ public class JobQueue { buf.append(""); buf.append("\n"); - buf.append("
JobRunsTimeAvgMaxMinPendingAvgMaxMin
").append(minPendingTime).append("
\n"); + buf.append("
\n"); } } diff --git a/router/java/src/net/i2p/router/PersistentKeyRing.java b/router/java/src/net/i2p/router/PersistentKeyRing.java index 7804333257..c92437111b 100644 --- a/router/java/src/net/i2p/router/PersistentKeyRing.java +++ b/router/java/src/net/i2p/router/PersistentKeyRing.java @@ -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"); + buf.append("\n
Destination HashName or Dest.Session Key
"); for (Entry e : entrySet()) { buf.append("\n
Destination HashName or Dest.Session Key
"); Hash h = e.getKey(); diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java index d85ea17b2b..0729211bf9 100644 --- a/router/java/src/net/i2p/router/Router.java +++ b/router/java/src/net/i2p/router/Router.java @@ -759,7 +759,7 @@ public class Router { buf.setLength(0); buf.append("\n
\n"); List msgs = _context.logManager().getBuffer().getMostRecentMessages(); - buf.append("\n

Most recent console messages:

\n"); + buf.append("\n

Most recent console messages:

\n"); for (Iterator iter = msgs.iterator(); iter.hasNext(); ) { String msg = (String)iter.next(); buf.append("
");
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index 8aa072fcf9..0226e038bd 100644
--- a/router/java/src/net/i2p/router/RouterVersion.java
+++ b/router/java/src/net/i2p/router/RouterVersion.java
@@ -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;
diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java
index ebb9d61c0c..fecda29d03 100644
--- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java
+++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java
@@ -218,7 +218,11 @@ class ProfileOrganizerRenderer {
         }
         buf.append("
"); - buf.append("

Definitions:

    "); + buf.append("

    Thresholds:

    "); + buf.append("Speed: ").append(num(_organizer.getSpeedThreshold())).append(" (").append(fast).append(" fast peers)
    "); + buf.append("Capacity: ").append(num(_organizer.getCapacityThreshold())).append(" (").append(reliable).append(" high capacity peers)
    "); + buf.append("Integration: ").append(num(_organizer.getIntegrationThreshold())).append(" (").append(integrated).append(" well integrated peers)"); + buf.append("

    Definitions:

      "); buf.append("
    • groups: as determined by the profile organizer
    • "); buf.append("
    • caps: capabilities in the netDb, not used to determine profiles
    • "); buf.append("
    • speed: peak throughput (bytes per second) over a 1 minute period that the peer has sustained in a single tunnel
    • "); @@ -226,10 +230,6 @@ class ProfileOrganizerRenderer { buf.append("
    • integration: how many new peers have they told us about lately?
    • "); buf.append("
    • failing?: is the peer currently swamped (and if possible we should avoid nagging them)?
    • "); buf.append("
    "); - buf.append("

    Thresholds:
    "); - buf.append("Speed: ").append(num(_organizer.getSpeedThreshold())).append(" (").append(fast).append(" fast peers)
    "); - buf.append("Capacity: ").append(num(_organizer.getCapacityThreshold())).append(" (").append(reliable).append(" high capacity peers)
    "); - buf.append("Integration: ").append(num(_organizer.getIntegrationThreshold())).append(" (").append(integrated).append(" well integrated peers)
    "); out.write(buf.toString()); out.flush(); } diff --git a/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java b/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java index a4ded13edd..11d3641916 100644 --- a/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java +++ b/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java @@ -619,8 +619,8 @@ public class FIFOBandwidthLimiter { public void renderStatusHTML(Writer out) throws IOException { long now = now(); StringBuilder buf = new StringBuilder(4096); - buf.append("

    Limiter Status:
    ").append(getStatus().toString()).append("

    \n"); - buf.append("

    Pending bandwidth requests:

      "); + buf.append("

      Limiter Status:

      ").append(getStatus().toString()).append("\n"); + buf.append("

      Pending bandwidth requests:

        "); buf.append("
      • Inbound requests:
          "); synchronized (_pendingInboundRequests) { for (int i = 0; i < _pendingInboundRequests.size(); i++) { @@ -643,7 +643,7 @@ public class FIFOBandwidthLimiter { buf.append("ms ago\n"); } } - buf.append("

      \n"); + buf.append("


    \n"); out.write(buf.toString()); out.flush(); } diff --git a/router/java/src/net/i2p/router/transport/TransportManager.java b/router/java/src/net/i2p/router/transport/TransportManager.java index f9d495cea1..98158054fa 100644 --- a/router/java/src/net/i2p/router/transport/TransportManager.java +++ b/router/java/src/net/i2p/router/transport/TransportManager.java @@ -492,7 +492,7 @@ public class TransportManager implements TransportEventListener { t.renderStatusHTML(out, urlBase, sortFlags); } StringBuilder buf = new StringBuilder(4*1024); - buf.append("

    Router Transport Addresses:

    \n");
    +        buf.append("

    Router Transport Addresses:

    \n");
             for (int i = 0; i < _transports.size(); i++) {
                 Transport t = (Transport)_transports.get(i);
                 if (t.getCurrentAddress() != null)
    diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
    index 910db5e780..b21156f1ca 100644
    --- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
    +++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
    @@ -639,19 +639,19 @@ public class NTCPTransport extends TransportImpl {
             long totalRecv = 0;
     
             StringBuilder buf = new StringBuilder(512);
    -        buf.append("

    NTCP connections: ").append(peers.size()); - buf.append(" limit: ").append(getMaxConnections()); - buf.append(" timeout: ").append(DataHelper.formatDuration(_pumper.getIdleTimeout())); - buf.append("
    \n"); - buf.append("\n"); + buf.append("

    NTCP connections: ").append(peers.size()); + buf.append(". Limit: ").append(getMaxConnections()); + buf.append(". Timeout: ").append(DataHelper.formatDuration(_pumper.getIdleTimeout())); + buf.append(".

    \n"); + buf.append("
    \n"); buf.append(""); buf.append(""); buf.append(""); buf.append(""); buf.append(""); buf.append(""); - buf.append(""); - buf.append(""); + buf.append(""); + buf.append(""); buf.append(""); buf.append(""); buf.append(""); @@ -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("\n"); + buf.append("\n"); out.write(buf.toString()); buf.setLength(0); } if (peers.size() > 0) { - buf.append("\n"); - buf.append("\n"); + buf.append("\n"); } - buf.append("
    PeerDirIdleIn/OutUpSkewSendRecvTXRXOut queueBacklogged?Reading?
    "); + buf.append("
    "); 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(""); + buf.append(" "); if (con.isInbound()) - buf.append("in"); + buf.append("\"Inbound\""); else - buf.append("out"); - buf.append(""); + buf.append("\"Outbound\""); + buf.append(" "); buf.append(con.getTimeSinceReceive()/1000); buf.append("s/").append(con.getTimeSinceSend()/1000); - buf.append("s"); + buf.append("s "); 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("").append(DataHelper.formatDuration(con.getUptime())); + buf.append("K/s"); + buf.append(" ").append(DataHelper.formatDuration(con.getUptime())); totalUptime += con.getUptime(); offsetTotal = offsetTotal + con.getClockSkew(); - buf.append("").append(con.getClockSkew()); - buf.append("s").append(con.getMessagesSent()); + buf.append(" ").append(con.getClockSkew()); + buf.append("s ").append(con.getMessagesSent()); totalSend += con.getMessagesSent(); - buf.append("").append(con.getMessagesReceived()); + buf.append(" ").append(con.getMessagesReceived()); totalRecv += con.getMessagesReceived(); long outQueue = con.getOutboundQueueSize(); if (outQueue <= 0) { - buf.append("No messages"); + buf.append(" No messages"); } else { - buf.append("").append(outQueue).append(" message"); + buf.append(" ").append(outQueue).append(" message"); if (outQueue > 1) buf.append("s"); } - buf.append("").append(con.getConsecutiveBacklog() > 0 ? "true" : "false"); + buf.append(" ").append(con.getConsecutiveBacklog() > 0 ? "true" : "false"); long readTime = con.getReadTime(); if (readTime <= 0) { - buf.append("No"); + buf.append(" No"); } else { - buf.append("For ").append(DataHelper.formatDuration(readTime)); + buf.append(" For ").append(DataHelper.formatDuration(readTime)); } - buf.append("

    ").append(peers.size()).append(" peers  "); - buf.append("").append(formatRate(bpsRecv/1024)).append("/").append(formatRate(bpsSend/1024)).append("KBps"); - buf.append("").append(DataHelper.formatDuration(totalUptime/peers.size())); - buf.append("").append(peers.size() > 0 ? DataHelper.formatDuration(offsetTotal*1000/peers.size()) : "0ms"); - buf.append("").append(totalSend).append("").append(totalRecv); - buf.append("   "); +// buf.append("

    ").append(peers.size()).append(" peers    "); + buf.append(" ").append(formatRate(bpsRecv/1024)).append("/").append(formatRate(bpsSend/1024)).append("K/s"); + buf.append(" ").append(DataHelper.formatDuration(totalUptime/peers.size())); + buf.append(" ").append(peers.size() > 0 ? DataHelper.formatDuration(offsetTotal*1000/peers.size()) : "0ms"); + buf.append(" ").append(totalSend).append(" ").append(totalRecv); + buf.append("      "); buf.append("

    \n"); + buf.append("

\n"); out.write(buf.toString()); buf.setLength(0); } diff --git a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java index eae5b9c119..044b33b8ef 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java @@ -1763,51 +1763,51 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority int numPeers = 0; StringBuilder buf = new StringBuilder(512); - buf.append("

UDP connections: ").append(peers.size()); - buf.append(" limit: ").append(getMaxConnections()); - buf.append(" timeout: ").append(DataHelper.formatDuration(_expireTimeout)); - buf.append("
\n"); - buf.append("\n"); - buf.append("\n"); + buf.append(" \n"); + buf.append("
Peer"); + buf.append("

UDP connections: ").append(peers.size()); + buf.append(". Limit: ").append(getMaxConnections()); + buf.append(". Timeout: ").append(DataHelper.formatDuration(_expireTimeout)); + buf.append(".

\n"); + buf.append("
\n"); + buf.append(""); - buf.append("\n"); - buf.append("\n"); - buf.append("\n"); - buf.append("\n"); - buf.append("\n"); - buf.append("\n"); buf.append("\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(""); + buf.append(""); long idleIn = (now-peer.getLastReceiveTime())/1000; long idleOut = (now-peer.getLastSendTime())/1000; if (idleIn < 0) idleIn = 0; if (idleOut < 0) idleOut = 0; - buf.append(""); + buf.append("s"); int recvBps = (idleIn > 2 ? 0 : peer.getReceiveBps()); int sendBps = (idleOut > 2 ? 0 : peer.getSendBps()); - buf.append(""); + //buf.append("K/s "); + buf.append(""); long uptime = now - peer.getKeyEstablishedTime(); - buf.append(""); + buf.append(""); - buf.append(""); + buf.append("s"); offsetTotal = offsetTotal + peer.getClockSkew(); long sendWindow = peer.getSendWindowBytes(); - buf.append(""); + buf.append(""); - buf.append(""); + buf.append("K"); int rtt = peer.getRTT(); int rto = peer.getRTO(); - buf.append(""); + buf.append(""); - buf.append(""); + buf.append(""); - buf.append(""); + buf.append(""); - buf.append(""); + buf.append(""); long sent = peer.getPacketsTransmitted(); long recv = peer.getPacketsReceived(); - buf.append(""); + buf.append(""); - buf.append(""); + buf.append(""); //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(""); + buf.append(""); double recvDupPct = (double)peer.getPacketsReceivedDuplicate()/(double)peer.getPacketsReceived(); - buf.append(""); + buf.append(""); buf.append("\n"); out.write(buf.toString()); @@ -1980,25 +1980,25 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority numPeers++; } - buf.append("\n"); - buf.append(" "); - buf.append(" \n"); + buf.append(" "); + buf.append(" "); - buf.append(" \n"); - buf.append(" "); + buf.append(" \n"); + buf.append(" \n"); - buf.append(" \n"); + buf.append(" \n \n"); - buf.append(" \n"); - buf.append("
Peer"); if (sortFlags != FLAG_ALPHA) buf.append(" V "); - buf.append("Dir/IntroIdle"); + buf.append("DirIdle
"); 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("
In/Out"); + buf.append("In/Out
"); 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("
Up"); + buf.append("Up
"); appendSortLinks(buf, urlBase, sortFlags, "Sort by connection uptime", FLAG_UPTIME); - buf.append("
skew"); + buf.append("Skew
"); appendSortLinks(buf, urlBase, sortFlags, "Sort by clock skew", FLAG_SKEW); buf.append("
Cwnd"); + buf.append("Cwnd
"); appendSortLinks(buf, urlBase, sortFlags, "Sort by congestion window", FLAG_CWND); - buf.append("
Ssthresh"); + buf.append("Sst
"); appendSortLinks(buf, urlBase, sortFlags, "Sort by slow start threshold", FLAG_SSTHRESH); buf.append("
Rtt"); + buf.append("Rtt
"); appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time", FLAG_RTT); - buf.append("
Dev"); + buf.append("Dev
"); appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time deviation", FLAG_DEV); - buf.append("
Rto"); + buf.append("Rto
"); appendSortLinks(buf, urlBase, sortFlags, "Sort by retransmission timeout", FLAG_RTO); buf.append("
Mtu"); + buf.append("Mtu
"); appendSortLinks(buf, urlBase, sortFlags, "Sort by maximum transmit unit", FLAG_MTU); - buf.append("
Send"); + buf.append("TX
"); appendSortLinks(buf, urlBase, sortFlags, "Sort by packets sent", FLAG_SEND); - buf.append("
Recv"); + buf.append("RX
"); appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received", FLAG_RECV); buf.append("
Resent"); + buf.append("ReTX
"); appendSortLinks(buf, urlBase, sortFlags, "Sort by packets retransmitted", FLAG_RESEND); - buf.append("
DupRecv"); + buf.append("DupRX
"); appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received more than once", FLAG_DUP); buf.append("
"); + buf.append("
"); buf.append(_context.commSystem().renderPeerHTML(peer.getRemotePeer())); //byte ip[] = peer.getRemoteIP(); //if (ip != null) // buf.append(' ').append(_context.blocklist().toStr(ip)); - buf.append(""); + buf.append(" "); if (peer.isInbound()) - buf.append("in "); + buf.append("\"Inbound\" "); else - buf.append("out "); + buf.append("\"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("
"); - buf.append(" [choked]"); + buf.append(" Choked"); appended = true; } if (peer.getConsecutiveFailedSends() > 0) { if (!appended) buf.append("
"); - buf.append(" [").append(peer.getConsecutiveFailedSends()).append(" failures]"); + buf.append(" ").append(peer.getConsecutiveFailedSends()).append(" fail(s)"); appended = true; } if (_context.shitlist().isShitlisted(peer.getRemotePeer(), STYLE)) { if (!appended) buf.append("
"); - buf.append(" [shitlisted]"); + buf.append(" Shitlist"); appended = true; } //byte[] ip = getIP(peer.getRemotePeer()); //if (ip != null) // buf.append(' ').append(_context.blocklist().toStr(ip)); - buf.append("
"); + buf.append(" "); buf.append(idleIn); buf.append("s/"); buf.append(idleOut); - buf.append("s"); + buf.append(" "); 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(""); + buf.append(" "); buf.append(DataHelper.formatDuration(uptime)); - buf.append(""); + buf.append(" "); buf.append(peer.getClockSkew()); - buf.append("s"); + buf.append(" "); buf.append(sendWindow/1024); buf.append("K"); buf.append("/").append(peer.getConcurrentSends()); buf.append("/").append(peer.getConcurrentSendWindow()); buf.append("/").append(peer.getConsecutiveSendRejections()); - buf.append(""); + buf.append(" "); buf.append(peer.getSlowStartThreshold()/1024); - buf.append("K"); + buf.append(" "); buf.append(rtt); - buf.append(""); + buf.append(" "); buf.append(peer.getRTTDeviation()); - buf.append(""); + buf.append(" "); buf.append(rto); - buf.append(""); + buf.append(" "); buf.append(peer.getMTU()).append("/").append(peer.getReceiveMTU()); //.append('/'); //buf.append(peer.getMTUIncreases()).append('/'); //buf.append(peer.getMTUDecreases()); - buf.append(""); + buf.append(" "); buf.append(sent); - buf.append(""); + buf.append(" "); buf.append(recv); - buf.append(""); + buf.append(" "); //buf.append(formatPct(sendLostPct)); buf.append(resent); // + "/" + peer.getPacketsPeriodRetransmitted() + "/" + sent); //buf.append(peer.getPacketRetransmissionRate()); - buf.append(""); + buf.append(" "); buf.append(dupRecv); //formatPct(recvDupPct)); - buf.append("

Total"); +// buf.append("

Total"); buf.append(formatKBps(bpsIn)).append("/").append(formatKBps(bpsOut)); - buf.append("KBps").append(numPeers > 0 ? DataHelper.formatDuration(uptimeMsTotal/numPeers) : "0s"); - buf.append("").append(numPeers > 0 ? DataHelper.formatDuration(offsetTotal*1000/numPeers) : "0ms").append(""); + buf.append("K/s").append(numPeers > 0 ? DataHelper.formatDuration(uptimeMsTotal/numPeers) : "0s"); + buf.append(" ").append(numPeers > 0 ? DataHelper.formatDuration(offsetTotal*1000/numPeers) : "0ms").append(""); buf.append(numPeers > 0 ? cwinTotal/(numPeers*1024) + "K" : "0K"); - buf.append(" "); + buf.append("  "); buf.append(numPeers > 0 ? rttTotal/numPeers : 0); - buf.append(" "); + buf.append("   "); buf.append(numPeers > 0 ? rtoTotal/numPeers : 0); - buf.append(" "); - buf.append(sendTotal).append("").append(recvTotal).append("").append(resentTotal); - buf.append("").append(dupRecvTotal).append("

\n"); + buf.append("\n

  "); + buf.append(sendTotal).append(" ").append(recvTotal).append("").append(resentTotal); + buf.append(" ").append(dupRecvTotal).append("

\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(" (includes retransmission required by packet loss)

\n"); + buf.append("

Percentage of bytes retransmitted (lifetime): ").append(formatPct(bwResent)); + buf.append("

(Includes retransmission required by packet loss)

\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 = "

" + - "peer: the remote peer
\n" + - "dir: v means they offer to introduce us, ^ means we offer to introduce them
\n" + - "idle: the idle time is how long since a packet has been received or sent
\n" + - "in/out: the rates show a smoothed inbound and outbound transfer rate (KBytes per second)
\n" + - "up: the uptime is how long ago this session was established
\n" + - "skew: the skew says how far off the other user's clock is, relative to your own
\n" + - "cwnd: the congestion window is how many bytes in 'in flight' you can send w/out an acknowledgement /
\n" + - "      the number of currently active messages being sent /
\n" + - "      the maximum number of concurrent messages to send /
\n"+ - "      the number of consecutive sends which were blocked due to throws message window size
\n" + - "ssthresh: the slow start threshold help make sure the cwnd doesn't grow too fast
\n" + - "rtt: the round trip time is how long it takes to get an acknowledgement of a packet
\n" + - "dev: the standard deviation of the round trip time, to help control the retransmit timeout
\n" + - "rto: the retransmit timeout controls how frequently an unacknowledged packet will be retransmitted
\n" + - "mtu: current sending packet size / estimated receiving packet size
\n" + - "send: the number of packets sent to the peer
\n" + - "recv: the number of packets received from the peer
\n" + - "resent: the number of packets retransmitted to the peer
\n" + - "dupRecv: the number of duplicate packets received from the peer" + - "

\n"; + private static final String KEY = "

Definitions:

" + + "
Peer: the remote peer.
\n" + + "Dir: v means they offer to introduce us, ^ means we offer to introduce them.
\n" + + "Idle: the idle time is how long since a packet has been received or sent.
\n" + + "In/out: the rates show a smoothed inbound and outbound transfer rate (KBytes per second).
\n" + + "Up: the uptime is how long ago this session was established.
\n" + + "Skew: the skew says how far off the other user's clock is, relative to your own.
\n" + + "Cwnd: the congestion window is how many bytes in 'in flight' you can send w/out an acknowledgement, /
\n" + + "        the number of currently active messages being sent, /
\n" + + "        the maximum number of concurrent messages to send, /
\n"+ + "        the number of consecutive sends which were blocked due to throws message window size.
\n" + + "Sst: the slow start threshold helps make sure the cwnd doesn't grow too fast.
\n" + + "Rtt: the round trip time is how long it takes to get an acknowledgement of a packet.
\n" + + "Dev: the standard deviation of the round trip time, to help control the retransmit timeout.
\n" + + "Rto: the retransmit timeout controls how frequently an unacknowledged packet will be retransmitted.
\n" + + "Mtu: current sending packet size / estimated receiving packet size.
\n" + + "TX: the number of packets sent to the peer.
\n" + + "RX: the number of packets received from the peer.
\n" + + "ReTX: the number of packets retransmitted to the peer.
\n" + + "DupRX: the number of duplicate packets received from the peer." + + "
\n"; /** * Cache the bid to reduce object churn diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java index 7524e12c33..7b86ba83b1 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java +++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java @@ -405,7 +405,7 @@ public class TunnelPoolManager implements TunnelManagerFacade { public void renderStatusHTML(Writer out) throws IOException { - out.write("

Exploratory tunnels (config):

\n"); + out.write("

Exploratory tunnels (config):

\n"); renderPool(out, _inboundExploratory, _outboundExploratory); List destinations = null; @@ -455,41 +455,41 @@ public class TunnelPoolManager implements TunnelManagerFacade { } out.write(""); if (cfg.getReceiveTunnel() != null) - out.write("" + cfg.getReceiveTunnel().getTunnelId() +""); + out.write(" " + cfg.getReceiveTunnel().getTunnelId() +""); else - out.write("n/a"); + out.write(" n/a"); if (cfg.getReceiveFrom() != null) - out.write("" + netDbLink(cfg.getReceiveFrom()) +""); + out.write(" " + netDbLink(cfg.getReceiveFrom()) +""); else - out.write(" "); + out.write("  "); if (cfg.getSendTunnel() != null) - out.write("" + cfg.getSendTunnel().getTunnelId() +""); + out.write(" " + cfg.getSendTunnel().getTunnelId() +""); else - out.write(" "); + out.write("  "); if (cfg.getSendTo() != null) - out.write("" + netDbLink(cfg.getSendTo()) +""); + out.write(" " + netDbLink(cfg.getSendTo()) +""); else -// out.write(" "); - out.write(" "); +// out.write("  "); + out.write("  "); long timeLeft = cfg.getExpiration()-_context.clock().now(); if (timeLeft > 0) - out.write("" + DataHelper.formatDuration(timeLeft) + ""); + out.write(" " + DataHelper.formatDuration(timeLeft) + ""); else - out.write("(grace period)"); - out.write("" + cfg.getProcessedMessagesCount() + "KB"); + out.write(" (grace period)"); + out.write(" " + cfg.getProcessedMessagesCount() + "KB"); 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("" + bps + "Bps"); + out.write(" " + bps + "Bps"); if (cfg.getSendTo() == null) - out.write("Outbound Endpoint"); + out.write(" Outbound Endpoint"); else if (cfg.getReceiveFrom() == null) - out.write("Inbound Gateway"); + out.write(" Inbound Gateway"); else - out.write("Participant"); + out.write(" Participant"); out.write("\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("\"Inbound\""); + out.write(" \"Inbound\""); else - out.write("\"Outbound\""); - out.write("" + DataHelper.formatDuration(timeLeft) + "\n"); - out.write("" + info.getProcessedMessagesCount() + "KB\n"); + out.write(" \"Outbound\""); + out.write(" " + DataHelper.formatDuration(timeLeft) + "\n"); + out.write(" " + info.getProcessedMessagesCount() + "KB\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("" + (id == null ? "" : "" + id) + ""); + out.write(" " + (id == null ? "" : "" + id) + ""); } else { String cap = getCapacity(peer); - out.write("" + netDbLink(peer) + (id == null ? "" : " " + id) + cap + ""); + out.write(" " + netDbLink(peer) + (id == null ? "" : " " + id) + cap + ""); } if (info.getLength() < maxLength && (info.getLength() == 1 || j == info.getLength() - 2)) { for (int k = info.getLength(); k < maxLength; k++) - out.write(" "); + out.write("  "); } } out.write("\n"); @@ -583,8 +583,8 @@ public class TunnelPoolManager implements TunnelManagerFacade { live += pending.size(); } if (live <= 0) - out.write("
NNo tunnels; waiting for the grace period to end.
\n"); - out.write("
Lifetime bandwidth usage: " + DataHelper.formatSize(processedIn*1024) + "
No tunnels; waiting for the grace period to end.
\n"); + out.write("
Lifetime bandwidth usage: " + DataHelper.formatSize(processedIn*1024) + "B in, " + DataHelper.formatSize(processedOut*1024) + "B out
"); } @@ -605,25 +605,25 @@ public class TunnelPoolManager implements TunnelManagerFacade { out.write("

Tunnel Counts By Peer:

\n"); out.write("\n"); for (Hash h : peerList) { - out.write("
PeerExpl. + Client% of totalPart. from + to% of total
"); + out.write("
"); out.write(netDbLink(h)); - out.write("" + lc.count(h)); - out.write(""); + out.write(" " + lc.count(h)); + out.write(" "); if (tunnelCount > 0) out.write("" + (lc.count(h) * 100 / tunnelCount)); else out.write('0'); - out.write("" + pc.count(h)); - out.write(""); + out.write(" " + pc.count(h)); + out.write(" "); if (partCount > 0) out.write("" + (pc.count(h) * 100 / partCount)); else out.write('0'); out.write('\n'); } - out.write("
Tunnels" + tunnelCount); - out.write(" " + partCount); - out.write(" 
\n"); + out.write(" Tunnels " + tunnelCount); + out.write("   " + partCount); + out.write("  
\n"); } /** @return total number of non-fallback expl. + client tunnels */