From b222cd43f4571f4e4923e1cf9516f44a31b57aab Mon Sep 17 00:00:00 2001 From: cervantes Date: Sat, 12 Nov 2005 02:38:55 +0000 Subject: [PATCH] 2005-11-11 cervantes * Initial pass of the routerconsole revamp, starting with I2PTunnel and being progressively rolled out to other sections at later dates. Featuring abstracted W3C strict XHTML1.0 markup, with CSS providing layout and styling. * Implemented console themes. Users can create their own themes by creating css files in: {i2pdir}/docs/themes/console/{themename}/ and activating it using the routerconsole.theme={themename} advanced config property. Look at the example incomplete "defCon1" theme. Note: This is very much a work in progress. Folks might want to hold-off creating their own skins until the markup has solidified. * Added "routerconsole.javascript.disabled=true" to disable console client-side scripting and "routerconsole.css.disabled=true" to remove css styling (only rolled out in the i2ptunnel interface currently) * Fixed long standing bug with i2ptunnel client and server edit screens where tunnel count and depth properties would fail to save. Added backup quantity and variance configuration options. * Added basic accessibility support (key shortcuts, linear markup, alt and title information and form labels). * So far only tested on IE6, Firefox 1.0.6, Opera 8 and lynx. --- .../src/net/i2p/i2ptunnel/web/EditBean.java | 56 +- .../src/net/i2p/i2ptunnel/web/IndexBean.java | 87 ++- apps/i2ptunnel/jsp/edit.jsp | 43 +- apps/i2ptunnel/jsp/editClient.jsp | 546 +++++++++--------- apps/i2ptunnel/jsp/editServer.jsp | 464 ++++++++------- apps/i2ptunnel/jsp/index.jsp | 421 ++++++++------ history.txt | 23 +- .../src/net/i2p/router/RouterVersion.java | 4 +- 8 files changed, 927 insertions(+), 717 deletions(-) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java index 18cf7da4f..5ed8e26af 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java @@ -139,23 +139,63 @@ public class EditBean extends IndexBean { } } - public int getTunnelCount(int tunnel, int defaultCount) { + public int getTunnelQuantity(int tunnel, int defaultQuantity) { TunnelController tun = getController(tunnel); if (tun != null) { Properties opts = getOptions(tun); if (opts != null) { String len = opts.getProperty("inbound.quantity"); - if (len == null) return defaultCount; + if (len == null) return defaultQuantity; try { return Integer.parseInt(len); } catch (NumberFormatException nfe) { - return defaultCount; + return defaultQuantity; } } else { - return defaultCount; + return defaultQuantity; } } else { - return defaultCount; + return defaultQuantity; + } + } + + public int getTunnelBackupQuantity(int tunnel, int defaultBackupQuantity) { + TunnelController tun = getController(tunnel); + if (tun != null) { + Properties opts = getOptions(tun); + if (opts != null) { + String len = opts.getProperty("inbound.backupQuantity"); + if (len == null) return defaultBackupQuantity; + try { + return Integer.parseInt(len); + } catch (NumberFormatException nfe) { + return defaultBackupQuantity; + } + } else { + return defaultBackupQuantity; + } + } else { + return defaultBackupQuantity; + } + } + + public int getTunnelVariance(int tunnel, int defaultVariance) { + TunnelController tun = getController(tunnel); + if (tun != null) { + Properties opts = getOptions(tun); + if (opts != null) { + String len = opts.getProperty("inbound.lengthVariance"); + if (len == null) return defaultVariance; + try { + return Integer.parseInt(len); + } catch (NumberFormatException nfe) { + return defaultVariance; + } + } else { + return defaultVariance; + } + } else { + return defaultVariance; } } @@ -187,6 +227,10 @@ public class EditBean extends IndexBean { String val = opts.getProperty(key); if ("inbound.length".equals(key)) continue; if ("outbound.length".equals(key)) continue; + if ("inbound.lengthVariance".equals(key)) continue; + if ("outbound.lengthVariance".equals(key)) continue; + if ("inbound.backupQuantity".equals(key)) continue; + if ("outbound.backupQuantity".equals(key)) continue; if ("inbound.quantity".equals(key)) continue; if ("outbound.quantity".equals(key)) continue; if ("inbound.nickname".equals(key)) continue; @@ -224,4 +268,4 @@ public class EditBean extends IndexBean { } return props; } -} +} \ No newline at end of file diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java index 92b319544..43e85bf49 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java @@ -38,7 +38,9 @@ public class IndexBean { private String _i2cpHost; private String _i2cpPort; private String _tunnelDepth; - private String _tunnelCount; + private String _tunnelQuantity; + private String _tunnelVariance; + private String _tunnelBackupQuantity; private boolean _connectDelay; private String _customOptions; private String _proxyList; @@ -64,6 +66,10 @@ public class IndexBean { static final String PROP_NONCE = IndexBean.class.getName() + ".nonce"; static final String CLIENT_NICKNAME = "shared clients"; + public static final String PROP_THEME_NAME = "routerconsole.theme"; + public static final String PROP_CSS_DISABLED = "routerconsole.css.disabled"; + public static final String PROP_JS_DISABLED = "routerconsole.javascript.disabled"; + public IndexBean() { _context = I2PAppContext.getGlobalContext(); _log = _context.logManager().getLog(IndexBean.class); @@ -121,13 +127,13 @@ public class IndexBean { return ""; if ( (_prevNonce != _curNonce) && (!validPassphrase(_passphrase)) ) return "Invalid nonce, are you being spoofed?"; - if ("Stop all tunnels".equals(_action)) + if ("Stop all".equals(_action)) return stopAll(); - else if ("Start all tunnels".equals(_action)) + else if ("Start all".equals(_action)) return startAll(); else if ("Restart all".equals(_action)) return restartAll(); - else if ("Reload config".equals(_action)) + else if ("Reload configuration".equals(_action)) return reloadConfig(); else if ("stop".equals(_action)) return stop(); @@ -213,14 +219,22 @@ public class IndexBean { "client".equals(c.getType()) ) && "true".equalsIgnoreCase(c.getSharedClient())) { Properties cOpt = c.getConfig(""); - if (_tunnelCount != null) { - cOpt.setProperty("option.inbound.quantity", _tunnelCount); - cOpt.setProperty("option.outbound.quantity", _tunnelCount); + if (_tunnelQuantity != null) { + cOpt.setProperty("option.inbound.quantity", _tunnelQuantity); + cOpt.setProperty("option.outbound.quantity", _tunnelQuantity); } if (_tunnelDepth != null) { cOpt.setProperty("option.inbound.length", _tunnelDepth); cOpt.setProperty("option.outbound.length", _tunnelDepth); } + if (_tunnelVariance != null) { + cOpt.setProperty("option.inbound.lengthVariance", _tunnelVariance); + cOpt.setProperty("option.outbound.lengthVariance", _tunnelVariance); + } + if (_tunnelBackupQuantity != null) { + cOpt.setProperty("option.inbound.backupQuantity", _tunnelBackupQuantity); + cOpt.setProperty("option.outbound.backupQuantity", _tunnelBackupQuantity); + } cOpt.setProperty("option.inbound.nickname", CLIENT_NICKNAME); cOpt.setProperty("option.outbound.nickname", CLIENT_NICKNAME); @@ -275,6 +289,24 @@ public class IndexBean { // The remaining methods are simple bean props for the jsp to query //// + public String getTheme() { + String theme = _context.getProperty(PROP_THEME_NAME); + if (theme != null) + return "/themes/console/" + theme + "/"; + else + return "/themes/console/"; + } + + public boolean allowCSS() { + String css = _context.getProperty(PROP_CSS_DISABLED); + return (css == null); + } + + public boolean allowJS() { + String js = _context.getProperty(PROP_JS_DISABLED); + return (js == null); + } + public int getTunnelCount() { if (_group == null) return 0; return _group.getControllers().size(); @@ -313,10 +345,10 @@ public class IndexBean { } public String getTypeName(String internalType) { - if ("client".equals(internalType)) return "Client proxy"; - else if ("httpclient".equals(internalType)) return "HTTP proxy"; - else if ("ircclient".equals(internalType)) return "IRC proxy"; - else if ("server".equals(internalType)) return "Server"; + if ("client".equals(internalType)) return "Standard client"; + else if ("httpclient".equals(internalType)) return "HTTP client"; + else if ("ircclient".equals(internalType)) return "IRC client"; + else if ("server".equals(internalType)) return "Standard server"; else if ("httpserver".equals(internalType)) return "HTTP server"; else return internalType; } @@ -424,8 +456,16 @@ public class IndexBean { _tunnelDepth = (tunnelDepth != null ? tunnelDepth.trim() : null); } /** how many parallel inbound tunnels to use */ - public void setTunnelCount(String tunnelCount) { - _tunnelCount = (tunnelCount != null ? tunnelCount.trim() : null); + public void setTunnelQuantity(String tunnelQuantity) { + _tunnelQuantity = (tunnelQuantity != null ? tunnelQuantity.trim() : null); + } + /** how much randomisation to apply to the depth of tunnels */ + public void setTunnelVariance(String tunnelVariance) { + _tunnelVariance = (tunnelVariance != null ? tunnelVariance.trim() : null); + } + /** how many tunnels to hold in reserve to guard against failures */ + public void setTunnelBackupQuantity(String tunnelBackupQuantity) { + _tunnelBackupQuantity = (tunnelBackupQuantity != null ? tunnelBackupQuantity.trim() : null); } /** what I2P session overrides should be used */ public void setCustomOptions(String customOptions) { @@ -582,6 +622,7 @@ public class IndexBean { } else { return null; } + return config; } @@ -611,6 +652,10 @@ public class IndexBean { if ("outbound.length".equals(key)) continue; if ("inbound.quantity".equals(key)) continue; if ("outbound.quantity".equals(key)) continue; + if ("inbound.lengthVariance".equals(key)) continue; + if ("outbound.lengthVariance".equals(key)) continue; + if ("inbound.backupQuantity".equals(key)) continue; + if ("outbound.backupQuantity".equals(key)) continue; if ("inbound.nickname".equals(key)) continue; if ("outbound.nickname".equals(key)) continue; if ("i2p.streaming.connectDelay".equals(key)) continue; @@ -621,14 +666,22 @@ public class IndexBean { config.setProperty("startOnLoad", _startOnLoad + ""); - if (_tunnelCount != null) { - config.setProperty("option.inbound.quantity", _tunnelCount); - config.setProperty("option.outbound.quantity", _tunnelCount); + if (_tunnelQuantity != null) { + config.setProperty("option.inbound.quantity", _tunnelQuantity); + config.setProperty("option.outbound.quantity", _tunnelQuantity); } if (_tunnelDepth != null) { config.setProperty("option.inbound.length", _tunnelDepth); config.setProperty("option.outbound.length", _tunnelDepth); } + if (_tunnelVariance != null) { + config.setProperty("option.inbound.lengthVariance", _tunnelVariance); + config.setProperty("option.outbound.lengthVariance", _tunnelVariance); + } + if (_tunnelBackupQuantity != null) { + config.setProperty("option.inbound.backupQuantity", _tunnelBackupQuantity); + config.setProperty("option.outbound.backupQuantity", _tunnelBackupQuantity); + } if (_connectDelay) config.setProperty("option.i2p.streaming.connectDelay", "1000"); else @@ -673,4 +726,4 @@ public class IndexBean { buf.append((String)msgs.get(i)).append("\n"); } } -} +} \ No newline at end of file diff --git a/apps/i2ptunnel/jsp/edit.jsp b/apps/i2ptunnel/jsp/edit.jsp index d9c6bc407..931629fb1 100644 --- a/apps/i2ptunnel/jsp/edit.jsp +++ b/apps/i2ptunnel/jsp/edit.jsp @@ -1,26 +1,25 @@ -<%@page contentType="text/html" import="net.i2p.i2ptunnel.web.EditBean" %> - -<% String tun = request.getParameter("tunnel"); - if (tun != null) { - try { - int curTunnel = Integer.parseInt(tun); - if (EditBean.staticIsClient(curTunnel)) { - %><% - } else { - %><% - } - } catch (NumberFormatException nfe) { - %>Invalid tunnel parameter<% - } - } else { - String type = request.getParameter("type"); - int curTunnel = -1; - if ("client".equals(type) || "httpclient".equals(type) || "ircclient".equals(type)) { - %><% - } else if ("server".equals(type) || "httpserver".equals(type)) { - %><% +<%@page contentType="text/html" import="net.i2p.i2ptunnel.web.EditBean" %><% +String tun = request.getParameter("tunnel"); + if (tun != null) { + try { + int curTunnel = Integer.parseInt(tun); + if (EditBean.staticIsClient(curTunnel)) { + %><% } else { - %>Invalid tunnel type<% + %><% } + } catch (NumberFormatException nfe) { + %>Invalid tunnel parameter<% } +} else { + String type = request.getParameter("type"); + int curTunnel = -1; + if ("client".equals(type) || "httpclient".equals(type) || "ircclient".equals(type)) { + %><% + } else if ("server".equals(type) || "httpserver".equals(type)) { + %><% + } else { + %>Invalid tunnel type<% + } +} %> \ No newline at end of file diff --git a/apps/i2ptunnel/jsp/editClient.jsp b/apps/i2ptunnel/jsp/editClient.jsp index 5fdef6906..c9378d630 100644 --- a/apps/i2ptunnel/jsp/editClient.jsp +++ b/apps/i2ptunnel/jsp/editClient.jsp @@ -1,4 +1,5 @@ -<%@page contentType="text/html" %> +<%@page contentType="text/html" import="net.i2p.i2ptunnel.web.EditBean"%> + <% String tun = request.getParameter("tunnel"); int curTunnel = -1; @@ -10,284 +11,277 @@ } } %> - + -I2PTunnel Webmanager + I2PTunnel Webmanager - Edit + + + + <% if (editBean.allowCSS()) { + %> + + + <% } + %> - -
-" /> - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -<% if ("httpclient".equals(editBean.getInternalType(curTunnel))) { %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-<% if (curTunnel >= 0) { %> -Edit proxy settings -<% } else { %> -New proxy settings -<% } %> -
Name: - - -
Type: -<% -if (curTunnel >= 0) { - %><%=editBean.getTunnelType(curTunnel)%> - -<% -} else { - %><%=editBean.getTypeName(request.getParameter("type"))%> -" /> -<% -} -%>
Description: - - -
Start automatically?: - -<% if (editBean.startAutomatically(curTunnel)) { %> - -<% } else { %> - -<% } %> -(Check the Box for 'YES') -
Listening Port: - - -
Accessable by: - - -   -others: - -<% } else if ("0.0.0.0".equals(clientInterface)) { %> - - - + - -   -others: - -<% } else { %> - - - +
+
+ <% + String tunnelTypeName = ""; + String tunnelType = ""; + if (curTunnel >= 0) { + tunnelTypeName = editBean.getTunnelType(curTunnel); + tunnelType = editBean.getInternalType(curTunnel); + %>

Edit proxy settings

<% + } else { + tunnelTypeName = editBean.getTypeName(request.getParameter("type")); + tunnelType = request.getParameter("type"); + %>

New proxy settings

<% + } %> + " /> + + +
+ +
+
+
- -   -others: - -<% } %> +
+ + +
+
+ + <%=tunnelTypeName%> +
+
+ + +
+ +
+
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+
+ + <% if ("httpclient".equals(editBean.getInternalType(curTunnel))) { + %>
+ + +
+ <% } else { + %>
+ + + (name or destination) +
+ <% } + %>
+ + +
+
+ + class="tickbox" /> + (for request/response connections) +
+
+ + class="tickbox" /> + (Share tunnels with other clients and irc/httpclients? Change requires restart of client proxy) +
+
+ + class="tickbox" /> + (Check the Box for 'YES') +
+ + +
-
Outproxies: -<% } else { %> -Target: -<% } %> - -<% if ("httpclient".equals(editBean.getInternalType(curTunnel))) { %> - -<% } else { %> - -<% } %> -(name or destination) -
-Delayed connect? - -<% if (editBean.shouldDelay(curTunnel)) { %> - -<% } else { %> - -<% } %> -(for request/response connections) -
Profile: - - -
-Shared Client - -<% if (editBean.isSharedClient(curTunnel)) { %> - -<% } else { %> - -<% } %> -(Share tunnels with other clients and irc/httpclients? Change requires restart of client proxy) -
-
-Advanced networking options
-(NOTE: when this client proxy is configured to share tunnels, then these options are for all the shared proxy clients!)
-
-Tunnel depth: - -
Tunnel count: - - -
I2CP host: - - -
I2CP port: - -
-
Custom options: - - -
-
-
-Save: - - -
Delete? - -    -confirm delete: - -
-
-
- - +
+
+

Advanced networking options

+ (NOTE: when this client proxy is configured to share tunnels, then these options are for all the shared proxy clients!) +
+ +
+
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+
+ +
+ +
+
+ + +
+
+ + +
+ +
+
+
+ +
+ + +
+ + +
+
+
+ +
+ + + + \ No newline at end of file diff --git a/apps/i2ptunnel/jsp/editServer.jsp b/apps/i2ptunnel/jsp/editServer.jsp index 60959dd5f..943357f61 100644 --- a/apps/i2ptunnel/jsp/editServer.jsp +++ b/apps/i2ptunnel/jsp/editServer.jsp @@ -1,4 +1,5 @@ -<%@page contentType="text/html" %> +<%@page contentType="text/html" import="net.i2p.i2ptunnel.web.EditBean"%> + <% String tun = request.getParameter("tunnel"); int curTunnel = -1; @@ -10,224 +11,249 @@ } } %> - + -I2PTunnel Webmanager + I2PTunnel Webmanager - Edit + + + + <% if (editBean.allowCSS()) { + %> + + + <% } + %> - -
-" /> - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - -<% String curType = editBean.getInternalType(curTunnel); - if ( (curType == null) || (curType.trim().length() <= 0) ) - curType = request.getParameter("type"); - if ("httpserver".equals(curType)) { %> - - - -<% } %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-<% if (curTunnel >= 0) { %> -Edit server settings -<% } else { %> -New server settings -<% } %> -
Name: - - -
Type: -<% -if (curTunnel >= 0) { - %><%=editBean.getTunnelType(curTunnel)%> - -<% -} else { - %><%=editBean.getTypeName(request.getParameter("type"))%> -" /> -<% -} -%>
Description: - - -
Start automatically?: - -<% if (editBean.startAutomatically(curTunnel)) { %> - -<% } else { %> - -<% } %> -(Check the Box for 'YES') -
Target: - -Host: -Port: -
Website name: -
Private key file: -
Profile: - - -
Local destination:
(if known)
-
-Advanced networking options
-
-
-Tunnel depth: - -
Tunnel count: - - -
I2CP host: - - -
I2CP port: - -
-
Custom options: - - -
-
-
-Save: - - -
Delete? - -    -confirm delete: - -
-
-
+ + + +
+ +
+
+ <% + String tunnelTypeName = ""; + String tunnelType = ""; + if (curTunnel >= 0) { + tunnelTypeName = editBean.getTunnelType(curTunnel); + tunnelType = editBean.getInternalType(curTunnel); + %>

Edit server settings

<% + } else { + tunnelTypeName = editBean.getTypeName(request.getParameter("type")); + tunnelType = request.getParameter("type"); + %>

New server settings

<% + } %> + " /> + + +
+ +
+
+
+ +
+ + +
+
+ + <%=tunnelTypeName%> +
+
+ + +
+
+ + class="tickbox" /> + (Check the Box for 'YES') +
+ +
+
+
+ +
+ +
+
+ + +
+
+ + +
+ +
+
+
+ + <% if ("httpserver".equals(tunnelType)) { + %>
+ + +
+ <% } + %>
+ + +
+
+ + +
+
+ + + (if known) +
+ + +
+ +
+
+

Advanced networking options

+
+ +
+
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+
+ +
+ +
+
+ + +
+
+ + +
+ +
+
+
+ +
+ + +
+ + +
+
+
+ +
+
+ - + \ No newline at end of file diff --git a/apps/i2ptunnel/jsp/index.jsp b/apps/i2ptunnel/jsp/index.jsp index b66c18d50..50c71aec7 100644 --- a/apps/i2ptunnel/jsp/index.jsp +++ b/apps/i2ptunnel/jsp/index.jsp @@ -1,185 +1,258 @@ -<%@page contentType="text/html" import="net.i2p.i2ptunnel.web.IndexBean" %> - +<%@page contentType="text/html" import="net.i2p.i2ptunnel.web.IndexBean"%> + - - + -I2PTunnel Webmanager + I2PTunnel Webmanager - List + + + + + <% if (indexBean.allowCSS()) { + %> + + + <% } + %> - - - - - -
-
- - - - - -
New Messages:
-refresh -
- -
-
-
- - - - -
-
+ + + +
+
+

Status Messages

+
- - - - - - - - - - - -<% for (int curClient = 0; curClient < indexBean.getTunnelCount(); curClient++) { - if (!indexBean.isClient(curClient)) continue; %> - - - - - - - - - - - - - -<% } %> -
-Your Client Tunnels:
-
-
Name:Port:Type:Interface:Status:
-<%=indexBean.getTunnelName(curClient) %><%=indexBean.getClientPort(curClient) %><%=indexBean.getTunnelType(curClient) %><%=indexBean.getClientInterface(curClient) %><% - switch (indexBean.getTunnelStatus(curClient)) { - case IndexBean.STARTING: -%>Starting... -[STOP]<% - break; - case IndexBean.RUNNING: -%>Running -[STOP]<% - break; - case IndexBean.NOT_RUNNING: -%>Not Running -[START]<% - break; - } -%>
Destination:
Description:<%=indexBean.getTunnelDescription(curClient) %>
-
-
+
+
+
- - - - -
-
- - - - - - - - - + -<% for (int curServer = 0; curServer < indexBean.getTunnelCount(); curServer++) { - if (indexBean.isClient(curServer)) continue; %> +
+
+
- - - - - - - -<% } %> + + -
-Your Server Tunnels:
-
-
Name: - -Points at: - -Status: -
-<%=indexBean.getTunnelName(curServer)%> -<%=indexBean.getServerTarget(curServer)%><% - switch (indexBean.getTunnelStatus(curServer)) { - case IndexBean.RUNNING: -%>Running -[STOP]<% - if ("httpserver".equals(indexBean.getInternalType(curServer))) { -%> (preview)<% - } - break; - case IndexBean.NOT_RUNNING: -%>Not Running -[START]<% - break; - case IndexBean.STARTING: -%> -Starting... -[STOP]<% - break; - } -%> -
Description:<%=indexBean.getTunnelDescription(curServer)%>
-
-
- - - - -
-
- - - - - - - - - - - - -
-Operations Menu - Please chose from below!

-
- - - - - -
-Add new: - -
-
+
+
+

Local Client Tunnels

+
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+
+ <% + for (int curClient = 0; curClient < indexBean.getTunnelCount(); curClient++) { + if (!indexBean.isClient(curClient)) continue; + %> + +
+ + <%=indexBean.getClientPort(curClient)%> +
+
+ + <%=indexBean.getTunnelType(curClient)%> +
+
+ + <%=indexBean.getClientInterface(curClient)%> +
+
+ + <% + switch (indexBean.getTunnelStatus(curClient)) { + case IndexBean.STARTING: + %>
Starting...
+ Stop + <% + break; + case IndexBean.RUNNING: + %>
Running
+ Stop + <% + break; + case IndexBean.NOT_RUNNING: + %>
Stopped
+ Start + <% + break; + } + %>
+ +
+ + +
+ +
+ +
<%=indexBean.getTunnelDescription(curClient)%>
+
+ +
+
+
+ <% + } + %> +
+
+
+ + +
+ +
+
+

Local Server Tunnels

+
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+ + <% + for (int curServer = 0; curServer < indexBean.getTunnelCount(); curServer++) { + if (indexBean.isClient(curServer)) continue; + + %> + +
+ + <%=indexBean.getServerTarget(curServer)%> +
+
+ <% + if ("httpserver".equals(indexBean.getInternalType(curServer)) && indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) { + %> + Preview + <% + } else { + %>No Preview + <% + } + %>
+
+ + <% + switch (indexBean.getTunnelStatus(curServer)) { + case IndexBean.STARTING: + %>
Starting...
+ Stop + <% + break; + case IndexBean.RUNNING: + %>
Running
+ Stop + <% + break; + case IndexBean.NOT_RUNNING: + %>
Stopped
+ Start + <% + break; + } + %>
+ +
+ +
<%=indexBean.getTunnelDescription(curServer)%>
+
+ +
+
+
+ <% + } + %> +
+
+
+ + +
+ + + + diff --git a/history.txt b/history.txt index 3fbe1489e..083e6e331 100644 --- a/history.txt +++ b/history.txt @@ -1,4 +1,25 @@ -$Id: history.txt,v 1.317 2005/11/10 22:46:36 jrandom Exp $ +$Id: history.txt,v 1.318 2005/11/11 06:29:16 jrandom Exp $ + +2005-11-11 cervantes + * Initial pass of the routerconsole revamp, starting with I2PTunnel and + being progressively rolled out to other sections at later dates. + Featuring abstracted W3C strict XHTML1.0 markup, with CSS providing + layout and styling. + * Implemented console themes. Users can create their own themes by + creating css files in: {i2pdir}/docs/themes/console/{themename}/ + and activating it using the routerconsole.theme={themename} advanced + config property. Look at the example incomplete "defCon1" theme. + Note: This is very much a work in progress. Folks might want to hold-off + creating their own skins until the markup has solidified. + * Added "routerconsole.javascript.disabled=true" to disable console + client-side scripting and "routerconsole.css.disabled=true" to remove + css styling (only rolled out in the i2ptunnel interface currently) + * Fixed long standing bug with i2ptunnel client and server edit screens + where tunnel count and depth properties would fail to save. Added + backup quantity and variance configuration options. + * Added basic accessibility support (key shortcuts, linear markup, alt and + title information and form labels). + * So far only tested on IE6, Firefox 1.0.6, Opera 8 and lynx. 2005-11-11 jrandom * Default Syndie to single user mode, and automatically log into a default diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index fba01c6d2..7a1196067 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -15,9 +15,9 @@ import net.i2p.CoreVersion; * */ public class RouterVersion { - public final static String ID = "$Revision: 1.285 $ $Date: 2005/11/06 17:25:18 $"; + public final static String ID = "$Revision: 1.286 $ $Date: 2005/11/10 22:46:36 $"; public final static String VERSION = "0.6.1.4"; - public final static long BUILD = 6; + public final static long BUILD = 7; public static void main(String args[]) { System.out.println("I2P Router version: " + VERSION + "-" + BUILD); System.out.println("Router ID: " + RouterVersion.ID);