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.
This commit is contained in:
@ -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);
|
TunnelController tun = getController(tunnel);
|
||||||
if (tun != null) {
|
if (tun != null) {
|
||||||
Properties opts = getOptions(tun);
|
Properties opts = getOptions(tun);
|
||||||
if (opts != null) {
|
if (opts != null) {
|
||||||
String len = opts.getProperty("inbound.quantity");
|
String len = opts.getProperty("inbound.quantity");
|
||||||
if (len == null) return defaultCount;
|
if (len == null) return defaultQuantity;
|
||||||
try {
|
try {
|
||||||
return Integer.parseInt(len);
|
return Integer.parseInt(len);
|
||||||
} catch (NumberFormatException nfe) {
|
} catch (NumberFormatException nfe) {
|
||||||
return defaultCount;
|
return defaultQuantity;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return defaultCount;
|
return defaultQuantity;
|
||||||
}
|
}
|
||||||
} else {
|
} 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);
|
String val = opts.getProperty(key);
|
||||||
if ("inbound.length".equals(key)) continue;
|
if ("inbound.length".equals(key)) continue;
|
||||||
if ("outbound.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 ("inbound.quantity".equals(key)) continue;
|
||||||
if ("outbound.quantity".equals(key)) continue;
|
if ("outbound.quantity".equals(key)) continue;
|
||||||
if ("inbound.nickname".equals(key)) continue;
|
if ("inbound.nickname".equals(key)) continue;
|
||||||
|
@ -38,7 +38,9 @@ public class IndexBean {
|
|||||||
private String _i2cpHost;
|
private String _i2cpHost;
|
||||||
private String _i2cpPort;
|
private String _i2cpPort;
|
||||||
private String _tunnelDepth;
|
private String _tunnelDepth;
|
||||||
private String _tunnelCount;
|
private String _tunnelQuantity;
|
||||||
|
private String _tunnelVariance;
|
||||||
|
private String _tunnelBackupQuantity;
|
||||||
private boolean _connectDelay;
|
private boolean _connectDelay;
|
||||||
private String _customOptions;
|
private String _customOptions;
|
||||||
private String _proxyList;
|
private String _proxyList;
|
||||||
@ -64,6 +66,10 @@ public class IndexBean {
|
|||||||
static final String PROP_NONCE = IndexBean.class.getName() + ".nonce";
|
static final String PROP_NONCE = IndexBean.class.getName() + ".nonce";
|
||||||
static final String CLIENT_NICKNAME = "shared clients";
|
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() {
|
public IndexBean() {
|
||||||
_context = I2PAppContext.getGlobalContext();
|
_context = I2PAppContext.getGlobalContext();
|
||||||
_log = _context.logManager().getLog(IndexBean.class);
|
_log = _context.logManager().getLog(IndexBean.class);
|
||||||
@ -121,13 +127,13 @@ public class IndexBean {
|
|||||||
return "";
|
return "";
|
||||||
if ( (_prevNonce != _curNonce) && (!validPassphrase(_passphrase)) )
|
if ( (_prevNonce != _curNonce) && (!validPassphrase(_passphrase)) )
|
||||||
return "Invalid nonce, are you being spoofed?";
|
return "Invalid nonce, are you being spoofed?";
|
||||||
if ("Stop all tunnels".equals(_action))
|
if ("Stop all".equals(_action))
|
||||||
return stopAll();
|
return stopAll();
|
||||||
else if ("Start all tunnels".equals(_action))
|
else if ("Start all".equals(_action))
|
||||||
return startAll();
|
return startAll();
|
||||||
else if ("Restart all".equals(_action))
|
else if ("Restart all".equals(_action))
|
||||||
return restartAll();
|
return restartAll();
|
||||||
else if ("Reload config".equals(_action))
|
else if ("Reload configuration".equals(_action))
|
||||||
return reloadConfig();
|
return reloadConfig();
|
||||||
else if ("stop".equals(_action))
|
else if ("stop".equals(_action))
|
||||||
return stop();
|
return stop();
|
||||||
@ -213,14 +219,22 @@ public class IndexBean {
|
|||||||
"client".equals(c.getType())
|
"client".equals(c.getType())
|
||||||
) && "true".equalsIgnoreCase(c.getSharedClient())) {
|
) && "true".equalsIgnoreCase(c.getSharedClient())) {
|
||||||
Properties cOpt = c.getConfig("");
|
Properties cOpt = c.getConfig("");
|
||||||
if (_tunnelCount != null) {
|
if (_tunnelQuantity != null) {
|
||||||
cOpt.setProperty("option.inbound.quantity", _tunnelCount);
|
cOpt.setProperty("option.inbound.quantity", _tunnelQuantity);
|
||||||
cOpt.setProperty("option.outbound.quantity", _tunnelCount);
|
cOpt.setProperty("option.outbound.quantity", _tunnelQuantity);
|
||||||
}
|
}
|
||||||
if (_tunnelDepth != null) {
|
if (_tunnelDepth != null) {
|
||||||
cOpt.setProperty("option.inbound.length", _tunnelDepth);
|
cOpt.setProperty("option.inbound.length", _tunnelDepth);
|
||||||
cOpt.setProperty("option.outbound.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.inbound.nickname", CLIENT_NICKNAME);
|
||||||
cOpt.setProperty("option.outbound.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
|
// 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() {
|
public int getTunnelCount() {
|
||||||
if (_group == null) return 0;
|
if (_group == null) return 0;
|
||||||
return _group.getControllers().size();
|
return _group.getControllers().size();
|
||||||
@ -313,10 +345,10 @@ public class IndexBean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getTypeName(String internalType) {
|
public String getTypeName(String internalType) {
|
||||||
if ("client".equals(internalType)) return "Client proxy";
|
if ("client".equals(internalType)) return "Standard client";
|
||||||
else if ("httpclient".equals(internalType)) return "HTTP proxy";
|
else if ("httpclient".equals(internalType)) return "HTTP client";
|
||||||
else if ("ircclient".equals(internalType)) return "IRC proxy";
|
else if ("ircclient".equals(internalType)) return "IRC client";
|
||||||
else if ("server".equals(internalType)) return "Server";
|
else if ("server".equals(internalType)) return "Standard server";
|
||||||
else if ("httpserver".equals(internalType)) return "HTTP server";
|
else if ("httpserver".equals(internalType)) return "HTTP server";
|
||||||
else return internalType;
|
else return internalType;
|
||||||
}
|
}
|
||||||
@ -424,8 +456,16 @@ public class IndexBean {
|
|||||||
_tunnelDepth = (tunnelDepth != null ? tunnelDepth.trim() : null);
|
_tunnelDepth = (tunnelDepth != null ? tunnelDepth.trim() : null);
|
||||||
}
|
}
|
||||||
/** how many parallel inbound tunnels to use */
|
/** how many parallel inbound tunnels to use */
|
||||||
public void setTunnelCount(String tunnelCount) {
|
public void setTunnelQuantity(String tunnelQuantity) {
|
||||||
_tunnelCount = (tunnelCount != null ? tunnelCount.trim() : null);
|
_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 */
|
/** what I2P session overrides should be used */
|
||||||
public void setCustomOptions(String customOptions) {
|
public void setCustomOptions(String customOptions) {
|
||||||
@ -582,6 +622,7 @@ public class IndexBean {
|
|||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -611,6 +652,10 @@ public class IndexBean {
|
|||||||
if ("outbound.length".equals(key)) continue;
|
if ("outbound.length".equals(key)) continue;
|
||||||
if ("inbound.quantity".equals(key)) continue;
|
if ("inbound.quantity".equals(key)) continue;
|
||||||
if ("outbound.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 ("inbound.nickname".equals(key)) continue;
|
||||||
if ("outbound.nickname".equals(key)) continue;
|
if ("outbound.nickname".equals(key)) continue;
|
||||||
if ("i2p.streaming.connectDelay".equals(key)) continue;
|
if ("i2p.streaming.connectDelay".equals(key)) continue;
|
||||||
@ -621,14 +666,22 @@ public class IndexBean {
|
|||||||
|
|
||||||
config.setProperty("startOnLoad", _startOnLoad + "");
|
config.setProperty("startOnLoad", _startOnLoad + "");
|
||||||
|
|
||||||
if (_tunnelCount != null) {
|
if (_tunnelQuantity != null) {
|
||||||
config.setProperty("option.inbound.quantity", _tunnelCount);
|
config.setProperty("option.inbound.quantity", _tunnelQuantity);
|
||||||
config.setProperty("option.outbound.quantity", _tunnelCount);
|
config.setProperty("option.outbound.quantity", _tunnelQuantity);
|
||||||
}
|
}
|
||||||
if (_tunnelDepth != null) {
|
if (_tunnelDepth != null) {
|
||||||
config.setProperty("option.inbound.length", _tunnelDepth);
|
config.setProperty("option.inbound.length", _tunnelDepth);
|
||||||
config.setProperty("option.outbound.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)
|
if (_connectDelay)
|
||||||
config.setProperty("option.i2p.streaming.connectDelay", "1000");
|
config.setProperty("option.i2p.streaming.connectDelay", "1000");
|
||||||
else
|
else
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
<%@page contentType="text/html" import="net.i2p.i2ptunnel.web.EditBean" %>
|
<%@page contentType="text/html" import="net.i2p.i2ptunnel.web.EditBean" %><%
|
||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
String tun = request.getParameter("tunnel");
|
||||||
<% String tun = request.getParameter("tunnel");
|
|
||||||
if (tun != null) {
|
if (tun != null) {
|
||||||
try {
|
try {
|
||||||
int curTunnel = Integer.parseInt(tun);
|
int curTunnel = Integer.parseInt(tun);
|
||||||
@ -12,7 +11,7 @@
|
|||||||
} catch (NumberFormatException nfe) {
|
} catch (NumberFormatException nfe) {
|
||||||
%>Invalid tunnel parameter<%
|
%>Invalid tunnel parameter<%
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
String type = request.getParameter("type");
|
String type = request.getParameter("type");
|
||||||
int curTunnel = -1;
|
int curTunnel = -1;
|
||||||
if ("client".equals(type) || "httpclient".equals(type) || "ircclient".equals(type)) {
|
if ("client".equals(type) || "httpclient".equals(type) || "ircclient".equals(type)) {
|
||||||
@ -22,5 +21,5 @@
|
|||||||
} else {
|
} else {
|
||||||
%>Invalid tunnel type<%
|
%>Invalid tunnel type<%
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
%>
|
%>
|
@ -1,4 +1,5 @@
|
|||||||
<%@page contentType="text/html" %>
|
<%@page contentType="text/html" import="net.i2p.i2ptunnel.web.EditBean"%><?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
<jsp:useBean class="net.i2p.i2ptunnel.web.EditBean" id="editBean" scope="request" />
|
<jsp:useBean class="net.i2p.i2ptunnel.web.EditBean" id="editBean" scope="request" />
|
||||||
<% String tun = request.getParameter("tunnel");
|
<% String tun = request.getParameter("tunnel");
|
||||||
int curTunnel = -1;
|
int curTunnel = -1;
|
||||||
@ -10,284 +11,277 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
%>
|
%>
|
||||||
<html>
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<title>I2PTunnel Webmanager</title>
|
<title>I2PTunnel Webmanager - Edit</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
|
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
||||||
|
|
||||||
|
<% if (editBean.allowCSS()) {
|
||||||
|
%><link href="images/favicon.ico" type="image/x-icon" rel="shortcut icon" />
|
||||||
|
<link href="<%=editBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="<%=editBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
|
||||||
|
<% }
|
||||||
|
%>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body id="tunnelEditPage">
|
||||||
<form action="index.jsp">
|
<div id="pageHeader">
|
||||||
<input type="hidden" name="tunnel" value="<%=request.getParameter("tunnel")%>" />
|
</div>
|
||||||
<input type="hidden" name="nonce" value="<%=editBean.getNextNonce()%>" />
|
|
||||||
<table width="80%" align="center" border="0" cellpadding="1" cellspacing="1">
|
|
||||||
<tr>
|
|
||||||
<td style="background-color:#000">
|
|
||||||
<div style="background-color:#ffffed">
|
|
||||||
<table width="100%" align="center" border="0" cellpadding="4" cellspacing="1">
|
|
||||||
<tr>
|
|
||||||
<td colspan="2" align="center">
|
|
||||||
<% if (curTunnel >= 0) { %>
|
|
||||||
<b>Edit proxy settings</b>
|
|
||||||
<% } else { %>
|
|
||||||
<b>New proxy settings</b>
|
|
||||||
<% } %>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><b>Name: </b>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<input type="text" size="30" maxlength="50" name="name" value="<%=editBean.getTunnelName(curTunnel)%>" />
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><b>Type: </b>
|
|
||||||
<td><%
|
|
||||||
if (curTunnel >= 0) {
|
|
||||||
%><%=editBean.getTunnelType(curTunnel)%>
|
|
||||||
<input type="hidden" name="type" value="<%=editBean.getInternalType(curTunnel)%>" />
|
|
||||||
<%
|
|
||||||
} else {
|
|
||||||
%><%=editBean.getTypeName(request.getParameter("type"))%>
|
|
||||||
<input type="hidden" name="type" value="<%=request.getParameter("type")%>" />
|
|
||||||
<%
|
|
||||||
}
|
|
||||||
%></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><b>Description: </b>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<input type="text" size="60" maxlength="80" name="description" value="<%=editBean.getTunnelDescription(curTunnel)%>" />
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><b>Start automatically?:</b>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<% if (editBean.startAutomatically(curTunnel)) { %>
|
|
||||||
<input value="1" type="checkbox" name="startOnLoad" checked="true" />
|
|
||||||
<% } else { %>
|
|
||||||
<input value="1" type="checkbox" name="startOnLoad" />
|
|
||||||
<% } %>
|
|
||||||
<i>(Check the Box for 'YES')</i>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td> <b>Listening Port:</b>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<input type="text" size="6" maxlength="5" name="port" value="<%=editBean.getClientPort(curTunnel)%>" />
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><b> Accessable by:</b>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<select name="reachableBy">
|
|
||||||
<% String clientInterface = editBean.getClientInterface(curTunnel); %>
|
|
||||||
<% if (("127.0.0.1".equals(clientInterface)) || (clientInterface == null) || (clientInterface.trim().length() <= 0)) { %>
|
|
||||||
<option value="127.0.0.1" selected="true">Locally (127.0.0.1)</option>
|
|
||||||
<option value="0.0.0.0">Everyone (0.0.0.0)</option>
|
|
||||||
<option value="other">LAN Hosts (Please specify your LAN address)</option>
|
|
||||||
|
|
||||||
</select>
|
<form method="post" action="index.jsp">
|
||||||
|
|
||||||
<b>others:</b>
|
|
||||||
<input type="text" name="reachableByOther" size="20" />
|
|
||||||
<% } else if ("0.0.0.0".equals(clientInterface)) { %>
|
|
||||||
<option value="127.0.0.1">Locally (127.0.0.1)</option>
|
|
||||||
<option value="0.0.0.0" selected="true">Everyone (0.0.0.0)</option>
|
|
||||||
<option value="other">LAN Hosts (Please specify your LAN address)</option>
|
|
||||||
|
|
||||||
</select>
|
<div id="tunnelEditPanel" class="panel">
|
||||||
|
<div class="header">
|
||||||
<b>others:</b>
|
<%
|
||||||
<input type="text" name="reachableByOther" size="20" />
|
String tunnelTypeName = "";
|
||||||
<% } else { %>
|
String tunnelType = "";
|
||||||
<option value="127.0.0.1">Locally (127.0.0.1)</option>
|
if (curTunnel >= 0) {
|
||||||
<option value="0.0.0.0">Everyone (0.0.0.0)</option>
|
tunnelTypeName = editBean.getTunnelType(curTunnel);
|
||||||
<option value="other" selected="true">LAN Hosts (Please specify your LAN address)</option>
|
tunnelType = editBean.getInternalType(curTunnel);
|
||||||
|
%><h4>Edit proxy settings</h4><%
|
||||||
|
} else {
|
||||||
|
tunnelTypeName = editBean.getTypeName(request.getParameter("type"));
|
||||||
|
tunnelType = request.getParameter("type");
|
||||||
|
%><h4>New proxy settings</h4><%
|
||||||
|
} %>
|
||||||
|
<input type="hidden" name="tunnel" value="<%=request.getParameter("tunnel")%>" />
|
||||||
|
<input type="hidden" name="nonce" value="<%=editBean.getNextNonce()%>" />
|
||||||
|
<input type="hidden" name="type" value="<%=tunnelType%>" />
|
||||||
|
</div>
|
||||||
|
|
||||||
</select>
|
<div class="separator">
|
||||||
|
<hr />
|
||||||
<b>others:</b>
|
</div>
|
||||||
<input type="text" name="reachableByOther" size="20" value="<%=clientInterface%>" />
|
|
||||||
<% } %>
|
|
||||||
|
|
||||||
</td>
|
<div id="nameField" class="rowItem">
|
||||||
</tr>
|
<label for="name" accesskey="N">
|
||||||
<tr>
|
<span class="accessKey">N</span>ame:
|
||||||
<% if ("httpclient".equals(editBean.getInternalType(curTunnel))) { %>
|
</label>
|
||||||
<td><b>Outproxies:</b>
|
<input type="text" size="30" maxlength="50" name="name" id="name" title="Tunnel Name" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext" />
|
||||||
<% } else { %>
|
</div>
|
||||||
<td><b>Target:</b>
|
<div id="typeField" class="rowItem">
|
||||||
<% } %>
|
<label>Type:</label>
|
||||||
</td>
|
<span class="text"><%=tunnelTypeName%></span>
|
||||||
<td>
|
</div>
|
||||||
<% if ("httpclient".equals(editBean.getInternalType(curTunnel))) { %>
|
<div id="descriptionField" class="rowItem">
|
||||||
<input type="text" name="proxyList" value="<%=editBean.getClientDestination(curTunnel)%>" />
|
<label for="description" accesskey="e">
|
||||||
<% } else { %>
|
D<span class="accessKey">e</span>scription:
|
||||||
<input type="text" name="targetDestination" value="<%=editBean.getClientDestination(curTunnel)%>" />
|
</label>
|
||||||
<% } %>
|
<input type="text" size="60" maxlength="80" name="description" id="description" title="Tunnel Description" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext" />
|
||||||
<i>(name or destination)</i>
|
</div>
|
||||||
</td>
|
|
||||||
</tr>
|
<div class="subdivider">
|
||||||
<tr>
|
<hr />
|
||||||
<td>
|
</div>
|
||||||
<b>Delayed connect?</b>
|
|
||||||
</td>
|
<div id="accessField" class="rowItem">
|
||||||
<td>
|
<label>Access Point:</label>
|
||||||
<% if (editBean.shouldDelay(curTunnel)) { %>
|
</div>
|
||||||
<input type="checkbox" value="1000" name="connectDelay" checked="true" />
|
<div id="portField" class="rowItem">
|
||||||
<% } else { %>
|
<label for="port" accesskey="P">
|
||||||
<input type="checkbox" value="1000" name="connectDelay" />
|
<span class="accessKey">P</span>ort:
|
||||||
<% } %>
|
</label>
|
||||||
<i>(for request/response connections)</i>
|
<input type="text" size="6" maxlength="5" id="port" name="port" title="Access Port Number" value="<%=editBean.getClientPort(curTunnel)%>" class="freetext" />
|
||||||
</td>
|
</div>
|
||||||
</tr>
|
<div id="reachField" class="rowItem">
|
||||||
<tr>
|
<label for="reachableBy" accesskey="r">
|
||||||
<td><b>Profile:</b>
|
<span class="accessKey">R</span>eachable by:
|
||||||
</td>
|
</label>
|
||||||
<td>
|
<select id="reachableBy" name="reachableBy" title="Valid IP for Client Access" class="selectbox">
|
||||||
<select name="profile">
|
<% String clientInterface = editBean.getClientInterface(curTunnel);
|
||||||
<% if (editBean.isInteractive(curTunnel)) { %>
|
String otherInterface = "";
|
||||||
<option value="interactive" selected="true">interactive connection </option>
|
if (!("127.0.0.1".equals(clientInterface)) &&
|
||||||
<option value="bulk">bulk connection (downloads/websites/BT) </option>
|
!("0.0.0.0".equals(clientInterface)) &&
|
||||||
<% } else { %>
|
(clientInterface != null) &&
|
||||||
<option value="interactive">interactive connection </option>
|
(clientInterface.trim().length() > 0)) {
|
||||||
<option value="bulk" selected="true">bulk connection (downloads/websites/BT) </option>
|
otherInterface = clientInterface;
|
||||||
<% } %>
|
}
|
||||||
</select>
|
%><option value="127.0.0.1"<%=("127.0.0.1".equals(clientInterface) ? " selected=\"selected\"" : "")%>>Locally (127.0.0.1)</option>
|
||||||
</td>
|
<option value="0.0.0.0"<%=("0.0.0.0".equals(clientInterface) ? " selected=\"selected\"" : "")%>>Everyone (0.0.0.0)</option>
|
||||||
</tr>
|
<option value="other"<%=(!("".equals(otherInterface)) ? " selected=\"selected\"" : "")%>>LAN Hosts (Please specify your LAN address)</option>
|
||||||
<tr>
|
</select>
|
||||||
<td>
|
</div>
|
||||||
<b>Shared Client</b>
|
<div id="otherField" class="rowItem">
|
||||||
</td>
|
<label for="reachableByOther" accesskey="O">
|
||||||
<td>
|
<span class="accessKey">O</span>ther:
|
||||||
<% if (editBean.isSharedClient(curTunnel)) { %>
|
</label>
|
||||||
<input type="checkbox" value="true" name="shared" checked="true" />
|
<input type="text" size="20" id="reachableByOther" name="reachableByOther" title="Alternative IP for Client Access" value="<%=otherInterface%>" class="freetext" />
|
||||||
<% } else { %>
|
</div>
|
||||||
<input type="checkbox" value="true" name="shared" />
|
|
||||||
<% } %>
|
<div class="subdivider">
|
||||||
<i>(Share tunnels with other clients and irc/httpclients? Change requires restart of client proxy)</i>
|
<hr />
|
||||||
</td>
|
</div>
|
||||||
</tr>
|
|
||||||
<tr>
|
<% if ("httpclient".equals(editBean.getInternalType(curTunnel))) {
|
||||||
<td colspan="2" align="center">
|
%><div id="destinationField" class="rowItem">
|
||||||
<b><hr size="1">
|
<label for="proxyList" accesskey="x">
|
||||||
Advanced networking options<br />
|
Outpro<span class="accessKey">x</span>ies:
|
||||||
<span style="color:#dd0000;">(NOTE: when this client proxy is configured to share tunnels, then these options are for all the shared proxy clients!)</span></b>
|
</label>
|
||||||
</td>
|
<input type="text" size="30" id="proxyList" name="proxyList" title="List of Outproxy I2P destinations" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext" />
|
||||||
</tr>
|
</div>
|
||||||
<tr>
|
<% } else {
|
||||||
<td>
|
%><div id="destinationField" class="rowItem">
|
||||||
<b>Tunnel depth:</b>
|
<label for="targetDestination" accesskey="T">
|
||||||
</td>
|
<span class="accessKey">T</span>unnel Destination:
|
||||||
<td><select name="tunnelDepth">
|
</label>
|
||||||
<% int tunnelDepth = editBean.getTunnelDepth(curTunnel, 2);
|
<input type="text" size="30" id="targetDestination" name="targetDestination" title="Destination of the Tunnel" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext" />
|
||||||
switch (tunnelDepth) {
|
<span class="comment">(name or destination)</span>
|
||||||
case 0: %>
|
</div>
|
||||||
<option value="0" selected="true">0 hop tunnel (low anonymity, low latency)</option>
|
<% }
|
||||||
<option value="1" >1 hop tunnel (medium anonymity, medium latency)</option>
|
%><div id="profileField" class="rowItem">
|
||||||
<option value="2" >2 hop tunnel (high anonymity, high latency)</option>
|
<label for="profile" accesskey="f">
|
||||||
<% break;
|
Pro<span class="accessKey">f</span>ile:
|
||||||
case 1: %>
|
</label>
|
||||||
<option value="0" >0 hop tunnel (low anonymity, low latency)</option>
|
<select id="profile" name="profile" title="Connection Profile" class="selectbox">
|
||||||
<option value="1" selected="true">1 hop tunnel (medium anonymity, medium latency)</option>
|
<% boolean interactiveProfile = editBean.isInteractive(curTunnel);
|
||||||
<option value="2" >2 hop tunnel (high anonymity, high latency)</option>
|
%><option <%=(interactiveProfile == true ? "selected=\"selected\" " : "")%>value="interactive">interactive connection </option>
|
||||||
<% break;
|
<option <%=(interactiveProfile == false ? "selected=\"selected\" " : "")%>value="bulk">bulk connection (downloads/websites/BT) </option>
|
||||||
case 2: %>
|
</select>
|
||||||
<option value="0" >0 hop tunnel (low anonymity, low latency)</option>
|
</div>
|
||||||
<option value="1" >1 hop tunnel (medium anonymity, medium latency)</option>
|
<div id="delayConnectField" class="rowItem">
|
||||||
<option value="2" selected="true">2 hop tunnel (high anonymity, high latency)</option>
|
<label for="connectDelay" accesskey="y">
|
||||||
<% break;
|
Dela<span class="accessKey">y</span> Connect:
|
||||||
default: %>
|
</label>
|
||||||
<option value="0" >0 hop tunnel (low anonymity, low latency)</option>
|
<input value="1000" type="checkbox" id="connectDelay" name="connectDelay" title="Delay Connection"<%=(editBean.shouldDelay(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
|
||||||
<option value="1" >1 hop tunnel (medium anonymity, medium latency)</option>
|
<span class="comment">(for request/response connections)</span>
|
||||||
<option value="2" >2 hop tunnel (high anonymity, high latency)</option>
|
</div>
|
||||||
<option value="<%=tunnelDepth%>" ><%=tunnelDepth%> hop tunnel</option>
|
<div id="sharedtField" class="rowItem">
|
||||||
<% } %>
|
<label for="shared" accesskey="h">
|
||||||
</select>
|
S<span class="accessKey">h</span>ared Client:
|
||||||
</td>
|
</label>
|
||||||
</tr>
|
<input value="true" type="checkbox" id="shared" name="shared" title="Share tunnels with other clients"<%=(editBean.isSharedClient(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
|
||||||
<tr>
|
<span class="comment">(Share tunnels with other clients and irc/httpclients? Change requires restart of client proxy)</span>
|
||||||
<td><b>Tunnel count:</b>
|
</div>
|
||||||
</td>
|
<div id="startupField" class="rowItem">
|
||||||
<td>
|
<label for="startOnLoad" accesskey="a">
|
||||||
<select name="tunnelCount">
|
<span class="accessKey">A</span>uto Start:
|
||||||
<% int tunnelCount = editBean.getTunnelCount(curTunnel, 2);
|
</label>
|
||||||
switch (tunnelCount) {
|
<input value="1" type="checkbox" id="startOnLoad" name="startOnLoad" title="Start Tunnel Automatically"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
|
||||||
case 1: %>
|
<span class="comment">(Check the Box for 'YES')</span>
|
||||||
<option value="1" selected="true" >1 inbound tunnel (low bandwidth usage, less reliability)</option>
|
</div>
|
||||||
<option value="2" >2 inbound tunnels (standard bandwidth usage, standard reliability)</option>
|
|
||||||
<option value="3" >3 inbound tunnels (higher bandwidth usage, higher reliability)</option>
|
<div class="footer">
|
||||||
<% break;
|
</div>
|
||||||
case 2: %>
|
</div>
|
||||||
<option value="1" >1 inbound tunnel (low bandwidth usage, less reliability)</option>
|
|
||||||
<option value="2" selected="true" >2 inbound tunnels (standard bandwidth usage, standard reliability)</option>
|
<div id="tunnelAdvancedNetworking" class="panel">
|
||||||
<option value="3" >3 inbound tunnels (higher bandwidth usage, higher reliability)</option>
|
<div class="header">
|
||||||
<% break;
|
<h4>Advanced networking options</h4>
|
||||||
case 3: %>
|
<span class="comment">(NOTE: when this client proxy is configured to share tunnels, then these options are for all the shared proxy clients!)</span>
|
||||||
<option value="1" >1 inbound tunnel (low bandwidth usage, less reliability)</option>
|
</div>
|
||||||
<option value="2" >2 inbound tunnels (standard bandwidth usage, standard reliability)</option>
|
|
||||||
<option value="3" selected="true" >3 inbound tunnels (higher bandwidth usage, higher reliability)</option>
|
<div class="separator">
|
||||||
<% break;
|
<hr />
|
||||||
default: %>
|
</div>
|
||||||
<option value="1" >1 inbound tunnel (low bandwidth usage, less reliability)</option>
|
|
||||||
<option value="2" >2 inbound tunnels (standard bandwidth usage, standard reliability)</option>
|
<div id="tunnelOptionsField" class="rowItem">
|
||||||
<option value="3" >3 inbound tunnels (higher bandwidth usage, higher reliability)</option>
|
<label>Tunnel Options:</label>
|
||||||
<option value="<%=tunnelDepth%>" ><%=tunnelDepth%> inbound tunnels</option>
|
</div>
|
||||||
<% } %>
|
<div id="depthField" class="rowItem">
|
||||||
</select>
|
<label for="tunnelDepth" accesskey="t">
|
||||||
</td>
|
Dep<span class="accessKey">t</span>h:
|
||||||
<tr>
|
</label>
|
||||||
<td><b>I2CP host:</b>
|
<select id="tunnelDepth" name="tunnelDepth" title="Depth of each Tunnel" class="selectbox">
|
||||||
</td>
|
<% int tunnelDepth = editBean.getTunnelDepth(curTunnel, 2);
|
||||||
<td>
|
%><option value="0"<%=(tunnelDepth == 0 ? " selected=\"selected\"" : "") %>>0 hop tunnel (low anonymity, low latency)</option>
|
||||||
<input type="text" name="clientHost" size="20" value="<%=editBean.getI2CPHost(curTunnel)%>" />
|
<option value="1"<%=(tunnelDepth == 1 ? " selected=\"selected\"" : "") %>>1 hop tunnel (medium anonymity, medium latency)</option>
|
||||||
</td>
|
<option value="2"<%=(tunnelDepth == 2 ? " selected=\"selected\"" : "") %>>2 hop tunnel (high anonymity, high latency)</option>
|
||||||
</tr>
|
<% if (tunnelDepth > 2) {
|
||||||
<tr>
|
%> <option value="<%=tunnelDepth%>" selected="selected"><%=tunnelDepth%> hop tunnel</option>
|
||||||
<td><b>I2CP port:</b>
|
<% }
|
||||||
</td>
|
%></select>
|
||||||
<td>
|
</div>
|
||||||
<input type="text" name="clientPort" size="20" value="<%=editBean.getI2CPPort(curTunnel)%>" /><br />
|
<div id="varianceField" class="rowItem">
|
||||||
</td>
|
<label for="tunnelVariance" accesskey="v">
|
||||||
</tr>
|
<span class="accessKey">V</span>ariance:
|
||||||
<tr>
|
</label>
|
||||||
<td><b>Custom options:</b>
|
<select id="tunnelVariance" name="tunnelVariance" title="Level of Randomization for Tunnel Depth" class="selectbox">
|
||||||
</td>
|
<% int tunnelVariance = editBean.getTunnelVariance(curTunnel, -1);
|
||||||
<td>
|
%><option value="0"<%=(tunnelVariance == 0 ? " selected=\"selected\"" : "") %>>0 hop variance (no randomisation, consistant performance)</option>
|
||||||
<input type="text" name="customOptions" size="60" value="<%=editBean.getCustomOptions(curTunnel)%>" />
|
<option value="-1"<%=(tunnelVariance == -1 ? " selected=\"selected\"" : "") %>>+/- 0-1 hop variance (standard randomisation, standard performance)</option>
|
||||||
</td>
|
<option value="-2"<%=(tunnelVariance == -2 ? " selected=\"selected\"" : "") %>>+/- 0-2 hop variance (high randomisation, variable performance)</option>
|
||||||
</tr>
|
<option value="1"<%=(tunnelVariance == 1 ? " selected=\"selected\"" : "") %>>+ 0-1 hop variance (medium additive randomisation, subtractive performance)</option>
|
||||||
<tr>
|
<option value="2"<%=(tunnelVariance == 2 ? " selected=\"selected\"" : "") %>>+ 0-2 hop variance (high additive randomisation, subtractive performance)</option>
|
||||||
<td colspan="2">
|
<% if (tunnelVariance > 2 || tunnelVariance < -2) {
|
||||||
<hr size="1">
|
%> <option value="<%=tunnelVariance%>" selected="selected"><%= (tunnelVariance > 2 ? "+ " : "+/- ") %>0-<%=tunnelVariance%> hop variance</option>
|
||||||
</td>
|
<% }
|
||||||
</tr>
|
%></select>
|
||||||
<tr>
|
</div>
|
||||||
<td>
|
<div id="countField" class="rowItem">
|
||||||
<b>Save:</b>
|
<label for="tunnelQuantity" accesskey="C">
|
||||||
</td>
|
<span class="accessKey">C</span>ount:
|
||||||
<td>
|
</label>
|
||||||
<input type="submit" name="action" value="Save changes" />
|
<select id="tunnelQuantity" name="tunnelQuantity" title="Number of Tunnels in Group" class="selectbox">
|
||||||
</td>
|
<% int tunnelQuantity = editBean.getTunnelQuantity(curTunnel, 2);
|
||||||
</tr>
|
%><option value="1"<%=(tunnelQuantity == 1 ? " selected=\"selected\"" : "") %>>1 inbound tunnel (low bandwidth usage, less reliability)</option>
|
||||||
<tr>
|
<option value="2"<%=(tunnelQuantity == 2 ? " selected=\"selected\"" : "") %>>2 inbound tunnels (standard bandwidth usage, standard reliability)</option>
|
||||||
<td><b>Delete?</b>
|
<option value="3"<%=(tunnelQuantity == 3 ? " selected=\"selected\"" : "") %>>3 inbound tunnels (higher bandwidth usage, higher reliability)</option>
|
||||||
</td>
|
<% if (tunnelQuantity > 3) {
|
||||||
<td>
|
%> <option value="<%=tunnelQuantity%>" selected="selected"><%=tunnelQuantity%> inbound tunnels</option>
|
||||||
<input type="submit" name="action" value="Delete this proxy" />
|
<% }
|
||||||
<b><span style="color:#dd0000;">confirm delete:</span></b>
|
%></select>
|
||||||
<input type="checkbox" value="true" name="removeConfirm" />
|
</div>
|
||||||
</td>
|
<div id="backupField" class="rowItem">
|
||||||
</tr>
|
<label for="tunnelBackupQuantity" accesskey="b">
|
||||||
</table>
|
<span class="accessKey">B</span>ackup Count:
|
||||||
</td>
|
</label>
|
||||||
</tr>
|
<select id="tunnelBackupQuantity" name="tunnelBackupQuantity" title="Number of Reserve Tunnels" class="selectbox">
|
||||||
</table>
|
<% int tunnelBackupQuantity = editBean.getTunnelBackupQuantity(curTunnel, 0);
|
||||||
</form>
|
%><option value="0"<%=(tunnelBackupQuantity == 0 ? " selected=\"selected\"" : "") %>>0 backup tunnels (0 redundancy, no added resource usage)</option>
|
||||||
</body>
|
<option value="1"<%=(tunnelBackupQuantity == 1 ? " selected=\"selected\"" : "") %>>1 backup tunnel (low redundancy, low resource usage)</option>
|
||||||
|
<option value="2"<%=(tunnelBackupQuantity == 2 ? " selected=\"selected\"" : "") %>>2 backup tunnels (medium redundancy, medium resource usage)</option>
|
||||||
|
<option value="3"<%=(tunnelBackupQuantity == 3 ? " selected=\"selected\"" : "") %>>3 backup tunnels (high redundancy, high resource usage)</option>
|
||||||
|
<% if (tunnelBackupQuantity > 3) {
|
||||||
|
%> <option value="<%=tunnelBackupQuantity%>" selected="selected"><%=tunnelBackupQuantity%> backup tunnels</option>
|
||||||
|
<% }
|
||||||
|
%></select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="subdivider">
|
||||||
|
<hr />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="optionsField" class="rowItem">
|
||||||
|
<label>I2CP Options:</label>
|
||||||
|
</div>
|
||||||
|
<div id="optionsHostField" class="rowItem">
|
||||||
|
<label for="clientHost" accesskey="o">
|
||||||
|
H<span class="accessKey">o</span>st:
|
||||||
|
</label>
|
||||||
|
<input type="text" id="clientHost" name="clientHost" size="20" title="I2CP Hostname or IP" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext" />
|
||||||
|
</div>
|
||||||
|
<div id="optionsPortField" class="rowItem">
|
||||||
|
<label for="clientPort" accesskey="r">
|
||||||
|
Po<span class="accessKey">r</span>t:
|
||||||
|
</label>
|
||||||
|
<input type="text" id="clientPort" name="clientPort" size="20" title="I2CP Port Number" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="subdivider">
|
||||||
|
<hr />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="customOptionsField" class="rowItem">
|
||||||
|
<label for="customOptions" accesskey="u">
|
||||||
|
C<span class="accessKey">u</span>stom options:
|
||||||
|
</label>
|
||||||
|
<input type="text" id="customOptions" name="customOptions" size="60" title="Custom Options" value="<%=editBean.getCustomOptions(curTunnel)%>" class="freetext" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="globalOperationsPanel" class="panel">
|
||||||
|
<div class="header"></div>
|
||||||
|
<div class="footer">
|
||||||
|
<div class="toolbox">
|
||||||
|
<input type="hidden" value="true" name="removeConfirm" />
|
||||||
|
<button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><span class="accessKey">S</span>ave</button><button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><span class="accessKey">D</span>elete</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<div id="pageFooter">
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
@ -1,4 +1,5 @@
|
|||||||
<%@page contentType="text/html" %>
|
<%@page contentType="text/html" import="net.i2p.i2ptunnel.web.EditBean"%><?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
<jsp:useBean class="net.i2p.i2ptunnel.web.EditBean" id="editBean" scope="request" />
|
<jsp:useBean class="net.i2p.i2ptunnel.web.EditBean" id="editBean" scope="request" />
|
||||||
<% String tun = request.getParameter("tunnel");
|
<% String tun = request.getParameter("tunnel");
|
||||||
int curTunnel = -1;
|
int curTunnel = -1;
|
||||||
@ -10,224 +11,249 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
%>
|
%>
|
||||||
<html>
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<title>I2PTunnel Webmanager</title>
|
<title>I2PTunnel Webmanager - Edit</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
|
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
||||||
|
|
||||||
|
<% if (editBean.allowCSS()) {
|
||||||
|
%><link href="images/favicon.ico" type="image/x-icon" rel="shortcut icon" />
|
||||||
|
<link href="<%=editBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="<%=editBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
|
||||||
|
<% }
|
||||||
|
%>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body id="tunnelEditPage">
|
||||||
<form action="index.jsp">
|
<div id="pageHeader">
|
||||||
<input type="hidden" name="tunnel" value="<%=request.getParameter("tunnel")%>" />
|
</div>
|
||||||
<input type="hidden" name="nonce" value="<%=editBean.getNextNonce()%>" />
|
|
||||||
<table width="80%" align="center" border="0" cellpadding="1" cellspacing="1">
|
<form method="post" action="index.jsp">
|
||||||
<tr>
|
|
||||||
<td style="background-color:#000">
|
<div id="tunnelEditPanel" class="panel">
|
||||||
<div style="background-color:#ffffed">
|
<div class="header">
|
||||||
<table width="100%" align="center" border="0" cellpadding="4" cellspacing="1">
|
<%
|
||||||
<tr>
|
String tunnelTypeName = "";
|
||||||
<td colspan="2" align="center">
|
String tunnelType = "";
|
||||||
<% if (curTunnel >= 0) { %>
|
if (curTunnel >= 0) {
|
||||||
<b>Edit server settings</b>
|
tunnelTypeName = editBean.getTunnelType(curTunnel);
|
||||||
<% } else { %>
|
tunnelType = editBean.getInternalType(curTunnel);
|
||||||
<b>New server settings</b>
|
%><h4>Edit server settings</h4><%
|
||||||
<% } %>
|
} else {
|
||||||
</td>
|
tunnelTypeName = editBean.getTypeName(request.getParameter("type"));
|
||||||
</tr>
|
tunnelType = request.getParameter("type");
|
||||||
<tr>
|
%><h4>New server settings</h4><%
|
||||||
<td><b>Name: </b>
|
} %>
|
||||||
</td>
|
<input type="hidden" name="tunnel" value="<%=request.getParameter("tunnel")%>" />
|
||||||
<td>
|
<input type="hidden" name="nonce" value="<%=editBean.getNextNonce()%>" />
|
||||||
<input type="text" size="30" maxlength="50" name="name" value="<%=editBean.getTunnelName(curTunnel)%>" />
|
<input type="hidden" name="type" value="<%=tunnelType%>" />
|
||||||
</td>
|
</div>
|
||||||
</tr>
|
|
||||||
<tr>
|
<div class="separator">
|
||||||
<td><b>Type: </b>
|
<hr />
|
||||||
<td><%
|
</div>
|
||||||
if (curTunnel >= 0) {
|
|
||||||
%><%=editBean.getTunnelType(curTunnel)%>
|
<div id="nameField" class="rowItem">
|
||||||
<input type="hidden" name="type" value="<%=editBean.getInternalType(curTunnel)%>" />
|
<label for="name" accesskey="N">
|
||||||
<%
|
<span class="accessKey">N</span>ame:
|
||||||
} else {
|
</label>
|
||||||
%><%=editBean.getTypeName(request.getParameter("type"))%>
|
<input type="text" size="30" maxlength="50" name="name" id="name" title="Tunnel Name" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext" />
|
||||||
<input type="hidden" name="type" value="<%=request.getParameter("type")%>" />
|
</div>
|
||||||
<%
|
<div id="typeField" class="rowItem">
|
||||||
}
|
<label>Type:</label>
|
||||||
%></td>
|
<span class="text"><%=tunnelTypeName%></span>
|
||||||
</tr>
|
</div>
|
||||||
<tr>
|
<div id="descriptionField" class="rowItem">
|
||||||
<td><b>Description: </b>
|
<label for="description" accesskey="e">
|
||||||
</td>
|
D<span class="accessKey">e</span>scription:
|
||||||
<td>
|
</label>
|
||||||
<input type="text" size="60" maxlength="80" name="description" value="<%=editBean.getTunnelDescription(curTunnel)%>" />
|
<input type="text" size="60" maxlength="80" name="description" id="description" title="Tunnel Description" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext" />
|
||||||
</td>
|
</div>
|
||||||
</tr>
|
<div id="startupField" class="rowItem">
|
||||||
<tr>
|
<label for="startOnLoad" accesskey="a">
|
||||||
<td><b>Start automatically?:</b>
|
<span class="accessKey">A</span>uto Start:
|
||||||
</td>
|
</label>
|
||||||
<td>
|
<input value="1" type="checkbox" id="startOnLoad" name="startOnLoad" title="Start Tunnel Automatically"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
|
||||||
<% if (editBean.startAutomatically(curTunnel)) { %>
|
<span class="comment">(Check the Box for 'YES')</span>
|
||||||
<input value="1" type="checkbox" name="startOnLoad" checked="true" />
|
</div>
|
||||||
<% } else { %>
|
|
||||||
<input value="1" type="checkbox" name="startOnLoad" />
|
<div class="subdivider">
|
||||||
<% } %>
|
<hr />
|
||||||
<i>(Check the Box for 'YES')</i>
|
</div>
|
||||||
</td>
|
|
||||||
</tr>
|
<div id="targetField" class="rowItem">
|
||||||
<tr>
|
<label>Target:</label>
|
||||||
<td> <b>Target:</b>
|
</div>
|
||||||
</td>
|
<div id="hostField" class="rowItem">
|
||||||
<td>
|
<label for="targetHost" accesskey="H">
|
||||||
Host: <input type="text" size="20" name="targetHost" value="<%=editBean.getTargetHost(curTunnel)%>" />
|
<span class="accessKey">H</span>ost:
|
||||||
Port: <input type="text" size="6" maxlength="5" name="targetPort" value="<%=editBean.getTargetPort(curTunnel)%>" />
|
</label>
|
||||||
</td>
|
<input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" value="<%=editBean.getTargetHost(curTunnel)%>" class="freetext" />
|
||||||
</tr>
|
</div>
|
||||||
<% String curType = editBean.getInternalType(curTunnel);
|
<div id="portField" class="rowItem">
|
||||||
if ( (curType == null) || (curType.trim().length() <= 0) )
|
<label for="targetPort" accesskey="P">
|
||||||
curType = request.getParameter("type");
|
<span class="accessKey">P</span>ort:
|
||||||
if ("httpserver".equals(curType)) { %>
|
</label>
|
||||||
<tr>
|
<input type="text" size="6" maxlength="5" id="targetPort" name="targetPort" title="Target Port Number" value="<%=editBean.getTargetPort(curTunnel)%>" class="freetext" />
|
||||||
<td><b>Website name:</b></td>
|
</div>
|
||||||
<td><input type="text" size="20" name="spoofedHost" value="<%=editBean.getSpoofedHost(curTunnel)%>" />
|
|
||||||
</td></tr>
|
<div class="subdivider">
|
||||||
<% } %>
|
<hr />
|
||||||
<tr>
|
</div>
|
||||||
<td><b>Private key file:</b>
|
|
||||||
</td>
|
<% if ("httpserver".equals(tunnelType)) {
|
||||||
<td><input type="text" size="30" name="privKeyFile" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" /></td>
|
%><div id="websiteField" class="rowItem">
|
||||||
</tr>
|
<label for="spoofedHost" accesskey="W">
|
||||||
<tr>
|
<span class="accessKey">W</span>ebsite name:
|
||||||
<td><b>Profile:</b>
|
</label>
|
||||||
</td>
|
<input type="text" size="20" id="spoofedHost" name="spoofedHost" title="Website Host Name" value="<%=editBean.getSpoofedHost(curTunnel)%>" class="freetext" />
|
||||||
<td>
|
</div>
|
||||||
<select name="profile">
|
<% }
|
||||||
<% if (editBean.isInteractive(curTunnel)) { %>
|
%><div id="privKeyField" class="rowItem">
|
||||||
<option value="interactive" selected="true">interactive connection </option>
|
<label for="privKeyFile" accesskey="k">
|
||||||
<option value="bulk">bulk connection (downloads/websites/BT) </option>
|
Private <span class="accessKey">k</span>ey file:
|
||||||
<% } else { %>
|
</label>
|
||||||
<option value="interactive">interactive connection </option>
|
<input type="text" size="30" id="privKeyFile" name="privKeyFile" title="Path to Private Key File" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" />
|
||||||
<option value="bulk" selected="true">bulk connection (downloads/websites/BT) </option>
|
</div>
|
||||||
<% } %>
|
<div id="profileField" class="rowItem">
|
||||||
</select>
|
<label for="profile" accesskey="f">
|
||||||
</td>
|
Pro<span class="accessKey">f</span>ile:
|
||||||
</tr>
|
</label>
|
||||||
<tr>
|
<select id="profile" name="profile" title="Connection Profile" class="selectbox">
|
||||||
<td valign="top" align="left"><b>Local destination:</b><br /><i>(if known)</i></td>
|
<% boolean interactiveProfile = editBean.isInteractive(curTunnel);
|
||||||
<td valign="top" align="left"><input type="text" size="60" value="<%=editBean.getDestinationBase64(curTunnel)%>" /></td>
|
%><option <%=(interactiveProfile == true ? "selected=\"selected\" " : "")%>value="interactive">interactive connection </option>
|
||||||
</tr>
|
<option <%=(interactiveProfile == false ? "selected=\"selected\" " : "")%>value="bulk">bulk connection (downloads/websites/BT) </option>
|
||||||
<tr>
|
</select>
|
||||||
<td colspan="2" align="center">
|
</div>
|
||||||
<b><hr size="1">
|
<div id="destinationField" class="rowItem">
|
||||||
Advanced networking options<br />
|
<label for="localDestination" accesskey="L">
|
||||||
</b>
|
<span class="accessKey">L</span>ocal destination:
|
||||||
</td>
|
</label>
|
||||||
</tr>
|
<input type="text" size="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" value="<%=editBean.getDestinationBase64(curTunnel)%>" class="freetext" />
|
||||||
<tr>
|
<span class="comment">(if known)</span>
|
||||||
<td>
|
</div>
|
||||||
<b>Tunnel depth:</b>
|
|
||||||
</td>
|
<div class="footer">
|
||||||
<td><select name="tunnelDepth">
|
</div>
|
||||||
<% int tunnelDepth = editBean.getTunnelDepth(curTunnel, 2);
|
</div>
|
||||||
switch (tunnelDepth) {
|
|
||||||
case 0: %>
|
<div id="tunnelAdvancedNetworking" class="panel">
|
||||||
<option value="0" selected="true">0 hop tunnel (low anonymity, low latency)</option>
|
<div class="header">
|
||||||
<option value="1" >1 hop tunnel (medium anonymity, medium latency)</option>
|
<h4>Advanced networking options</h4>
|
||||||
<option value="2" >2 hop tunnel (high anonymity, high latency)</option>
|
</div>
|
||||||
<% break;
|
|
||||||
case 1: %>
|
<div class="separator">
|
||||||
<option value="0" >0 hop tunnel (low anonymity, low latency)</option>
|
<hr />
|
||||||
<option value="1" selected="true">1 hop tunnel (medium anonymity, medium latency)</option>
|
</div>
|
||||||
<option value="2" >2 hop tunnel (high anonymity, high latency)</option>
|
|
||||||
<% break;
|
<div id="tunnelOptionsField" class="rowItem">
|
||||||
case 2: %>
|
<label>Tunnel Options:</label>
|
||||||
<option value="0" >0 hop tunnel (low anonymity, low latency)</option>
|
</div>
|
||||||
<option value="1" >1 hop tunnel (medium anonymity, medium latency)</option>
|
<div id="depthField" class="rowItem">
|
||||||
<option value="2" selected="true">2 hop tunnel (high anonymity, high latency)</option>
|
<label for="tunnelDepth" accesskey="t">
|
||||||
<% break;
|
Dep<span class="accessKey">t</span>h:
|
||||||
default: %>
|
</label>
|
||||||
<option value="0" >0 hop tunnel (low anonymity, low latency)</option>
|
<select id="tunnelDepth" name="tunnelDepth" title="Depth of each Tunnel" class="selectbox">
|
||||||
<option value="1" >1 hop tunnel (medium anonymity, medium latency)</option>
|
<% int tunnelDepth = editBean.getTunnelDepth(curTunnel, 2);
|
||||||
<option value="2" >2 hop tunnel (high anonymity, high latency)</option>
|
%><option value="0"<%=(tunnelDepth == 0 ? " selected=\"selected\"" : "") %>>0 hop tunnel (low anonymity, low latency)</option>
|
||||||
<option value="<%=tunnelDepth%>" ><%=tunnelDepth%> hop tunnel</option>
|
<option value="1"<%=(tunnelDepth == 1 ? " selected=\"selected\"" : "") %>>1 hop tunnel (medium anonymity, medium latency)</option>
|
||||||
<% } %>
|
<option value="2"<%=(tunnelDepth == 2 ? " selected=\"selected\"" : "") %>>2 hop tunnel (high anonymity, high latency)</option>
|
||||||
</select>
|
<% if (tunnelDepth > 2) {
|
||||||
</td>
|
%> <option value="<%=tunnelDepth%>" selected="selected"><%=tunnelDepth%> hop tunnel</option>
|
||||||
</tr>
|
<% }
|
||||||
<tr>
|
%></select>
|
||||||
<td><b>Tunnel count:</b>
|
</div>
|
||||||
</td>
|
<div id="varianceField" class="rowItem">
|
||||||
<td>
|
<label for="tunnelVariance" accesskey="v">
|
||||||
<select name="tunnelCount">
|
<span class="accessKey">V</span>ariance:
|
||||||
<% int tunnelCount = editBean.getTunnelCount(curTunnel, 2);
|
</label>
|
||||||
switch (tunnelCount) {
|
<select id="tunnelVariance" name="tunnelVariance" title="Level of Randomization for Tunnel Depth" class="selectbox">
|
||||||
case 1: %>
|
<% int tunnelVariance = editBean.getTunnelVariance(curTunnel, -1);
|
||||||
<option value="1" selected="true" >1 inbound tunnel (low bandwidth usage, less reliability)</option>
|
%><option value="0"<%=(tunnelVariance == 0 ? " selected=\"selected\"" : "") %>>0 hop variance (no randomisation, consistant performance)</option>
|
||||||
<option value="2" >2 inbound tunnels (standard bandwidth usage, standard reliability)</option>
|
<option value="-1"<%=(tunnelVariance == -1 ? " selected=\"selected\"" : "") %>>+/- 0-1 hop variance (standard randomisation, standard performance)</option>
|
||||||
<option value="3" >3 inbound tunnels (higher bandwidth usage, higher reliability)</option>
|
<option value="-2"<%=(tunnelVariance == -2 ? " selected=\"selected\"" : "") %>>+/- 0-2 hop variance (high randomisation, variable performance)</option>
|
||||||
<% break;
|
<option value="1"<%=(tunnelVariance == 1 ? " selected=\"selected\"" : "") %>>+ 0-1 hop variance (medium additive randomisation, subtractive performance)</option>
|
||||||
case 2: %>
|
<option value="2"<%=(tunnelVariance == 2 ? " selected=\"selected\"" : "") %>>+ 0-2 hop variance (high additive randomisation, subtractive performance)</option>
|
||||||
<option value="1" >1 inbound tunnel (low bandwidth usage, less reliability)</option>
|
<% if (tunnelVariance > 2 || tunnelVariance < -2) {
|
||||||
<option value="2" selected="true" >2 inbound tunnels (standard bandwidth usage, standard reliability)</option>
|
%> <option value="<%=tunnelVariance%>" selected="selected"><%= (tunnelVariance > 2 ? "+ " : "+/- ") %>0-<%=tunnelVariance%> hop variance</option>
|
||||||
<option value="3" >3 inbound tunnels (higher bandwidth usage, higher reliability)</option>
|
<% }
|
||||||
<% break;
|
%></select>
|
||||||
case 3: %>
|
</div>
|
||||||
<option value="1" >1 inbound tunnel (low bandwidth usage, less reliability)</option>
|
<div id="countField" class="rowItem">
|
||||||
<option value="2" >2 inbound tunnels (standard bandwidth usage, standard reliability)</option>
|
<label for="tunnelQuantity" accesskey="C">
|
||||||
<option value="3" selected="true" >3 inbound tunnels (higher bandwidth usage, higher reliability)</option>
|
<span class="accessKey">C</span>ount:
|
||||||
<% break;
|
</label>
|
||||||
default: %>
|
<select id="tunnelQuantity" name="tunnelQuantity" title="Number of Tunnels in Group" class="selectbox">
|
||||||
<option value="1" >1 inbound tunnel (low bandwidth usage, less reliability)</option>
|
<% int tunnelQuantity = editBean.getTunnelQuantity(curTunnel, 2);
|
||||||
<option value="2" >2 inbound tunnels (standard bandwidth usage, standard reliability)</option>
|
%><option value="1"<%=(tunnelQuantity == 1 ? " selected=\"selected\"" : "") %>>1 inbound tunnel (low bandwidth usage, less reliability)</option>
|
||||||
<option value="3" >3 inbound tunnels (higher bandwidth usage, higher reliability)</option>
|
<option value="2"<%=(tunnelQuantity == 2 ? " selected=\"selected\"" : "") %>>2 inbound tunnels (standard bandwidth usage, standard reliability)</option>
|
||||||
<option value="<%=tunnelDepth%>" ><%=tunnelDepth%> inbound tunnels</option>
|
<option value="3"<%=(tunnelQuantity == 3 ? " selected=\"selected\"" : "") %>>3 inbound tunnels (higher bandwidth usage, higher reliability)</option>
|
||||||
<% } %>
|
<% if (tunnelQuantity > 3) {
|
||||||
</select>
|
%> <option value="<%=tunnelQuantity%>" selected="selected"><%=tunnelQuantity%> inbound tunnels</option>
|
||||||
</td>
|
<% }
|
||||||
<tr>
|
%></select>
|
||||||
<td><b>I2CP host:</b>
|
</div>
|
||||||
</td>
|
<div id="backupField" class="rowItem">
|
||||||
<td>
|
<label for="tunnelBackupQuantity" accesskey="b">
|
||||||
<input type="text" name="clientHost" size="20" value="<%=editBean.getI2CPHost(curTunnel)%>" />
|
<span class="accessKey">B</span>ackup Count:
|
||||||
</td>
|
</label>
|
||||||
</tr>
|
<select id="tunnelBackupQuantity" name="tunnelBackupQuantity" title="Number of Reserve Tunnels" class="selectbox">
|
||||||
<tr>
|
<% int tunnelBackupQuantity = editBean.getTunnelBackupQuantity(curTunnel, 0);
|
||||||
<td><b>I2CP port:</b>
|
%><option value="0"<%=(tunnelBackupQuantity == 0 ? " selected=\"selected\"" : "") %>>0 backup tunnels (0 redundancy, no added resource usage)</option>
|
||||||
</td>
|
<option value="1"<%=(tunnelBackupQuantity == 1 ? " selected=\"selected\"" : "") %>>1 backup tunnel (low redundancy, low resource usage)</option>
|
||||||
<td>
|
<option value="2"<%=(tunnelBackupQuantity == 2 ? " selected=\"selected\"" : "") %>>2 backup tunnels (medium redundancy, medium resource usage)</option>
|
||||||
<input type="text" name="clientPort" size="20" value="<%=editBean.getI2CPPort(curTunnel)%>" /><br />
|
<option value="3"<%=(tunnelBackupQuantity == 3 ? " selected=\"selected\"" : "") %>>3 backup tunnels (high redundancy, high resource usage)</option>
|
||||||
</td>
|
<% if (tunnelBackupQuantity > 3) {
|
||||||
</tr>
|
%> <option value="<%=tunnelBackupQuantity%>" selected="selected"><%=tunnelBackupQuantity%> backup tunnels</option>
|
||||||
<tr>
|
<% }
|
||||||
<td><b>Custom options:</b>
|
%></select>
|
||||||
</td>
|
</div>
|
||||||
<td>
|
|
||||||
<input type="text" name="customOptions" size="60" value="<%=editBean.getCustomOptions(curTunnel)%>" />
|
<div class="subdivider">
|
||||||
</td>
|
<hr />
|
||||||
</tr>
|
</div>
|
||||||
<tr>
|
|
||||||
<td colspan="2">
|
<div id="optionsField" class="rowItem">
|
||||||
<hr size="1">
|
<label>I2CP Options:</label>
|
||||||
</td>
|
</div>
|
||||||
</tr>
|
<div id="optionsHostField" class="rowItem">
|
||||||
<tr>
|
<label for="clientHost" accesskey="o">
|
||||||
<td>
|
H<span class="accessKey">o</span>st:
|
||||||
<b>Save:</b>
|
</label>
|
||||||
</td>
|
<input type="text" id="clientHost" name="clientHost" size="20" title="I2CP Hostname or IP" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext" />
|
||||||
<td>
|
</div>
|
||||||
<input type="submit" name="action" value="Save changes" />
|
<div id="optionsPortField" class="rowItem">
|
||||||
</td>
|
<label for="clientPort" accesskey="r">
|
||||||
</tr>
|
Po<span class="accessKey">r</span>t:
|
||||||
<tr>
|
</label>
|
||||||
<td><b>Delete?</b>
|
<input type="text" id="clientPort" name="clientPort" size="20" title="I2CP Port Number" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext" />
|
||||||
</td>
|
</div>
|
||||||
<td>
|
|
||||||
<input type="submit" name="action" value="Delete this proxy" />
|
<div class="subdivider">
|
||||||
<b><span style="color:#dd0000;">confirm delete:</span></b>
|
<hr />
|
||||||
<input type="checkbox" value="true" name="removeConfirm" />
|
</div>
|
||||||
</td>
|
|
||||||
</tr>
|
<div id="customOptionsField" class="rowItem">
|
||||||
</table>
|
<label for="customOptions" accesskey="u">
|
||||||
</td>
|
C<span class="accessKey">u</span>stom options:
|
||||||
</tr>
|
</label>
|
||||||
</table>
|
<input type="text" id="customOptions" name="customOptions" size="60" title="Custom Options" value="<%=editBean.getCustomOptions(curTunnel)%>" class="freetext" />
|
||||||
</form>
|
</div>
|
||||||
|
|
||||||
|
<div class="footer">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="globalOperationsPanel" class="panel">
|
||||||
|
<div class="header"></div>
|
||||||
|
<div class="footer">
|
||||||
|
<div class="toolbox">
|
||||||
|
<input type="hidden" value="true" name="removeConfirm" />
|
||||||
|
<button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><span class="accessKey">S</span>ave</button><button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><span class="accessKey">D</span>elete</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<div id="pageFooter">
|
||||||
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@ -1,185 +1,258 @@
|
|||||||
<%@page contentType="text/html" import="net.i2p.i2ptunnel.web.IndexBean" %>
|
<%@page contentType="text/html" import="net.i2p.i2ptunnel.web.IndexBean"%><?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
<jsp:useBean class="net.i2p.i2ptunnel.web.IndexBean" id="indexBean" scope="request" />
|
<jsp:useBean class="net.i2p.i2ptunnel.web.IndexBean" id="indexBean" scope="request" />
|
||||||
<jsp:setProperty name="indexBean" property="*" />
|
<jsp:setProperty name="indexBean" property="*" />
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<html>
|
|
||||||
<head>
|
<head>
|
||||||
<title>I2PTunnel Webmanager</title>
|
<title>I2PTunnel Webmanager - List</title>
|
||||||
</head>
|
|
||||||
<body style="font-family: Verdana, Tahoma, Helvetica, sans-serif;font-size:12px;">
|
|
||||||
<table width="90%" align="center" border="0" cellpadding="1" cellspacing="1">
|
|
||||||
<tr>
|
|
||||||
<td style="background-color:#000">
|
|
||||||
<div style="background-color:#ffffed">
|
|
||||||
<table width="100%" align="center" border="0" cellpadding="4" cellspacing="1">
|
|
||||||
<tr>
|
|
||||||
<td nowrap="true"><b>New Messages: </b><br />
|
|
||||||
<a href="index.jsp">refresh</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<textarea rows="3" cols="60" readonly="true"><jsp:getProperty name="indexBean" property="messages" /></textarea>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<br />
|
|
||||||
<table width="90%" align="center" border="0" cellpadding="1" cellspacing="1">
|
|
||||||
<tr>
|
|
||||||
<td style="background-color:#000">
|
|
||||||
<div style="background-color:#ffffed">
|
|
||||||
|
|
||||||
<table width="100%" align="center" border="0" cellpadding="4" cellspacing="1">
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
<tr>
|
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
||||||
<td colspan="7" align="center" valign="middle" style="font-size:14px;">
|
|
||||||
<b>Your Client Tunnels:</b><br />
|
<% if (indexBean.allowCSS()) {
|
||||||
<hr size="1" />
|
%><link href="images/favicon.ico" type="image/x-icon" rel="shortcut icon" />
|
||||||
</td>
|
<link href="<%=indexBean.getTheme()%>default.css" rel="stylesheet" type="text/css" />
|
||||||
</tr>
|
<link href="<%=indexBean.getTheme()%>i2ptunnel.css" rel="stylesheet" type="text/css" />
|
||||||
<tr>
|
<% }
|
||||||
<td width="15%"><b>Name:</b></td>
|
%>
|
||||||
<td><b>Port:</b></td>
|
</head>
|
||||||
<td><b>Type:</b></td>
|
<body id="tunnelListPage">
|
||||||
<td><b>Interface:</b></td>
|
<div id="pageHeader">
|
||||||
<td><b>Status:</b></td>
|
</div>
|
||||||
</tr>
|
|
||||||
<% for (int curClient = 0; curClient < indexBean.getTunnelCount(); curClient++) {
|
<div id="statusMessagePanel" class="panel">
|
||||||
if (!indexBean.isClient(curClient)) continue; %>
|
<div class="header">
|
||||||
<tr>
|
<h4>Status Messages</h4>
|
||||||
<td valign="top" align="left">
|
</div>
|
||||||
<b><a href="edit.jsp?tunnel=<%=curClient%>"><%=indexBean.getTunnelName(curClient) %></a></b></td>
|
|
||||||
<td valign="top" align="left" nowrap="true"><%=indexBean.getClientPort(curClient) %></td>
|
<div class="separator">
|
||||||
<td valign="top" align="left" nowrap="true"><%=indexBean.getTunnelType(curClient) %></td>
|
<hr />
|
||||||
<td valign="top" align="left" nowrap="true"><%=indexBean.getClientInterface(curClient) %></td>
|
</div>
|
||||||
<td valign="top" align="left" nowrap="true"><%
|
|
||||||
|
<textarea id="statusMessages" rows="3" cols="60" readonly="readonly"><jsp:getProperty name="indexBean" property="messages" /></textarea>
|
||||||
|
|
||||||
|
<div class="separator">
|
||||||
|
<hr />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer">
|
||||||
|
<div class="toolbox">
|
||||||
|
<a class="control" href="index.jsp">Refresh</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="localClientTunnelList" class="panel">
|
||||||
|
<div class="header">
|
||||||
|
<h4>Local Client Tunnels</h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="separator">
|
||||||
|
<hr />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="nameHeaderField rowItem">
|
||||||
|
<label>Name:</label>
|
||||||
|
</div>
|
||||||
|
<div class="portHeaderField rowItem">
|
||||||
|
<label>Port:</label>
|
||||||
|
</div>
|
||||||
|
<div class="typeHeaderField rowItem">
|
||||||
|
<label>Type:</label>
|
||||||
|
</div>
|
||||||
|
<div class="interfaceHeaderField rowItem">
|
||||||
|
<label>Interface:</label>
|
||||||
|
</div>
|
||||||
|
<div class="statusHeaderField rowItem">
|
||||||
|
<label>Status:</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="separator">
|
||||||
|
<hr />
|
||||||
|
</div>
|
||||||
|
<%
|
||||||
|
for (int curClient = 0; curClient < indexBean.getTunnelCount(); curClient++) {
|
||||||
|
if (!indexBean.isClient(curClient)) continue;
|
||||||
|
%>
|
||||||
|
<div class="nameField rowItem">
|
||||||
|
<label>Name:</label>
|
||||||
|
<span class="text"><a href="edit.jsp?tunnel=<%=curClient%>" title="Edit Tunnel Settings for <%=indexBean.getTunnelName(curClient)%>"><%=indexBean.getTunnelName(curClient)%></a></span>
|
||||||
|
</div>
|
||||||
|
<div class="portField rowItem">
|
||||||
|
<label>Port:</label>
|
||||||
|
<span class="text"><%=indexBean.getClientPort(curClient)%></span>
|
||||||
|
</div>
|
||||||
|
<div class="typeField rowItem">
|
||||||
|
<label>Type:</label>
|
||||||
|
<span class="text"><%=indexBean.getTunnelType(curClient)%></span>
|
||||||
|
</div>
|
||||||
|
<div class="interfaceField rowItem">
|
||||||
|
<label>Interface:</label>
|
||||||
|
<span class="text"><%=indexBean.getClientInterface(curClient)%></span>
|
||||||
|
</div>
|
||||||
|
<div class="statusField rowItem">
|
||||||
|
<label>Status:</label>
|
||||||
|
<%
|
||||||
switch (indexBean.getTunnelStatus(curClient)) {
|
switch (indexBean.getTunnelStatus(curClient)) {
|
||||||
case IndexBean.STARTING:
|
case IndexBean.STARTING:
|
||||||
%><b><span style="color:#339933">Starting...</span></b>
|
%><div class="statusStarting text">Starting...</div>
|
||||||
<a href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=stop&tunnel=<%=curClient%>">[STOP]</a><%
|
<a class="control" title="Stop this Tunnel" href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=stop&tunnel=<%=curClient%>">Stop</a>
|
||||||
|
<%
|
||||||
break;
|
break;
|
||||||
case IndexBean.RUNNING:
|
case IndexBean.RUNNING:
|
||||||
%><b><span style="color:#00dd00">Running</span></b>
|
%><div class="statusRunning text">Running</div>
|
||||||
<a href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=stop&tunnel=<%=curClient%>">[STOP]</a><%
|
<a class="control" title="Stop this Tunnel" href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=stop&tunnel=<%=curClient%>">Stop</a>
|
||||||
|
<%
|
||||||
break;
|
break;
|
||||||
case IndexBean.NOT_RUNNING:
|
case IndexBean.NOT_RUNNING:
|
||||||
%><b><span style="color:#dd0000">Not Running</span></b>
|
%><div class="statusNotRunning text">Stopped</div>
|
||||||
<a href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=start&tunnel=<%=curClient%>">[START]</a><%
|
<a class="control" title="Start this Tunnel" href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=start&tunnel=<%=curClient%>">Start</a>
|
||||||
|
<%
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
%></td>
|
%></div>
|
||||||
</tr>
|
|
||||||
<tr><td align="right" valign="top">Destination:</td>
|
|
||||||
<td colspan="4"><input align="left" size="40" valign="top" style="overflow: hidden" readonly="true" value="<%=indexBean.getClientDestination(curClient) %>" /></td></tr>
|
|
||||||
<tr>
|
|
||||||
<td valign="top" align="right">Description:</td>
|
|
||||||
<td valign="top" align="left" colspan="4"><%=indexBean.getTunnelDescription(curClient) %></td>
|
|
||||||
</tr>
|
|
||||||
<% } %>
|
|
||||||
</table>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<br />
|
|
||||||
|
|
||||||
<table width="90%" align="center" border="0" cellpadding="1" cellspacing="1">
|
<div class="destinationField rowItem">
|
||||||
<tr>
|
<label>Destination:</label>
|
||||||
<td style="background-color:#000">
|
<input class="freetext" size="40" readonly="readonly" value="<%=indexBean.getClientDestination(curClient)%>" />
|
||||||
<div style="background-color:#ffffed">
|
</div>
|
||||||
<table width="100%" align="center" border="0" cellpadding="4" cellspacing="1">
|
|
||||||
<tr>
|
|
||||||
<td colspan="5" align="center" valign="middle" style="font-size:14px;">
|
|
||||||
<b>Your Server Tunnels:</b><br />
|
|
||||||
<hr size="1" />
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td width="15%"><b>Name: </b>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<b>Points at:</b>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<b>Status:</b>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<% for (int curServer = 0; curServer < indexBean.getTunnelCount(); curServer++) {
|
<div class="descriptionField rowItem">
|
||||||
if (indexBean.isClient(curServer)) continue; %>
|
<label>Description:</label>
|
||||||
|
<div class="text"><%=indexBean.getTunnelDescription(curClient)%></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<tr>
|
<div class="subdivider">
|
||||||
<td valign="top">
|
<hr />
|
||||||
<b><a href="edit.jsp?tunnel=<%=curServer%>"><%=indexBean.getTunnelName(curServer)%></a></b>
|
</div>
|
||||||
</td>
|
<%
|
||||||
<td valign="top"><%=indexBean.getServerTarget(curServer)%></td>
|
}
|
||||||
<td valign="top" nowrap="true"><%
|
%>
|
||||||
|
<div class="separator">
|
||||||
|
<hr />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer">
|
||||||
|
<form id="addNewClientTunnelForm" action="edit.jsp">
|
||||||
|
<div class="toolbox">
|
||||||
|
<label>Add new client tunnel:</label>
|
||||||
|
<select name="type">
|
||||||
|
<option value="client">Standard</option>
|
||||||
|
<option value="httpclient">HTTP</option>
|
||||||
|
</select>
|
||||||
|
<input class="control" type="submit" value="Create" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="localServerTunnelList" class="panel">
|
||||||
|
<div class="header">
|
||||||
|
<h4>Local Server Tunnels</h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="separator">
|
||||||
|
<hr />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="nameHeaderField rowItem">
|
||||||
|
<label>Name:</label>
|
||||||
|
</div>
|
||||||
|
<div class="targetHeaderField rowItem">
|
||||||
|
<label>Points at:</label>
|
||||||
|
</div>
|
||||||
|
<div class="previewHeaderField rowItem">
|
||||||
|
<label>Preview:</label>
|
||||||
|
</div>
|
||||||
|
<div class="statusHeaderField rowItem">
|
||||||
|
<label>Status:</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%
|
||||||
|
for (int curServer = 0; curServer < indexBean.getTunnelCount(); curServer++) {
|
||||||
|
if (indexBean.isClient(curServer)) continue;
|
||||||
|
|
||||||
|
%>
|
||||||
|
<div class="nameField rowItem">
|
||||||
|
<label>Name:</label>
|
||||||
|
<span class="text"><a href="edit.jsp?tunnel=<%=curServer%>" title="Edit Server Tunnel Settings for <%=indexBean.getTunnelName(curServer)%>"><%=indexBean.getTunnelName(curServer)%></a></span>
|
||||||
|
</div>
|
||||||
|
<div class="targetField rowItem">
|
||||||
|
<label>Points at:</label>
|
||||||
|
<span class="text"><%=indexBean.getServerTarget(curServer)%></span>
|
||||||
|
</div>
|
||||||
|
<div class="previewField rowItem">
|
||||||
|
<%
|
||||||
|
if ("httpserver".equals(indexBean.getInternalType(curServer)) && indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
|
||||||
|
%><label>Preview:</label>
|
||||||
|
<a class="control" title="Preview this Tunnel" href="http://<%=(new java.util.Random()).nextLong()%>.i2p/?i2paddresshelper=<%=indexBean.getDestinationBase64(curServer)%>" target="_new">Preview</a>
|
||||||
|
<%
|
||||||
|
} else {
|
||||||
|
%><span class="comment">No Preview</span>
|
||||||
|
<%
|
||||||
|
}
|
||||||
|
%></div>
|
||||||
|
<div class="statusField rowItem">
|
||||||
|
<label>Status:</label>
|
||||||
|
<%
|
||||||
switch (indexBean.getTunnelStatus(curServer)) {
|
switch (indexBean.getTunnelStatus(curServer)) {
|
||||||
|
case IndexBean.STARTING:
|
||||||
|
%><div class="statusStarting text">Starting...</div>
|
||||||
|
<a class="control" title="Stop this Tunnel" href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=stop&tunnel=<%=curServer%>">Stop</a>
|
||||||
|
<%
|
||||||
|
break;
|
||||||
case IndexBean.RUNNING:
|
case IndexBean.RUNNING:
|
||||||
%><b><span style="color:#00dd00">Running</span></b>
|
%><div class="statusRunning text">Running</div>
|
||||||
<a href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=stop&tunnel=<%=curServer%>">[STOP]</a><%
|
<a class="control" title="Stop this Tunnel" href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=stop&tunnel=<%=curServer%>">Stop</a>
|
||||||
if ("httpserver".equals(indexBean.getInternalType(curServer))) {
|
<%
|
||||||
%> (<a href="http://<%=(new java.util.Random()).nextLong()%>.i2p/?i2paddresshelper=<%=indexBean.getDestinationBase64(curServer)%>">preview</a>)<%
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case IndexBean.NOT_RUNNING:
|
case IndexBean.NOT_RUNNING:
|
||||||
%><b><span style="color:#dd0000">Not Running</span></b>
|
%><div class="statusNotRunning text">Stopped</div>
|
||||||
<a href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=start&tunnel=<%=curServer%>">[START]</a><%
|
<a class="control" title="Start this Tunnel" href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=start&tunnel=<%=curServer%>">Start</a>
|
||||||
break;
|
<%
|
||||||
case IndexBean.STARTING:
|
|
||||||
%>
|
|
||||||
<b><span style="color:#339933">Starting...</span></b>
|
|
||||||
<a href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=stop&tunnel=<%=curServer%>">[STOP]</a><%
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
%>
|
%></div>
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr><td valign="top" align="right">Description:</td>
|
|
||||||
<td valign="top" align="left" colspan="2"><%=indexBean.getTunnelDescription(curServer)%></td></tr>
|
|
||||||
<% } %>
|
|
||||||
|
|
||||||
</table>
|
<div class="descriptionField rowItem">
|
||||||
</td>
|
<label>Description:</label>
|
||||||
</tr>
|
<div class="text"><%=indexBean.getTunnelDescription(curServer)%></div>
|
||||||
</table>
|
</div>
|
||||||
<br />
|
|
||||||
<table width="90%" align="center" border="0" cellpadding="1" cellspacing="1">
|
<div class="subdivider">
|
||||||
<tr>
|
<hr />
|
||||||
<td style="background-color:#000">
|
</div>
|
||||||
<div style="background-color:#ffffed">
|
<%
|
||||||
<table width="100%" align="center" border="0" cellpadding="4" cellspacing="1">
|
}
|
||||||
<tr>
|
%>
|
||||||
<td colspan="2" align="center" valign="middle">
|
<div class="separator">
|
||||||
<b>Operations Menu - Please chose from below!</b><br /><br />
|
<hr />
|
||||||
</td>
|
</div>
|
||||||
</tr>
|
|
||||||
<tr>
|
<div class="footer">
|
||||||
<form action="index.jsp" method="GET">
|
<form id="addNewServerTunnelForm" action="edit.jsp">
|
||||||
<td >
|
<div class="toolbox">
|
||||||
<input type="hidden" name="nonce" value="<%=indexBean.getNextNonce()%>" />
|
<label>Add new server tunnel:</label>
|
||||||
<input type="submit" name="action" value="Stop all tunnels" />
|
<select name="type">
|
||||||
<input type="submit" name="action" value="Start all tunnels" />
|
<option value="server">Standard</option>
|
||||||
<input type="submit" name="action" value="Restart all" />
|
<option value="httpserver">HTTP</option>
|
||||||
<input type="submit" name="action" value="Reload config" />
|
</select>
|
||||||
</td>
|
<input class="control" type="submit" value="Create" />
|
||||||
</form>
|
</div>
|
||||||
<form action="edit.jsp">
|
</form>
|
||||||
<td >
|
</div>
|
||||||
<b>Add new:</b>
|
</div>
|
||||||
<select name="type">
|
|
||||||
<option value="httpclient">HTTP proxy</option>
|
<div id="globalOperationsPanel" class="panel">
|
||||||
<option value="ircclient">IRC proxy</option>
|
<div class="header"></div>
|
||||||
<option value="client">Client tunnel</option>
|
<div class="footer">
|
||||||
<option value="server">Server tunnel</option>
|
<div class="toolbox">
|
||||||
<option value="httpserver">HTTP server tunnel</option>
|
<a class="control" href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=Stop%20all">Stop All</a><a class="control" href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=Start%20all">Start All</a><a class="control" href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=Restart%20all">Restart All</a><a class="control" href="index.jsp?nonce=<%=indexBean.getNextNonce()%>&action=Reload%20configuration">Reload Config</a>
|
||||||
</select> <input type="submit" value="Create" />
|
</div>
|
||||||
</td>
|
</div>
|
||||||
</form>
|
</div>
|
||||||
</tr>
|
|
||||||
</table>
|
<div id="pageFooter">
|
||||||
</td>
|
</div>
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
23
history.txt
23
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
|
2005-11-11 jrandom
|
||||||
* Default Syndie to single user mode, and automatically log into a default
|
* Default Syndie to single user mode, and automatically log into a default
|
||||||
|
@ -15,9 +15,9 @@ import net.i2p.CoreVersion;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class RouterVersion {
|
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 String VERSION = "0.6.1.4";
|
||||||
public final static long BUILD = 6;
|
public final static long BUILD = 7;
|
||||||
public static void main(String args[]) {
|
public static void main(String args[]) {
|
||||||
System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
|
System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
|
||||||
System.out.println("Router ID: " + RouterVersion.ID);
|
System.out.println("Router ID: " + RouterVersion.ID);
|
||||||
|
Reference in New Issue
Block a user