propagate from branch 'i2p.i2p.zzz.test' (head 16046dc1b2fd2a8b10de465cf238233f5d6954af)

to branch 'i2p.i2p' (head f222777c65da9e465bbf717582b4384d31848e07)
This commit is contained in:
zzz
2009-10-26 15:20:30 +00:00
64 changed files with 6099 additions and 1114 deletions

View File

@ -27,8 +27,8 @@ do
# translate calls must be one of the forms: # translate calls must be one of the forms:
# _("foo") # _("foo")
# _x("foo") # _x("foo")
# cssHelper._("foo") # intl._("foo")
# cssHelper.title("foo") # intl.title("foo")
# handler._("foo") # handler._("foo")
# formhandler._("foo") # formhandler._("foo")
# In a jsp, you must use a helper or handler that has the context set. # In a jsp, you must use a helper or handler that has the context set.
@ -36,7 +36,7 @@ do
# then ant distclean updater. # then ant distclean updater.
find src ../jsp/WEB-INF -name *.java > $TMPFILE find src ../jsp/WEB-INF -name *.java > $TMPFILE
xgettext -f $TMPFILE -F -L java \ xgettext -f $TMPFILE -F -L java \
--keyword=_ --keyword=_x --keyword=cssHelper._ --keyword=cssHelper.title \ --keyword=_ --keyword=_x --keyword=intl._ --keyword=intl.title \
--keyword=handler._ --keyword=formhandler._ \ --keyword=handler._ --keyword=formhandler._ \
-o ${i}t -o ${i}t
if [ $? -ne 0 ] if [ $? -ne 0 ]

View File

@ -29,9 +29,9 @@ public class ConfigClientsHandler extends FormHandler {
@Override @Override
protected void processForm() { protected void processForm() {
if (_action.startsWith("Save Client")) { if (_action.equals(_("Save Client Configuration"))) {
saveClientChanges(); saveClientChanges();
} else if (_action.startsWith("Save WebApp")) { } else if (_action.equals(_("Save WebApp Configuration"))) {
saveWebAppChanges(); saveWebAppChanges();
} else if (_action.startsWith("Start ")) { } else if (_action.startsWith("Start ")) {
String app = _action.substring(6); String app = _action.substring(6);
@ -43,7 +43,7 @@ public class ConfigClientsHandler extends FormHandler {
startClient(appnum); startClient(appnum);
else else
startWebApp(app); startWebApp(app);
} else if (_action.toLowerCase().startsWith("start<span class=hide> ") && } else if (_action.toLowerCase().startsWith("Start<span class=hide> ") &&
_action.toLowerCase().endsWith("</span>")) { _action.toLowerCase().endsWith("</span>")) {
// IE sucks // IE sucks
String app = _action.substring(23, _action.length() - 7); String app = _action.substring(23, _action.length() - 7);
@ -56,7 +56,7 @@ public class ConfigClientsHandler extends FormHandler {
else else
startWebApp(app); startWebApp(app);
} else { } else {
addFormError("Unsupported " + _action + "."); addFormError(_("Unsupported") + " " + _action + ".");
} }
} }
@ -71,18 +71,18 @@ public class ConfigClientsHandler extends FormHandler {
ca.disabled = val == null; ca.disabled = val == null;
} }
ClientAppConfig.writeClientAppConfig(_context, clients); ClientAppConfig.writeClientAppConfig(_context, clients);
addFormNotice("Client configuration saved successfully - restart required to take effect."); addFormNotice(_("Client configuration saved successfully - restart required to take effect."));
} }
private void startClient(int i) { private void startClient(int i) {
List clients = ClientAppConfig.getClientApps(_context); List clients = ClientAppConfig.getClientApps(_context);
if (i >= clients.size()) { if (i >= clients.size()) {
addFormError("Bad client index."); addFormError(_("Bad client index."));
return; return;
} }
ClientAppConfig ca = (ClientAppConfig) clients.get(i); ClientAppConfig ca = (ClientAppConfig) clients.get(i);
LoadClientAppsJob.runClient(ca.className, ca.clientName, LoadClientAppsJob.parseArgs(ca.args), configClient_log); LoadClientAppsJob.runClient(ca.className, ca.clientName, LoadClientAppsJob.parseArgs(ca.args), configClient_log);
addFormNotice("Client " + ca.clientName + " started."); addFormNotice(_("Client") + " " + ca.clientName + " " + _("started") + ".");
} }
private void saveWebAppChanges() { private void saveWebAppChanges() {
@ -99,7 +99,7 @@ public class ConfigClientsHandler extends FormHandler {
props.setProperty(name, "" + (val != null)); props.setProperty(name, "" + (val != null));
} }
RouterConsoleRunner.storeWebAppProperties(props); RouterConsoleRunner.storeWebAppProperties(props);
addFormNotice("WebApp configuration saved successfully - restart required to take effect."); addFormNotice(_("WebApp configuration saved successfully - restart required to take effect."));
} }
// Big hack for the moment, not using properties for directory and port // Big hack for the moment, not using properties for directory and port
@ -117,14 +117,14 @@ public class ConfigClientsHandler extends FormHandler {
path = new File(path, app + ".war"); path = new File(path, app + ".war");
s.addWebApplication("/"+ app, path.getAbsolutePath()).start(); s.addWebApplication("/"+ app, path.getAbsolutePath()).start();
// no passwords... initialize(wac); // no passwords... initialize(wac);
addFormNotice("WebApp <a href=\"/" + app + "/\">" + app + "</a> started."); addFormNotice("WebApp <a href=\"/" + app + "/\">" + app + "</a> " + _("started") + ".");
} catch (Exception ioe) { } catch (Exception ioe) {
addFormError("Failed to start " + app + " " + ioe + "."); addFormError(_("Failed to start") + " " + app + " " + ioe + ".");
} }
return; return;
} }
} }
} }
addFormError("Failed to find server."); addFormError(_("Failed to find server."));
} }
} }

View File

@ -14,7 +14,7 @@ public class ConfigClientsHelper extends HelperBase {
public String getForm1() { public String getForm1() {
StringBuilder buf = new StringBuilder(1024); StringBuilder buf = new StringBuilder(1024);
buf.append("<table>\n"); buf.append("<table>\n");
buf.append("<tr><th align=\"right\">Client</th><th>Run at Startup?</th><th>Start Now</th><th align=\"left\">Class and arguments</th></tr>\n"); buf.append("<tr><th align=\"right\">" + _("Client") + "</th><th>" + _("Run at Startup?") + "</th><th>" + _("Start Now") + "</th><th align=\"left\">" + _("Class and arguments") + "</th></tr>\n");
List clients = ClientAppConfig.getClientApps(_context); List clients = ClientAppConfig.getClientApps(_context);
for (int cur = 0; cur < clients.size(); cur++) { for (int cur = 0; cur < clients.size(); cur++) {
@ -30,7 +30,7 @@ public class ConfigClientsHelper extends HelperBase {
public String getForm2() { public String getForm2() {
StringBuilder buf = new StringBuilder(1024); StringBuilder buf = new StringBuilder(1024);
buf.append("<table>\n"); buf.append("<table>\n");
buf.append("<tr><th align=\"right\">WebApp</th><th>Run at Startup?</th><th>Start Now</th><th align=\"left\">Description</th></tr>\n"); buf.append("<tr><th align=\"right\">" + _("WebApp") + "</th><th>" + _("Run at Startup?") + "</th><th>" + _("Start Now") + "</th><th align=\"left\">" + _("Description") + "</th></tr>\n");
Properties props = RouterConsoleRunner.webAppProperties(); Properties props = RouterConsoleRunner.webAppProperties();
Set keys = new TreeSet(props.keySet()); Set keys = new TreeSet(props.keySet());
for (Iterator iter = keys.iterator(); iter.hasNext(); ) { for (Iterator iter = keys.iterator(); iter.hasNext(); ) {
@ -63,7 +63,7 @@ public class ConfigClientsHelper extends HelperBase {
} }
buf.append("/></td><td align=\"center\" width=\"15%\">"); buf.append("/></td><td align=\"center\" width=\"15%\">");
if (!enabled) { if (!enabled) {
buf.append("<button type=\"submit\" name=\"action\" value=\"Start ").append(index).append("\" >Start<span class=hide> ").append(index).append("</span></button>"); buf.append("<button type=\"submit\" name=\"action\" value=\"Start ").append(index).append("\" >" + _("Start") + "<span class=hide> ").append(index).append("</span></button>");
} }
buf.append("</td><td align=\"left\" width=\"50%\">").append(desc).append("</td></tr>\n"); buf.append("</td><td align=\"left\" width=\"50%\">").append(desc).append("</td></tr>\n");
} }

View File

@ -15,12 +15,12 @@ public class ConfigKeyringHandler extends FormHandler {
@Override @Override
protected void processForm() { protected void processForm() {
if (_action == null) return; if (_action == null) return;
boolean adding = _action.startsWith("Add"); boolean adding = _action.equals(_("Add key"));
if (adding || _action.startsWith("Delete")) { if (adding || _action.equals(_("Delete key"))) {
if (_peer == null) if (_peer == null)
addFormError("You must enter a destination"); addFormError(_("You must enter a destination"));
if (_key == null && adding) if (_key == null && adding)
addFormError("You must enter a key"); addFormError(_("You must enter a key"));
if (_peer == null || (_key == null && adding)) if (_peer == null || (_key == null && adding))
return; return;
Hash h = ConvertToHash.getHash(_peer); Hash h = ConvertToHash.getHash(_peer);
@ -33,7 +33,7 @@ public class ConfigKeyringHandler extends FormHandler {
_context.keyRing().put(h, sk); _context.keyRing().put(h, sk);
addFormNotice("Key for " + h.toBase64() + " added to keyring"); addFormNotice("Key for " + h.toBase64() + " added to keyring");
} else { } else {
addFormError("Invalid destination or key"); addFormError(_("Invalid destination or key"));
} }
} else { // Delete } else { // Delete
if (h != null && h.getData() != null) { if (h != null && h.getData() != null) {
@ -42,11 +42,11 @@ public class ConfigKeyringHandler extends FormHandler {
else else
addFormNotice("Key for " + h.toBase64() + " not found in keyring"); addFormNotice("Key for " + h.toBase64() + " not found in keyring");
} else { } else {
addFormError("Invalid destination"); addFormError(_("Invalid destination"));
} }
} }
} else { } else {
addFormError("Unsupported"); addFormError(_("Unsupported"));
} }
} }

View File

@ -44,7 +44,7 @@ public class ConfigNetHandler extends FormHandler {
@Override @Override
protected void processForm() { protected void processForm() {
if (_saveRequested || ( (_action != null) && ("Save changes".equals(_action)) )) { if (_saveRequested || ( (_action != null) && (_("Save changes").equals(_action)) )) {
saveChanges(); saveChanges();
} else if (_recheckReachabilityRequested) { } else if (_recheckReachabilityRequested) {
recheckReachability(); recheckReachability();
@ -116,7 +116,7 @@ public class ConfigNetHandler extends FormHandler {
private void recheckReachability() { private void recheckReachability() {
_context.commSystem().recheckReachability(); _context.commSystem().recheckReachability();
addFormNotice("Rechecking router reachability..."); addFormNotice(_("Rechecking router reachability..."));
} }
/** /**
@ -145,7 +145,7 @@ public class ConfigNetHandler extends FormHandler {
// Todo: Catch local IPs right here rather than complaining later // Todo: Catch local IPs right here rather than complaining later
_context.router().setConfigSetting(UDPTransport.PROP_EXTERNAL_HOST, uhost); _context.router().setConfigSetting(UDPTransport.PROP_EXTERNAL_HOST, uhost);
if ((!oldUdp.equals(_udpAutoIP)) || (!oldUHost.equals(uhost))) { if ((!oldUdp.equals(_udpAutoIP)) || (!oldUHost.equals(uhost))) {
addFormNotice("Updating IP address"); addFormNotice(_("Updating IP address"));
restartRequired = true; restartRequired = true;
} }
} }
@ -163,17 +163,17 @@ public class ConfigNetHandler extends FormHandler {
if ((!oldAutoHost.equals(_ntcpAutoIP)) || ! oldNHost.equalsIgnoreCase(_ntcpHostname)) { if ((!oldAutoHost.equals(_ntcpAutoIP)) || ! oldNHost.equalsIgnoreCase(_ntcpHostname)) {
if ("disabled".equals(_ntcpAutoIP)) { if ("disabled".equals(_ntcpAutoIP)) {
addFormNotice("Disabling TCP completely"); addFormNotice(_("Disabling TCP completely"));
} else if ("false".equals(_ntcpAutoIP) && _ntcpHostname.length() > 0) { } else if ("false".equals(_ntcpAutoIP) && _ntcpHostname.length() > 0) {
// Todo: Catch local IPs right here rather than complaining later // Todo: Catch local IPs right here rather than complaining later
_context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_HOSTNAME, _ntcpHostname); _context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_HOSTNAME, _ntcpHostname);
addFormNotice("Updating inbound TCP address to " + _ntcpHostname); addFormNotice(_("Updating inbound TCP address to") + " " + _ntcpHostname);
} else { } else {
_context.router().removeConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_HOSTNAME); _context.router().removeConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_HOSTNAME);
if ("false".equals(_ntcpAutoIP)) if ("false".equals(_ntcpAutoIP))
addFormNotice("Disabling inbound TCP"); addFormNotice(_("Disabling inbound TCP"));
else else
addFormNotice("Updating inbound TCP address to auto"); // true or always addFormNotice(_("Updating inbound TCP address to auto")); // true or always
} }
_context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_AUTO_IP, _ntcpAutoIP); _context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_AUTO_IP, _ntcpAutoIP);
_context.router().setConfigSetting(TransportManager.PROP_ENABLE_NTCP, "" + !"disabled".equals(_ntcpAutoIP)); _context.router().setConfigSetting(TransportManager.PROP_ENABLE_NTCP, "" + !"disabled".equals(_ntcpAutoIP));
@ -182,10 +182,10 @@ public class ConfigNetHandler extends FormHandler {
if (oldAutoPort != _ntcpAutoPort || ! oldNPort.equals(_ntcpPort)) { if (oldAutoPort != _ntcpAutoPort || ! oldNPort.equals(_ntcpPort)) {
if (_ntcpPort.length() > 0 && !_ntcpAutoPort) { if (_ntcpPort.length() > 0 && !_ntcpAutoPort) {
_context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_PORT, _ntcpPort); _context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_PORT, _ntcpPort);
addFormNotice("Updating inbound TCP port to " + _ntcpPort); addFormNotice(_("Updating inbound TCP port to") + " " + _ntcpPort);
} else { } else {
_context.router().removeConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_PORT); _context.router().removeConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_PORT);
addFormNotice("Updating inbound TCP port to auto"); addFormNotice(_("Updating inbound TCP port to auto"));
} }
_context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_AUTO_PORT, "" + _ntcpAutoPort); _context.router().setConfigSetting(ConfigNetHelper.PROP_I2NP_NTCP_AUTO_PORT, "" + _ntcpAutoPort);
restartRequired = true; restartRequired = true;
@ -197,7 +197,7 @@ public class ConfigNetHandler extends FormHandler {
if (!oldPort.equals(_udpPort)) { if (!oldPort.equals(_udpPort)) {
_context.router().setConfigSetting(UDPTransport.PROP_INTERNAL_PORT, _udpPort); _context.router().setConfigSetting(UDPTransport.PROP_INTERNAL_PORT, _udpPort);
_context.router().setConfigSetting(UDPTransport.PROP_EXTERNAL_PORT, _udpPort); _context.router().setConfigSetting(UDPTransport.PROP_EXTERNAL_PORT, _udpPort);
addFormNotice("Updating UDP port from " + oldPort + " to " + _udpPort); addFormNotice(_("Updating UDP port from") + " " + oldPort + " " + _("to") + " " + _udpPort);
restartRequired = true; restartRequired = true;
} }
} }
@ -213,9 +213,9 @@ public class ConfigNetHandler extends FormHandler {
if (switchRequired) { if (switchRequired) {
_context.router().setConfigSetting(PROP_HIDDEN, "" + _hiddenMode); _context.router().setConfigSetting(PROP_HIDDEN, "" + _hiddenMode);
if (_hiddenMode) if (_hiddenMode)
addFormError("Gracefully restarting into Hidden Router Mode"); addFormError(_("Gracefully restarting into Hidden Router Mode"));
else else
addFormError("Gracefully restarting to exit Hidden Router Mode"); addFormError(_("Gracefully restarting to exit Hidden Router Mode"));
} }
_context.router().setConfigSetting(Router.PROP_DYNAMIC_KEYS, "" + _dynamicKeys); _context.router().setConfigSetting(Router.PROP_DYNAMIC_KEYS, "" + _dynamicKeys);
@ -224,15 +224,15 @@ public class ConfigNetHandler extends FormHandler {
_upnp) { _upnp) {
// This is minor, don't set restartRequired // This is minor, don't set restartRequired
if (_upnp) if (_upnp)
addFormNotice("Enabling UPnP, restart required to take effect"); addFormNotice(_("Enabling UPnP, restart required to take effect"));
else else
addFormNotice("Disabling UPnP, restart required to take effect"); addFormNotice(_("Disabling UPnP, restart required to take effect"));
} }
_context.router().setConfigSetting(TransportManager.PROP_ENABLE_UPNP, "" + _upnp); _context.router().setConfigSetting(TransportManager.PROP_ENABLE_UPNP, "" + _upnp);
if (_requireIntroductions) { if (_requireIntroductions) {
_context.router().setConfigSetting(UDPTransport.PROP_FORCE_INTRODUCERS, "true"); _context.router().setConfigSetting(UDPTransport.PROP_FORCE_INTRODUCERS, "true");
addFormNotice("Requiring SSU introduers"); addFormNotice(_("Requiring SSU introduers"));
} else { } else {
_context.router().removeConfigSetting(UDPTransport.PROP_FORCE_INTRODUCERS); _context.router().removeConfigSetting(UDPTransport.PROP_FORCE_INTRODUCERS);
} }
@ -246,11 +246,11 @@ public class ConfigNetHandler extends FormHandler {
} }
boolean saved = _context.router().saveConfig(); boolean saved = _context.router().saveConfig();
if ( (_action != null) && ("Save changes".equals(_action)) ) { if ( (_action != null) && (_("Save changes").equals(_action)) ) {
if (saved) if (saved)
addFormNotice("Configuration saved successfully"); addFormNotice(_("Configuration saved successfully"));
else else
addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs"); addFormNotice(_("Error saving the configuration (applied but not saved) - please see the error logs"));
} }
if (switchRequired) { if (switchRequired) {
@ -290,7 +290,7 @@ public class ConfigNetHandler extends FormHandler {
String old = _context.router().getConfigSetting(Router.PROP_BANDWIDTH_SHARE_PERCENTAGE); String old = _context.router().getConfigSetting(Router.PROP_BANDWIDTH_SHARE_PERCENTAGE);
if ( (old == null) || (!old.equalsIgnoreCase(_sharePct)) ) { if ( (old == null) || (!old.equalsIgnoreCase(_sharePct)) ) {
_context.router().setConfigSetting(Router.PROP_BANDWIDTH_SHARE_PERCENTAGE, _sharePct); _context.router().setConfigSetting(Router.PROP_BANDWIDTH_SHARE_PERCENTAGE, _sharePct);
addFormNotice("Updating bandwidth share percentage"); addFormNotice(_("Updating bandwidth share percentage"));
updated = true; updated = true;
} }
} }
@ -360,7 +360,7 @@ public class ConfigNetHandler extends FormHandler {
if (updated && !_ratesOnly) { if (updated && !_ratesOnly) {
_context.bandwidthLimiter().reinitialize(); _context.bandwidthLimiter().reinitialize();
addFormNotice("Updated bandwidth limits"); addFormNotice(_("Updated bandwidth limits"));
} }
} }
} }

View File

@ -17,26 +17,26 @@ public class ConfigPeerHandler extends FormHandler {
if ("Save Configuration".equals(_action)) { if ("Save Configuration".equals(_action)) {
_context.router().saveConfig(); _context.router().saveConfig();
addFormNotice("Settings saved - not really!!!!!"); addFormNotice("Settings saved - not really!!!!!");
} else if (_action.startsWith("Ban")) { } else if (_action.equals(_("Ban peer until restart"))) {
Hash h = getHash(); Hash h = getHash();
if (h != null) { if (h != null) {
_context.shitlist().shitlistRouterForever(h, "Manually banned via <a href=\"configpeer.jsp\">configpeer.jsp</a>"); _context.shitlist().shitlistRouterForever(h, "Manually banned via <a href=\"configpeer.jsp\">configpeer.jsp</a>");
addFormNotice("Peer " + _peer + " banned until restart"); addFormNotice(_("Peer") + " " + _peer + " " + _("banned until restart") );
return; return;
} }
addFormError("Invalid peer"); addFormError(_("Invalid peer"));
} else if (_action.startsWith("Unban")) { } else if (_action.equals(_("Unban peer"))) {
Hash h = getHash(); Hash h = getHash();
if (h != null) { if (h != null) {
if (_context.shitlist().isShitlisted(h)) { if (_context.shitlist().isShitlisted(h)) {
_context.shitlist().unshitlistRouter(h); _context.shitlist().unshitlistRouter(h);
addFormNotice("Peer " + _peer + " unbanned"); addFormNotice(_("Peer") + " " + _peer + " " + _("unbanned") );
} else } else
addFormNotice("Peer " + _peer + " is not currently banned"); addFormNotice(_("Peer") + " " + _peer + " " + _("is not currently banned") );
return; return;
} }
addFormError("Invalid peer"); addFormError(_("Invalid peer"));
} else if (_action.startsWith("Adjust")) { } else if (_action.equals(_("Adjust Profile Bonuses"))) {
Hash h = getHash(); Hash h = getHash();
if (h != null) { if (h != null) {
PeerProfile prof = _context.profileOrganizer().getProfile(h); PeerProfile prof = _context.profileOrganizer().getProfile(h);
@ -44,19 +44,19 @@ public class ConfigPeerHandler extends FormHandler {
try { try {
prof.setSpeedBonus(Long.parseLong(_speed)); prof.setSpeedBonus(Long.parseLong(_speed));
} catch (NumberFormatException nfe) { } catch (NumberFormatException nfe) {
addFormError("Bad speed value"); addFormError(_("Bad speed value"));
} }
try { try {
prof.setCapacityBonus(Long.parseLong(_capacity)); prof.setCapacityBonus(Long.parseLong(_capacity));
} catch (NumberFormatException nfe) { } catch (NumberFormatException nfe) {
addFormError("Bad capacity value"); addFormError(_("Bad capacity value"));
} }
addFormNotice("Bonuses adjusted for " + _peer); addFormNotice("Bonuses adjusted for " + _peer);
} else } else
addFormError("No profile exists for " + _peer); addFormError("No profile exists for " + _peer);
return; return;
} }
addFormError("Invalid peer"); addFormError(_("Invalid peer"));
} else if (_action.startsWith("Check")) { } else if (_action.startsWith("Check")) {
addFormError("Unsupported"); addFormError("Unsupported");
} }

View File

@ -50,36 +50,36 @@ public class ConfigServiceHandler extends FormHandler {
protected void processForm() { protected void processForm() {
if (_action == null) return; if (_action == null) return;
if ("Shutdown gracefully".equals(_action)) { if (_("Shutdown gracefully").equals(_action)) {
_context.addShutdownTask(new UpdateWrapperManagerTask(Router.EXIT_GRACEFUL)); _context.addShutdownTask(new UpdateWrapperManagerTask(Router.EXIT_GRACEFUL));
_context.router().shutdownGracefully(); _context.router().shutdownGracefully();
addFormNotice("Graceful shutdown initiated"); addFormNotice(_("Graceful shutdown initiated"));
} else if ("Shutdown immediately".equals(_action)) { } else if (_("Shutdown immediately").equals(_action)) {
_context.addShutdownTask(new UpdateWrapperManagerTask(Router.EXIT_HARD)); _context.addShutdownTask(new UpdateWrapperManagerTask(Router.EXIT_HARD));
_context.router().shutdown(Router.EXIT_HARD); _context.router().shutdown(Router.EXIT_HARD);
addFormNotice("Shutdown immediately! boom bye bye bad bwoy"); addFormNotice(_("Shutdown immediately! boom bye bye bad bwoy"));
} else if ("Cancel graceful shutdown".equals(_action)) { } else if (_("Cancel graceful shutdown").equals(_action)) {
_context.router().cancelGracefulShutdown(); _context.router().cancelGracefulShutdown();
addFormNotice("Graceful shutdown cancelled"); addFormNotice(_("Graceful shutdown cancelled"));
} else if ("Graceful restart".equals(_action)) { } else if (_("Graceful restart").equals(_action)) {
_context.addShutdownTask(new UpdateWrapperManagerTask(Router.EXIT_GRACEFUL_RESTART)); _context.addShutdownTask(new UpdateWrapperManagerTask(Router.EXIT_GRACEFUL_RESTART));
_context.router().shutdownGracefully(Router.EXIT_GRACEFUL_RESTART); _context.router().shutdownGracefully(Router.EXIT_GRACEFUL_RESTART);
addFormNotice("Graceful restart requested"); addFormNotice(_("Graceful restart requested"));
} else if ("Hard restart".equals(_action)) { } else if (_("Hard restart").equals(_action)) {
_context.addShutdownTask(new UpdateWrapperManagerTask(Router.EXIT_HARD_RESTART)); _context.addShutdownTask(new UpdateWrapperManagerTask(Router.EXIT_HARD_RESTART));
_context.router().shutdown(Router.EXIT_HARD_RESTART); _context.router().shutdown(Router.EXIT_HARD_RESTART);
addFormNotice("Hard restart requested"); addFormNotice(_("Hard restart requested"));
} else if ("Rekey and Restart".equals(_action)) { } else if (_("Rekey and Restart").equals(_action)) {
addFormNotice("Rekeying after graceful restart"); addFormNotice(_("Rekeying after graceful restart"));
_context.addShutdownTask(new UpdateWrapperManagerAndRekeyTask(Router.EXIT_GRACEFUL_RESTART)); _context.addShutdownTask(new UpdateWrapperManagerAndRekeyTask(Router.EXIT_GRACEFUL_RESTART));
_context.router().shutdownGracefully(Router.EXIT_GRACEFUL_RESTART); _context.router().shutdownGracefully(Router.EXIT_GRACEFUL_RESTART);
} else if ("Rekey and Shutdown".equals(_action)) { } else if (_("Rekey and Shutdown").equals(_action)) {
addFormNotice("Rekeying after graceful shutdown"); addFormNotice(_("Rekeying after graceful shutdown"));
_context.addShutdownTask(new UpdateWrapperManagerAndRekeyTask(Router.EXIT_GRACEFUL)); _context.addShutdownTask(new UpdateWrapperManagerAndRekeyTask(Router.EXIT_GRACEFUL));
_context.router().shutdownGracefully(Router.EXIT_GRACEFUL); _context.router().shutdownGracefully(Router.EXIT_GRACEFUL);
} else if ("Run I2P on startup".equals(_action)) { } else if (_("Run I2P on startup").equals(_action)) {
installService(); installService();
} else if ("Don't run I2P on startup".equals(_action)) { } else if (_("Don't run I2P on startup").equals(_action)) {
uninstallService(); uninstallService();
} else if ("Dump threads".equals(_action)) { } else if ("Dump threads".equals(_action)) {
try { try {
@ -88,36 +88,36 @@ public class ConfigServiceHandler extends FormHandler {
addFormError("Warning: unable to contact the service manager - " + t.getMessage()); addFormError("Warning: unable to contact the service manager - " + t.getMessage());
} }
addFormNotice("Threads dumped to wrapper.log"); addFormNotice("Threads dumped to wrapper.log");
} else if ("Show systray icon".equals(_action)) { } else if (_("Show systray icon").equals(_action)) {
try { try {
SysTray tray = SysTray.getInstance(); SysTray tray = SysTray.getInstance();
if (tray != null) { if (tray != null) {
tray.show(); tray.show();
addFormNotice("System tray icon enabled."); addFormNotice(_("System tray icon enabled."));
} else { } else {
addFormNotice("System tray icon feature not supported on this platform. Sorry!"); addFormNotice(_("System tray icon feature not supported on this platform. Sorry!"));
} }
} catch (Throwable t) { } catch (Throwable t) {
addFormError("Warning: unable to contact the systray manager - " + t.getMessage()); addFormError(_("Warning: unable to contact the systray manager") + " - " + t.getMessage());
} }
} else if ("Hide systray icon".equals(_action)) { } else if (_("Hide systray icon").equals(_action)) {
try { try {
SysTray tray = SysTray.getInstance(); SysTray tray = SysTray.getInstance();
if (tray != null) { if (tray != null) {
tray.hide(); tray.hide();
addFormNotice("System tray icon disabled."); addFormNotice(_("System tray icon disabled."));
} else { } else {
addFormNotice("System tray icon feature not supported on this platform. Sorry!"); addFormNotice(_("System tray icon feature not supported on this platform. Sorry!"));
} }
} catch (Throwable t) { } catch (Throwable t) {
addFormError("Warning: unable to contact the systray manager - " + t.getMessage()); addFormError(_("Warning: unable to contact the systray manager") + " - " + t.getMessage());
} }
} else if ("View console on startup".equals(_action)) { } else if (_("View console on startup").equals(_action)) {
browseOnStartup(true); browseOnStartup(true);
addFormNotice("Console is to be shown on startup"); addFormNotice(_("Console is to be shown on startup"));
} else if ("Do not view console on startup".equals(_action)) { } else if (_("Do not view console on startup").equals(_action)) {
browseOnStartup(false); browseOnStartup(false);
addFormNotice("Console is not to be shown on startup"); addFormNotice(_("Console is not to be shown on startup"));
} else { } else {
//addFormNotice("Blah blah blah. whatever. I'm not going to " + _action); //addFormNotice("Blah blah blah. whatever. I'm not going to " + _action);
} }
@ -126,17 +126,17 @@ public class ConfigServiceHandler extends FormHandler {
private void installService() { private void installService() {
try { try {
Runtime.getRuntime().exec("install_i2p_service_winnt.bat"); Runtime.getRuntime().exec("install_i2p_service_winnt.bat");
addFormNotice("Service installed"); addFormNotice(_("Service installed"));
} catch (IOException ioe) { } catch (IOException ioe) {
addFormError("Warning: unable to install the service - " + ioe.getMessage()); addFormError(_("Warning: unable to install the service") + " - " + ioe.getMessage());
} }
} }
private void uninstallService() { private void uninstallService() {
try { try {
Runtime.getRuntime().exec("uninstall_i2p_service_winnt.bat"); Runtime.getRuntime().exec("uninstall_i2p_service_winnt.bat");
addFormNotice("Service removed"); addFormNotice(_("Service removed"));
} catch (IOException ioe) { } catch (IOException ioe) {
addFormError("Warning: unable to remove the service - " + ioe.getMessage()); addFormError(_("Warning: unable to remove the service") + " - " + ioe.getMessage());
} }
} }

View File

@ -137,9 +137,9 @@ public class ConfigTunnelsHandler extends FormHandler {
if (saveRequired) { if (saveRequired) {
boolean saved = _context.router().saveConfig(); boolean saved = _context.router().saveConfig();
if (saved) if (saved)
addFormNotice("Exploratory tunnel configuration saved successfully."); addFormNotice(_("Exploratory tunnel configuration saved successfully."));
else else
addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs."); addFormNotice(_("Error saving the configuration (applied but not saved) - please see the error logs."));
} }
} }
private static final int getInt(Object val) { private static final int getInt(Object val) {

View File

@ -18,7 +18,7 @@ public class ConfigTunnelsHelper extends HelperBase {
TunnelPoolSettings exploratoryOut = _context.tunnelManager().getOutboundSettings(); TunnelPoolSettings exploratoryOut = _context.tunnelManager().getOutboundSettings();
buf.append("<input type=\"hidden\" name=\"pool.0\" value=\"exploratory\" >"); buf.append("<input type=\"hidden\" name=\"pool.0\" value=\"exploratory\" >");
renderForm(buf, 0, "exploratory", "Exploratory tunnels", exploratoryIn, exploratoryOut); renderForm(buf, 0, "exploratory", _("Exploratory tunnels"), exploratoryIn, exploratoryOut);
int cur = 1; int cur = 1;
Set clients = _context.clientManager().listClients(); Set clients = _context.clientManager().listClients();
@ -38,7 +38,7 @@ public class ConfigTunnelsHelper extends HelperBase {
String prefix = dest.calculateHash().toBase64().substring(0,4); String prefix = dest.calculateHash().toBase64().substring(0,4);
buf.append("<input type=\"hidden\" name=\"pool.").append(cur).append("\" value=\""); buf.append("<input type=\"hidden\" name=\"pool.").append(cur).append("\" value=\"");
buf.append(dest.calculateHash().toBase64()).append("\" >"); buf.append(dest.calculateHash().toBase64()).append("\" >");
renderForm(buf, cur, prefix, "Client tunnels for " + name, in, out); renderForm(buf, cur, prefix, _("Client tunnels for") + " " + name, in, out);
cur++; cur++;
} }
@ -61,95 +61,95 @@ public class ConfigTunnelsHelper extends HelperBase {
in.getLength() + in.getLengthVariance() <= 0 || in.getLength() + in.getLengthVariance() <= 0 ||
out.getLength() <= 0 || out.getLength() <= 0 ||
out.getLength() + out.getLengthVariance() <= 0) out.getLength() + out.getLengthVariance() <= 0)
buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 0-hop tunnels.</font></th></tr>"); buf.append("<tr><th colspan=\"3\"><font color=\"red\">" + _("ANONYMITY WARNING - Settings include 0-hop tunnels.") + "</font></th></tr>");
else if (in.getLength() <= 1 || else if (in.getLength() <= 1 ||
in.getLength() + in.getLengthVariance() <= 1 || in.getLength() + in.getLengthVariance() <= 1 ||
out.getLength() <= 1 || out.getLength() <= 1 ||
out.getLength() + out.getLengthVariance() <= 1) out.getLength() + out.getLengthVariance() <= 1)
buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 1-hop tunnels.</font></th></tr>"); buf.append("<tr><th colspan=\"3\"><font color=\"red\">" + _("ANONYMITY WARNING - Settings include 1-hop tunnels.") + "</font></th></tr>");
if (in.getLength() + Math.abs(in.getLengthVariance()) >= WARN_LENGTH || if (in.getLength() + Math.abs(in.getLengthVariance()) >= WARN_LENGTH ||
out.getLength() + Math.abs(out.getLengthVariance()) >= WARN_LENGTH) out.getLength() + Math.abs(out.getLengthVariance()) >= WARN_LENGTH)
buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include very long tunnels.</font></th></tr>"); buf.append("<tr><th colspan=\"3\"><font color=\"red\">" + _("PERFORMANCE WARNING - Settings include very long tunnels.") + "</font></th></tr>");
if (in.getQuantity() + in.getBackupQuantity() >= WARN_QUANTITY || if (in.getQuantity() + in.getBackupQuantity() >= WARN_QUANTITY ||
out.getQuantity() + out.getBackupQuantity() >= WARN_QUANTITY) out.getQuantity() + out.getBackupQuantity() >= WARN_QUANTITY)
buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include high tunnel quantities.</font></th></tr>"); buf.append("<tr><th colspan=\"3\"><font color=\"red\">" + _("PERFORMANCE WARNING - Settings include high tunnel quantities.") + "</font></th></tr>");
buf.append("<tr><th></th><th><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound Tunnels\">&nbsp;&nbsp;Inbound</th><th><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound Tunnels\" title=\"Outbound\">&nbsp;&nbsp;Outbound</th></tr>\n"); buf.append("<tr><th></th><th><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound Tunnels\">&nbsp;&nbsp;" + _("Inbound") + "</th><th><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound Tunnels\" title=\"Outbound\">&nbsp;&nbsp;" + _("Outbound") + "</th></tr>\n");
// buf.append("<tr><th></th><th>Inbound</th><th>Outbound</th></tr>\n"); // buf.append("<tr><th></th><th>Inbound</th><th>Outbound</th></tr>\n");
// tunnel depth // tunnel depth
buf.append("<tr><td align=\"right\" class=\"mediumtags\">Depth:</td>\n"); buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Depth") + ":</td>\n");
buf.append("<td align=\"center\"><select name=\"").append(index).append(".depthInbound\">\n"); buf.append("<td align=\"center\"><select name=\"").append(index).append(".depthInbound\">\n");
int now = in.getLength(); int now = in.getLength();
renderOptions(buf, 0, MAX_LENGTH, now, "", "hop"); renderOptions(buf, 0, MAX_LENGTH, now, "", _("hop"));
if (now > MAX_LENGTH) if (now > MAX_LENGTH)
renderOptions(buf, now, now, now, "", "hop"); renderOptions(buf, now, now, now, "", _("hop"));
buf.append("</select></td>\n"); buf.append("</select></td>\n");
buf.append("<td align=\"center\"><select name=\"").append(index).append(".depthOutbound\">\n"); buf.append("<td align=\"center\"><select name=\"").append(index).append(".depthOutbound\">\n");
now = out.getLength(); now = out.getLength();
renderOptions(buf, 0, MAX_LENGTH, now, "", "hop"); renderOptions(buf, 0, MAX_LENGTH, now, "", _("hop"));
if (now > MAX_LENGTH) if (now > MAX_LENGTH)
renderOptions(buf, now, now, now, "", "hop"); renderOptions(buf, now, now, now, "", _("hop"));
buf.append("</select></td>\n"); buf.append("</select></td>\n");
buf.append("</tr>\n"); buf.append("</tr>\n");
// tunnel depth variance // tunnel depth variance
buf.append("<tr><td align=\"right\" class=\"mediumtags\">Randomization:</td>\n"); buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Randomization") + ":</td>\n");
buf.append("<td align=\"center\"><select name=\"").append(index).append(".varianceInbound\">\n"); buf.append("<td align=\"center\"><select name=\"").append(index).append(".varianceInbound\">\n");
now = in.getLengthVariance(); now = in.getLengthVariance();
renderOptions(buf, 0, 0, now, "", "hop"); renderOptions(buf, 0, 0, now, "", _("hop"));
renderOptions(buf, 1, MAX_VARIANCE, now, "+ 0-", "hop"); renderOptions(buf, 1, MAX_VARIANCE, now, "+ 0-", _("hop"));
renderOptions(buf, MIN_NEG_VARIANCE, -1, now, "+/- 0", "hop"); renderOptions(buf, MIN_NEG_VARIANCE, -1, now, "+/- 0", _("hop"));
if (now > MAX_VARIANCE) if (now > MAX_VARIANCE)
renderOptions(buf, now, now, now, "+ 0-", "hop"); renderOptions(buf, now, now, now, "+ 0-", _("hop"));
else if (now < MIN_NEG_VARIANCE) else if (now < MIN_NEG_VARIANCE)
renderOptions(buf, now, now, now, "+/- 0", "hop"); renderOptions(buf, now, now, now, "+/- 0", _("hop"));
buf.append("</select></td>\n"); buf.append("</select></td>\n");
buf.append("<td align=\"center\"><select name=\"").append(index).append(".varianceOutbound\">\n"); buf.append("<td align=\"center\"><select name=\"").append(index).append(".varianceOutbound\">\n");
now = out.getLengthVariance(); now = out.getLengthVariance();
renderOptions(buf, 0, 0, now, "", "hop"); renderOptions(buf, 0, 0, now, "", _("hop"));
renderOptions(buf, 1, MAX_VARIANCE, now, "+ 0-", "hop"); renderOptions(buf, 1, MAX_VARIANCE, now, "+ 0-", _("hop"));
renderOptions(buf, MIN_NEG_VARIANCE, -1, now, "+/- 0", "hop"); renderOptions(buf, MIN_NEG_VARIANCE, -1, now, "+/- 0", _("hop"));
if (now > MAX_VARIANCE) if (now > MAX_VARIANCE)
renderOptions(buf, now, now, now, "+ 0-", "hop"); renderOptions(buf, now, now, now, "+ 0-", _("hop"));
else if (now < MIN_NEG_VARIANCE) else if (now < MIN_NEG_VARIANCE)
renderOptions(buf, now, now, now, "+/- 0", "hop"); renderOptions(buf, now, now, now, "+/- 0", _("hop"));
buf.append("</select></td>\n"); buf.append("</select></td>\n");
// tunnel quantity // tunnel quantity
buf.append("<tr><td align=\"right\" class=\"mediumtags\">Quantity:</td>\n"); buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Quantity") + ":</td>\n");
buf.append("<td align=\"center\"><select name=\"").append(index).append(".quantityInbound\">\n"); buf.append("<td align=\"center\"><select name=\"").append(index).append(".quantityInbound\">\n");
now = in.getQuantity(); now = in.getQuantity();
renderOptions(buf, 1, MAX_QUANTITY, now, "", "tunnel"); renderOptions(buf, 1, MAX_QUANTITY, now, "", _("tunnel"));
if (now > MAX_QUANTITY) if (now > MAX_QUANTITY)
renderOptions(buf, now, now, now, "", "tunnel"); renderOptions(buf, now, now, now, "", _("tunnel"));
buf.append("</select></td>\n"); buf.append("</select></td>\n");
buf.append("<td align=\"center\"><select name=\"").append(index).append(".quantityOutbound\">\n"); buf.append("<td align=\"center\"><select name=\"").append(index).append(".quantityOutbound\">\n");
now = out.getQuantity(); now = out.getQuantity();
renderOptions(buf, 1, MAX_QUANTITY, now, "", "tunnel"); renderOptions(buf, 1, MAX_QUANTITY, now, "", _("tunnel"));
if (now > MAX_QUANTITY) if (now > MAX_QUANTITY)
renderOptions(buf, now, now, now, "", "tunnel"); renderOptions(buf, now, now, now, "", _("tunnel"));
buf.append("</select></td>\n"); buf.append("</select></td>\n");
buf.append("</tr>\n"); buf.append("</tr>\n");
// tunnel backup quantity // tunnel backup quantity
buf.append("<tr><td align=\"right\" class=\"mediumtags\">Backup quantity:</td>\n"); buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Backup quantity") + ":</td>\n");
buf.append("<td align=\"center\"><select name=\"").append(index).append(".backupInbound\">\n"); buf.append("<td align=\"center\"><select name=\"").append(index).append(".backupInbound\">\n");
now = in.getBackupQuantity(); now = in.getBackupQuantity();
renderOptions(buf, 0, MAX_BACKUP_QUANTITY, now, "", "tunnel"); renderOptions(buf, 0, MAX_BACKUP_QUANTITY, now, "", _("tunnel"));
if (now > MAX_BACKUP_QUANTITY) if (now > MAX_BACKUP_QUANTITY)
renderOptions(buf, now, now, now, "", "tunnel"); renderOptions(buf, now, now, now, "", _("tunnel"));
buf.append("</select></td>\n"); buf.append("</select></td>\n");
buf.append("<td align=\"center\"><select name=\"").append(index).append(".backupOutbound\">\n"); buf.append("<td align=\"center\"><select name=\"").append(index).append(".backupOutbound\">\n");
now = out.getBackupQuantity(); now = out.getBackupQuantity();
renderOptions(buf, 0, MAX_BACKUP_QUANTITY, now, "", "tunnel"); renderOptions(buf, 0, MAX_BACKUP_QUANTITY, now, "", _("tunnel"));
if (now > MAX_BACKUP_QUANTITY) if (now > MAX_BACKUP_QUANTITY)
renderOptions(buf, now, now, now, "", "tunnel"); renderOptions(buf, now, now, now, "", _("tunnel"));
buf.append("</select></td>\n"); buf.append("</select></td>\n");
buf.append("</tr>\n"); buf.append("</tr>\n");
@ -159,7 +159,7 @@ buf.append("<tr><th></th><th><img src=\"/themes/console/images/inbound.png\" alt
// And let's not display them at all unless they have contents, which should be rare. // And let's not display them at all unless they have contents, which should be rare.
Properties props = in.getUnknownOptions(); Properties props = in.getUnknownOptions();
if (props.size() > 0) { if (props.size() > 0) {
buf.append("<tr><td align=\"right\" class=\"mediumtags\">Inbound options:</td>\n" + buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Inbound options") + ":</td>\n" +
"<td colspan=\"2\" align=\"center\"><input name=\"").append(index); "<td colspan=\"2\" align=\"center\"><input name=\"").append(index);
buf.append(".inboundOptions\" type=\"text\" size=\"32\" disabled=\"true\" " + buf.append(".inboundOptions\" type=\"text\" size=\"32\" disabled=\"true\" " +
"value=\""); "value=\"");
@ -172,7 +172,7 @@ buf.append("<tr><th></th><th><img src=\"/themes/console/images/inbound.png\" alt
} }
props = out.getUnknownOptions(); props = out.getUnknownOptions();
if (props.size() > 0) { if (props.size() > 0) {
buf.append("<tr><td align=\"right\" class=\"mediumtags\">Outbound options:</td>\n" + buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Outbound options") + ":</td>\n" +
"<td colspan=\"2\" align=\"center\"><input name=\"").append(index); "<td colspan=\"2\" align=\"center\"><input name=\"").append(index);
buf.append(".outboundOptions\" type=\"text\" size=\"32\" disabled=\"true\" " + buf.append(".outboundOptions\" type=\"text\" size=\"32\" disabled=\"true\" " +
"value=\""); "value=\"");

View File

@ -51,25 +51,25 @@ public class ConfigUpdateHandler extends FormHandler {
@Override @Override
protected void processForm() { protected void processForm() {
if (_action != null && _action.startsWith("Check")) { if (_action != null && _action.equals(_("Check for updates"))) {
NewsFetcher fetcher = NewsFetcher.getInstance(I2PAppContext.getGlobalContext()); NewsFetcher fetcher = NewsFetcher.getInstance(I2PAppContext.getGlobalContext());
fetcher.fetchNews(); fetcher.fetchNews();
if (fetcher.shouldFetchUnsigned()) if (fetcher.shouldFetchUnsigned())
fetcher.fetchUnsignedHead(); fetcher.fetchUnsignedHead();
if (fetcher.updateAvailable() || fetcher.unsignedUpdateAvailable()) { if (fetcher.updateAvailable() || fetcher.unsignedUpdateAvailable()) {
if ( (_updatePolicy == null) || (!_updatePolicy.equals("notify")) ) if ( (_updatePolicy == null) || (!_updatePolicy.equals("notify")) )
addFormNotice("Update available, attempting to download now"); addFormNotice(_("Update available, attempting to download now"));
else else
addFormNotice("Update available, click button on left to download"); addFormNotice(_("Update available, click button on left to download"));
} else } else
addFormNotice("No update available"); addFormNotice(_("No update available"));
} }
if ( (_newsURL != null) && (_newsURL.length() > 0) ) { if ( (_newsURL != null) && (_newsURL.length() > 0) ) {
String oldURL = ConfigUpdateHelper.getNewsURL(_context); String oldURL = ConfigUpdateHelper.getNewsURL(_context);
if ( (oldURL == null) || (!_newsURL.equals(oldURL)) ) { if ( (oldURL == null) || (!_newsURL.equals(oldURL)) ) {
_context.router().setConfigSetting(PROP_NEWS_URL, _newsURL); _context.router().setConfigSetting(PROP_NEWS_URL, _newsURL);
addFormNotice("Updating news URL to " + _newsURL); addFormNotice(_("Updating news URL to") + " " + _newsURL);
} }
} }
@ -77,7 +77,7 @@ public class ConfigUpdateHandler extends FormHandler {
String oldHost = _context.router().getConfigSetting(PROP_PROXY_HOST); String oldHost = _context.router().getConfigSetting(PROP_PROXY_HOST);
if ( (oldHost == null) || (!_proxyHost.equals(oldHost)) ) { if ( (oldHost == null) || (!_proxyHost.equals(oldHost)) ) {
_context.router().setConfigSetting(PROP_PROXY_HOST, _proxyHost); _context.router().setConfigSetting(PROP_PROXY_HOST, _proxyHost);
addFormNotice("Updating proxy host to " + _proxyHost); addFormNotice(_("Updating proxy host to") + " " + _proxyHost);
} }
} }
@ -85,7 +85,7 @@ public class ConfigUpdateHandler extends FormHandler {
String oldPort = _context.router().getConfigSetting(PROP_PROXY_PORT); String oldPort = _context.router().getConfigSetting(PROP_PROXY_PORT);
if ( (oldPort == null) || (!_proxyPort.equals(oldPort)) ) { if ( (oldPort == null) || (!_proxyPort.equals(oldPort)) ) {
_context.router().setConfigSetting(PROP_PROXY_PORT, _proxyPort); _context.router().setConfigSetting(PROP_PROXY_PORT, _proxyPort);
addFormNotice("Updating proxy port to " + _proxyPort); addFormNotice(_("Updating proxy port to") + " " + _proxyPort);
} }
} }
@ -98,14 +98,14 @@ public class ConfigUpdateHandler extends FormHandler {
try { oldFreq = Long.parseLong(oldFreqStr); } catch (NumberFormatException nfe) {} try { oldFreq = Long.parseLong(oldFreqStr); } catch (NumberFormatException nfe) {}
if (_refreshFrequency != oldFreq) { if (_refreshFrequency != oldFreq) {
_context.router().setConfigSetting(PROP_REFRESH_FREQUENCY, ""+_refreshFrequency); _context.router().setConfigSetting(PROP_REFRESH_FREQUENCY, ""+_refreshFrequency);
addFormNotice("Updating refresh frequency to " + DataHelper.formatDuration(_refreshFrequency)); addFormNotice(_("Updating refresh frequency to") + " " + DataHelper.formatDuration(_refreshFrequency));
} }
if ( (_updatePolicy != null) && (_updatePolicy.length() > 0) ) { if ( (_updatePolicy != null) && (_updatePolicy.length() > 0) ) {
String oldPolicy = _context.router().getConfigSetting(PROP_UPDATE_POLICY); String oldPolicy = _context.router().getConfigSetting(PROP_UPDATE_POLICY);
if ( (oldPolicy == null) || (!_updatePolicy.equals(oldPolicy)) ) { if ( (oldPolicy == null) || (!_updatePolicy.equals(oldPolicy)) ) {
_context.router().setConfigSetting(PROP_UPDATE_POLICY, _updatePolicy); _context.router().setConfigSetting(PROP_UPDATE_POLICY, _updatePolicy);
addFormNotice("Updating update policy to " + _updatePolicy); addFormNotice(_("Updating update policy to") + " " + _updatePolicy);
} }
} }
@ -114,7 +114,7 @@ public class ConfigUpdateHandler extends FormHandler {
String oldURL = _context.router().getConfigSetting(PROP_UPDATE_URL); String oldURL = _context.router().getConfigSetting(PROP_UPDATE_URL);
if ( (oldURL == null) || (!_updateURL.equals(oldURL)) ) { if ( (oldURL == null) || (!_updateURL.equals(oldURL)) ) {
_context.router().setConfigSetting(PROP_UPDATE_URL, _updateURL); _context.router().setConfigSetting(PROP_UPDATE_URL, _updateURL);
addFormNotice("Updating update URLs."); addFormNotice(_("Updating update URLs."));
} }
} }
@ -122,7 +122,7 @@ public class ConfigUpdateHandler extends FormHandler {
String oldKeys = new TrustedUpdate(_context).getTrustedKeysString(); String oldKeys = new TrustedUpdate(_context).getTrustedKeysString();
if ( (oldKeys == null) || (!_trustedKeys.equals(oldKeys)) ) { if ( (oldKeys == null) || (!_trustedKeys.equals(oldKeys)) ) {
_context.router().setConfigSetting(PROP_TRUSTED_KEYS, _trustedKeys); _context.router().setConfigSetting(PROP_TRUSTED_KEYS, _trustedKeys);
addFormNotice("Updating trusted keys."); addFormNotice(_("Updating trusted keys."));
} }
} }
@ -130,7 +130,7 @@ public class ConfigUpdateHandler extends FormHandler {
String oldURL = _context.router().getConfigSetting(PROP_ZIP_URL); String oldURL = _context.router().getConfigSetting(PROP_ZIP_URL);
if ( (oldURL == null) || (!_zipURL.equals(oldURL)) ) { if ( (oldURL == null) || (!_zipURL.equals(oldURL)) ) {
_context.router().setConfigSetting(PROP_ZIP_URL, _zipURL); _context.router().setConfigSetting(PROP_ZIP_URL, _zipURL);
addFormNotice("Updating unsigned update URL to " + _zipURL); addFormNotice(_("Updating unsigned update URL to") + " " + _zipURL);
} }
} }

View File

@ -72,9 +72,9 @@ public class ConfigUpdateHelper extends HelperBase {
buf.append("\" selected=\"true\""); buf.append("\" selected=\"true\"");
if (PERIODS[i] == -1) if (PERIODS[i] == -1)
buf.append("\">Never</option>\n"); buf.append("\">" + _("Never") + "</option>\n");
else else
buf.append("\">Every ").append(DataHelper.formatDuration(PERIODS[i])).append("</option>\n"); buf.append("\">" + _("Every") + " ").append(DataHelper.formatDuration(PERIODS[i])).append("</option>\n");
} }
buf.append("</select>\n"); buf.append("</select>\n");
return buf.toString(); return buf.toString();
@ -89,18 +89,18 @@ public class ConfigUpdateHelper extends HelperBase {
if ("notify".equals(policy)) if ("notify".equals(policy))
buf.append("<option value=\"notify\" selected=\"true\">").append(_("Notify only")).append("</option>"); buf.append("<option value=\"notify\" selected=\"true\">").append(_("Notify only")).append("</option>");
else else
buf.append("<option value=\"notify\">Notify only</option>"); buf.append("<option value=\"notify\">" + _("Notify only") + "</option>");
if ("download".equals(policy)) if ("download".equals(policy))
buf.append("<option value=\"download\" selected=\"true\">Download and verify only</option>"); buf.append("<option value=\"download\" selected=\"true\">" + _("Download and verify only") + "</option>");
else else
buf.append("<option value=\"download\">Download and verify only</option>"); buf.append("<option value=\"download\">" + _("Download and verify only") + "</option>");
if (System.getProperty("wrapper.version") != null) { if (System.getProperty("wrapper.version") != null) {
if ("install".equals(policy)) if ("install".equals(policy))
buf.append("<option value=\"install\" selected=\"true\">Download, verify, and restart</option>"); buf.append("<option value=\"install\" selected=\"true\">" + _("Download, verify, and restart") + "</option>");
else else
buf.append("<option value=\"install\">Download, verify, and restart</option>"); buf.append("<option value=\"install\">" + _("Download, verify, and restart") + "</option>");
} }
buf.append("</select>\n"); buf.append("</select>\n");

View File

@ -10,7 +10,7 @@ public class LogsHelper extends HelperBase {
public String getLogs() { public String getLogs() {
String str = formatMessages(_context.logManager().getBuffer().getMostRecentMessages()); String str = formatMessages(_context.logManager().getBuffer().getMostRecentMessages());
return "Location: <code>" + _context.logManager().currentFile() + "</code><br><br>" + str; return "Location: <b><code>" + _context.logManager().currentFile() + "</code></b><br><br>" + str;
} }
public String getCriticalLogs() { public String getCriticalLogs() {
@ -34,7 +34,7 @@ public class LogsHelper extends HelperBase {
return ""; return "";
else { else {
str = str.replaceAll("<", "&lt;").replaceAll(">", "&gt;"); str = str.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
return "Location:<code> " + f.getAbsolutePath() + "</code> <pre>" + str + "</pre>"; return "Location:<b><code> " + f.getAbsolutePath() + "</code></b> <pre>" + str + "</pre>";
} }
} }

View File

@ -55,7 +55,7 @@ public class NetDbRenderer {
public void renderRouterInfoHTML(Writer out, String routerPrefix) throws IOException { public void renderRouterInfoHTML(Writer out, String routerPrefix) throws IOException {
StringBuilder buf = new StringBuilder(4*1024); StringBuilder buf = new StringBuilder(4*1024);
buf.append("<h2>Network Database RouterInfo Lookup</h2>\n"); buf.append("<h2>" + _("Network Database RouterInfo Lookup") + "</h2>\n");
if (".".equals(routerPrefix)) { if (".".equals(routerPrefix)) {
renderRouterInfo(buf, _context.router().getRouterInfo(), true, true); renderRouterInfo(buf, _context.router().getRouterInfo(), true, true);
} else { } else {
@ -70,7 +70,7 @@ public class NetDbRenderer {
} }
} }
if (notFound) if (notFound)
buf.append("Router ").append(routerPrefix).append(" not found in network database"); buf.append(_("Router") + " ").append(routerPrefix).append(" " + _("not found in network database") );
} }
out.write(buf.toString()); out.write(buf.toString());
out.flush(); out.flush();
@ -82,8 +82,8 @@ public class NetDbRenderer {
public void renderLeaseSetHTML(Writer out) throws IOException { public void renderLeaseSetHTML(Writer out) throws IOException {
StringBuilder buf = new StringBuilder(4*1024); StringBuilder buf = new StringBuilder(4*1024);
buf.append("<h2>Network Database Contents</h2>\n"); buf.append("<h2>" + _("Network Database Contents") + "</h2>\n");
buf.append("<a href=\"netdb.jsp\">View RouterInfo</a>"); buf.append("<a href=\"netdb.jsp\">" + _("View") + " RouterInfo</a>");
buf.append("<h3>LeaseSets</h3>\n"); buf.append("<h3>LeaseSets</h3>\n");
Set leases = new TreeSet(new LeaseSetComparator()); Set leases = new TreeSet(new LeaseSetComparator());
leases.addAll(_context.netDb().getLeases()); leases.addAll(_context.netDb().getLeases());
@ -94,17 +94,17 @@ public class NetDbRenderer {
Hash key = dest.calculateHash(); Hash key = dest.calculateHash();
buf.append("<b>LeaseSet: ").append(key.toBase64()); buf.append("<b>LeaseSet: ").append(key.toBase64());
if (_context.clientManager().isLocal(dest)) { if (_context.clientManager().isLocal(dest)) {
buf.append(" (<a href=\"tunnels.jsp#" + key.toBase64().substring(0,4) + "\">Local</a> "); buf.append(" (<a href=\"tunnels.jsp#" + key.toBase64().substring(0,4) + "\">" + _("Local") + "</a> ");
if (! _context.clientManager().shouldPublishLeaseSet(key)) if (! _context.clientManager().shouldPublishLeaseSet(key))
buf.append("Unpublished "); buf.append(_("Unpublished") + " ");
buf.append("Destination "); buf.append(_("Destination") + " ");
TunnelPoolSettings in = _context.tunnelManager().getInboundSettings(key); TunnelPoolSettings in = _context.tunnelManager().getInboundSettings(key);
if (in != null && in.getDestinationNickname() != null) if (in != null && in.getDestinationNickname() != null)
buf.append(in.getDestinationNickname()); buf.append(in.getDestinationNickname());
else else
buf.append(dest.toBase64().substring(0, 6)); buf.append(dest.toBase64().substring(0, 6));
} else { } else {
buf.append(" (Destination "); buf.append(" (" + _("Destination") + " ");
String host = _context.namingService().reverseLookup(dest); String host = _context.namingService().reverseLookup(dest);
if (host != null) if (host != null)
buf.append(host); buf.append(host);
@ -118,9 +118,9 @@ public class NetDbRenderer {
else else
buf.append("Expired ").append(DataHelper.formatDuration(0-exp)).append(" ago<br>\n"); buf.append("Expired ").append(DataHelper.formatDuration(0-exp)).append(" ago<br>\n");
for (int i = 0; i < ls.getLeaseCount(); i++) { for (int i = 0; i < ls.getLeaseCount(); i++) {
buf.append("Lease ").append(i + 1).append(": Gateway "); buf.append("Lease ").append(i + 1).append(": " + _("Gateway") + " ");
buf.append(_context.commSystem().renderPeerHTML(ls.getLease(i).getGateway())); buf.append(_context.commSystem().renderPeerHTML(ls.getLease(i).getGateway()));
buf.append(" Tunnel ").append(ls.getLease(i).getTunnelId().getTunnelId()).append("<br>\n"); buf.append(" " + _("Tunnel") + " ").append(ls.getLease(i).getTunnelId().getTunnelId()).append("<br>\n");
} }
buf.append("<hr>\n"); buf.append("<hr>\n");
out.write(buf.toString()); out.write(buf.toString());
@ -135,21 +135,21 @@ public class NetDbRenderer {
if (full) if (full)
size *= 4; size *= 4;
StringBuilder buf = new StringBuilder(size); StringBuilder buf = new StringBuilder(size);
out.write("<h2>Network Database Contents (<a href=\"netdb.jsp?l=1\">View LeaseSets</a>)</h2>\n"); out.write("<h2>" + _("Network Database Contents") + " (<a href=\"netdb.jsp?l=1\">" + _("View") + " LeaseSets</a>)</h2>\n");
if (!_context.netDb().isInitialized()) { if (!_context.netDb().isInitialized()) {
buf.append("Not initialized\n"); buf.append("" + _("Not initialized") + "\n");
out.write(buf.toString()); out.write(buf.toString());
out.flush(); out.flush();
return; return;
} }
Hash us = _context.routerHash(); Hash us = _context.routerHash();
out.write("<a name=\"routers\" ></a><h3>Routers (<a href=\"netdb.jsp"); out.write("<a name=\"routers\" ></a><h3>" + _("Routers") + " (<a href=\"netdb.jsp");
if (full) if (full)
out.write("#routers\" >view without"); out.write("#routers\" >" + _("view without") + "");
else else
out.write("?f=1#routers\" >view with"); out.write("?f=1#routers\" >" + _("view with") + "");
out.write(" stats</a>)</h3>\n"); out.write(" " + _("stats") + "</a>)</h3>\n");
RouterInfo ourInfo = _context.router().getRouterInfo(); RouterInfo ourInfo = _context.router().getRouterInfo();
renderRouterInfo(buf, ourInfo, true, true); renderRouterInfo(buf, ourInfo, true, true);
@ -183,7 +183,7 @@ public class NetDbRenderer {
if (versionList.size() > 0) { if (versionList.size() > 0) {
Collections.sort(versionList, Collections.reverseOrder()); Collections.sort(versionList, Collections.reverseOrder());
buf.append("<table>\n"); buf.append("<table>\n");
buf.append("<tr><th>Version</th><th>Count</th></tr>\n"); buf.append("<tr><th>" + _("Version") + "</th><th>" + _("Count") + "</th></tr>\n");
for (String routerVersion : versionList) { for (String routerVersion : versionList) {
int num = versions.count(routerVersion); int num = versions.count(routerVersion);
buf.append("<tr><td align=\"center\">").append(DataHelper.stripHTML(routerVersion)); buf.append("<tr><td align=\"center\">").append(DataHelper.stripHTML(routerVersion));
@ -199,7 +199,7 @@ public class NetDbRenderer {
if (countryList.size() > 0) { if (countryList.size() > 0) {
Collections.sort(countryList); Collections.sort(countryList);
buf.append("<table>\n"); buf.append("<table>\n");
buf.append("<tr><th align=\"left\">Country</th><th>Count</th></tr>\n"); buf.append("<tr><th align=\"left\">" + _("Country") + "</th><th>" + _("Count") + "</th></tr>\n");
for (String country : countryList) { for (String country : countryList) {
int num = countries.count(country); int num = countries.count(country);
buf.append("<tr><td><img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase()).append("\""); buf.append("<tr><td><img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase()).append("\"");
@ -222,9 +222,9 @@ public class NetDbRenderer {
String hash = info.getIdentity().getHash().toBase64(); String hash = info.getIdentity().getHash().toBase64();
buf.append("<table><tr><th><a name=\"").append(hash.substring(0, 6)).append("\" ></a>"); buf.append("<table><tr><th><a name=\"").append(hash.substring(0, 6)).append("\" ></a>");
if (isUs) { if (isUs) {
buf.append("<a name=\"our-info\" ></a><b>Our info: ").append(hash).append("</b></th></tr><tr><td>\n"); buf.append("<a name=\"our-info\" ></a><b>" + _("Our info") + ": ").append(hash).append("</b></th></tr><tr><td>\n");
} else { } else {
buf.append("<b>Peer info for:</b> ").append(hash).append("\n"); buf.append("<b>" + _("Peer info for") + ":</b> ").append(hash).append("\n");
if (full) { if (full) {
buf.append("[<a href=\"netdb.jsp\" >Back</a>]</th></tr><td>\n"); buf.append("[<a href=\"netdb.jsp\" >Back</a>]</th></tr><td>\n");
} else { } else {
@ -234,12 +234,12 @@ public class NetDbRenderer {
long age = _context.clock().now() - info.getPublished(); long age = _context.clock().now() - info.getPublished();
if (isUs && _context.router().isHidden()) if (isUs && _context.router().isHidden())
buf.append("<b>Hidden, Updated:</b> ").append(DataHelper.formatDuration(age)).append(" ago<br>\n"); buf.append("<b>" + _("Hidden") + ", " + _("Updated") + ":</b> ").append(DataHelper.formatDuration(age)).append(" " + _("ago") + "<br>\n");
else if (age > 0) else if (age > 0)
buf.append("<b>Published:</b> ").append(DataHelper.formatDuration(age)).append(" ago<br>\n"); buf.append("<b>" + _("Published") + ":</b> ").append(DataHelper.formatDuration(age)).append(" " + _("ago") + "<br>\n");
else else
buf.append("<b>Published:</b> in ").append(DataHelper.formatDuration(0-age)).append("???<br>\n"); buf.append("<b>" + _("Published") + ":</b> in ").append(DataHelper.formatDuration(0-age)).append("???<br>\n");
buf.append("<b>Address(es):</b> "); buf.append("<b>" + _("Address(es)") + ":</b> ");
String country = _context.commSystem().getCountry(info.getIdentity().getHash()); String country = _context.commSystem().getCountry(info.getIdentity().getHash());
if(country != null) { if(country != null) {
buf.append("<img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase()).append("\""); buf.append("<img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase()).append("\"");
@ -256,7 +256,7 @@ public class NetDbRenderer {
} }
buf.append("</td></tr>\n"); buf.append("</td></tr>\n");
if (full) { if (full) {
buf.append("<tr><td>Stats: <br><code>\n"); buf.append("<tr><td>" + _("Stats") + ": <br><code>\n");
for (Iterator iter = info.getOptions().keySet().iterator(); iter.hasNext(); ) { for (Iterator iter = info.getOptions().keySet().iterator(); iter.hasNext(); ) {
String key = (String)iter.next(); String key = (String)iter.next();
String val = info.getOption(key); String val = info.getOption(key);

View File

@ -77,7 +77,7 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
long now = _context.clock().now(); long now = _context.clock().now();
return return
(_lastUpdated > 0 ? "News last updated " + DataHelper.formatDuration(now - _lastUpdated) + " ago" : "") + (_lastUpdated > 0 ? "News last updated " + DataHelper.formatDuration(now - _lastUpdated) + " ago" : "") +
(_lastFetch > _lastUpdated ? ", last checked " + DataHelper.formatDuration(now - _lastFetch) + " ago" : ""); (_lastFetch > _lastUpdated ? "; last checked " + DataHelper.formatDuration(now - _lastFetch) + " ago." : "");
} }
public void run() { public void run() {

View File

@ -228,9 +228,9 @@ class ProfileOrganizerRenderer {
buf.append("</table>"); buf.append("</table>");
buf.append("<h3>Thresholds:</h3>"); buf.append("<h3>Thresholds:</h3>");
buf.append("<b>Speed:</b> ").append(num(_organizer.getSpeedThreshold())).append(" (").append(fast).append(" fast peers)<br>"); buf.append("<p><b>Speed:</b> ").append(num(_organizer.getSpeedThreshold())).append(" (").append(fast).append(" fast peers)<br>");
buf.append("<b>Capacity:</b> ").append(num(_organizer.getCapacityThreshold())).append(" (").append(reliable).append(" high capacity peers)<br>"); buf.append("<b>Capacity:</b> ").append(num(_organizer.getCapacityThreshold())).append(" (").append(reliable).append(" high capacity peers)<br>");
buf.append("<b>Integration:</b> ").append(num(_organizer.getIntegrationThreshold())).append(" (").append(integrated).append(" well integrated peers)"); buf.append("<b>Integration:</b> ").append(num(_organizer.getIntegrationThreshold())).append(" (").append(integrated).append(" well integrated peers)</p>");
buf.append("<h3>Definitions:</h3><ul>" + buf.append("<h3>Definitions:</h3><ul>" +
"<li><b>groups</b>: as determined by the profile organizer</li>" + "<li><b>groups</b>: as determined by the profile organizer</li>" +
"<li><b>caps</b>: capabilities in the netDb, not used to determine profiles</li>" + "<li><b>caps</b>: capabilities in the netDb, not used to determine profiles</li>" +

View File

@ -58,7 +58,7 @@ public class StatsGenerator {
buf.append("Statistics gathered during this router's uptime ("); buf.append("Statistics gathered during this router's uptime (");
long uptime = _context.router().getUptime(); long uptime = _context.router().getUptime();
buf.append(DataHelper.formatDuration(uptime)); buf.append(DataHelper.formatDuration(uptime));
buf.append("). The data gathered is quantized over a 1 minute period, so should just be used as an estimate<p />"); buf.append("). The data gathered is quantized over a 1 minute period, so should just be used as an estimate.");
out.write(buf.toString()); out.write(buf.toString());
buf.setLength(0); buf.setLength(0);
@ -138,7 +138,7 @@ public class StatsGenerator {
buf.append("</i><br>"); buf.append("</i><br>");
} }
if (rate.getLifetimeEventCount() <= 0) { if (rate.getLifetimeEventCount() <= 0) {
buf.append("No lifetime events<br>&nbsp;<br>"); buf.append("No lifetime events<br>");
return; return;
} }
long now = _context.clock().now(); long now = _context.clock().now();

View File

@ -357,7 +357,7 @@ public class SummaryHelper extends HelperBase {
Collections.sort(clients, new AlphaComparator()); Collections.sort(clients, new AlphaComparator());
StringBuilder buf = new StringBuilder(512); StringBuilder buf = new StringBuilder(512);
buf.append("<h3><a href=\"i2ptunnel/index.jsp\" target=\"_blank\" title=\"Add/remove/edit &amp; control your client and server tunnels (local destinations).\" title=\"View existing tunnels and tunnel build status.\">Local destinations</a></h3><hr><table>"); buf.append("<h3><a href=\"i2ptunnel/index.jsp\" target=\"_blank\" title=\"Add/remove/edit &amp; control your client and server tunnels\">Local Destinations</a></h3><hr><div class=\"tunnels\"><table>");
for (Iterator iter = clients.iterator(); iter.hasNext(); ) { for (Iterator iter = clients.iterator(); iter.hasNext(); ) {
Destination client = (Destination)iter.next(); Destination client = (Destination)iter.next();
@ -389,10 +389,10 @@ public class SummaryHelper extends HelperBase {
} }
} else { } else {
// yellow light // yellow light
buf.append("<td><img src=\"/themes/console/images/local_inprogress.png\" alt=\"Building&hellip;\" title=\"Tunnel building in progress&hellip;\"></td></tr>\n"); buf.append("<td><img src=\"/themes/console/images/local_inprogress.png\" alt=\"Building&hellip;\" title=\"Building tunnels&hellip;\"></td></tr>\n");
} }
} }
buf.append("</table><hr>\n"); buf.append("</table></div><hr>\n");
return buf.toString(); return buf.toString();
} }

View File

@ -37,7 +37,7 @@ public class TunnelRenderer {
} }
public void renderStatusHTML(Writer out) throws IOException { public void renderStatusHTML(Writer out) throws IOException {
out.write("<div class=\"wideload\"><h2><a name=\"exploratory\" ></a>Exploratory tunnels (<a href=\"/configtunnels.jsp#exploratory\">config</a>):</h2>\n"); out.write("<div class=\"wideload\"><h2><a name=\"exploratory\" ></a>" + _("Exploratory tunnels") + " (<a href=\"/configtunnels.jsp#exploratory\">" + _("config") + "</a>):</h2>\n");
renderPool(out, _context.tunnelManager().getInboundExploratoryPool(), _context.tunnelManager().getOutboundExploratoryPool()); renderPool(out, _context.tunnelManager().getInboundExploratoryPool(), _context.tunnelManager().getOutboundExploratoryPool());
List<Hash> destinations = null; List<Hash> destinations = null;
@ -56,9 +56,9 @@ public class TunnelRenderer {
if (name == null) if (name == null)
name = client.toBase64().substring(0,4); name = client.toBase64().substring(0,4);
out.write("<h2><a name=\"" + client.toBase64().substring(0,4) out.write("<h2><a name=\"" + client.toBase64().substring(0,4)
+ "\" ></a>Client tunnels for " + name); + "\" ></a>" + _("Client tunnels for") + " " + name);
if (_context.clientManager().isLocal(client)) if (_context.clientManager().isLocal(client))
out.write(" (<a href=\"/configtunnels.jsp#" + client.toBase64().substring(0,4) +"\">config</a>):</h2>\n"); out.write(" (<a href=\"/configtunnels.jsp#" + client.toBase64().substring(0,4) +"\">" + _("config") + "</a>):</h2>\n");
else else
out.write(" (dead):</h2>\n"); out.write(" (dead):</h2>\n");
renderPool(out, in, outPool); renderPool(out, in, outPool);
@ -66,10 +66,10 @@ public class TunnelRenderer {
List participating = _context.tunnelDispatcher().listParticipatingTunnels(); List participating = _context.tunnelDispatcher().listParticipatingTunnels();
Collections.sort(participating, new TunnelComparator()); Collections.sort(participating, new TunnelComparator());
out.write("<h2><a name=\"participating\"></a>Participating tunnels:</h2><table>\n"); out.write("<h2><a name=\"participating\"></a>" + _("Participating tunnels") + ":</h2><table>\n");
out.write("<tr><th>Receive on</th><th>From</th><th>" out.write("<tr><th>" + _("Receive on") + "</th><th>" + _("From") + "</th><th>"
+ "Send on</th><th>To</th><th>Expiration</th>" + "" + _("Send on") + "</th><th>" + _("To") + "</th><th>" + _("Expiration") + "</th>"
+ "<th>Usage</th><th>Rate</th><th>Role</th></tr>\n"); + "<th>" + _("Usage") + "</th><th>" + _("Rate") + "</th><th>" + _("Role") + "</th></tr>\n");
long processed = 0; long processed = 0;
RateStat rs = _context.statManager().getRate("tunnel.participatingMessageCount"); RateStat rs = _context.statManager().getRate("tunnel.participatingMessageCount");
if (rs != null) if (rs != null)
@ -113,17 +113,17 @@ public class TunnelRenderer {
int bps = 1024 * (int) cfg.getProcessedMessagesCount() / lifetime; int bps = 1024 * (int) cfg.getProcessedMessagesCount() / lifetime;
out.write(" <td class=\"cells\" align=\"center\">" + bps + "Bps</td>"); out.write(" <td class=\"cells\" align=\"center\">" + bps + "Bps</td>");
if (cfg.getSendTo() == null) if (cfg.getSendTo() == null)
out.write(" <td class=\"cells\" align=\"center\">Outbound Endpoint</td>"); out.write(" <td class=\"cells\" align=\"center\">" + _("Outbound Endpoint") + "</td>");
else if (cfg.getReceiveFrom() == null) else if (cfg.getReceiveFrom() == null)
out.write(" <td class=\"cells\" align=\"center\">Inbound Gateway</td>"); out.write(" <td class=\"cells\" align=\"center\">" + _("Inbound Gateway") + "</td>");
else else
out.write(" <td class=\"cells\" align=\"center\">Participant</td>"); out.write(" <td class=\"cells\" align=\"center\">" + _("Participant") + "</td>");
out.write("</tr>\n"); out.write("</tr>\n");
processed += cfg.getProcessedMessagesCount(); processed += cfg.getProcessedMessagesCount();
} }
out.write("</table>\n"); out.write("</table>\n");
out.write("<div class=\"statusnotes\"><b>Inactive participating tunnels: " + inactive + "</b></div>\n"); out.write("<div class=\"statusnotes\"><b>" + _("Inactive participating tunnels") + ": " + inactive + "</b></div>\n");
out.write("<div class=\"statusnotes\"><b>Lifetime bandwidth usage: " + DataHelper.formatSize(processed*1024) + "B</b></div>\n"); out.write("<div class=\"statusnotes\"><b>" + _("Lifetime bandwidth usage") + ": " + DataHelper.formatSize(processed*1024) + "B</b></div>\n");
renderPeers(out); renderPeers(out);
} }
@ -152,16 +152,16 @@ public class TunnelRenderer {
if (info.getLength() > maxLength) if (info.getLength() > maxLength)
maxLength = info.getLength(); maxLength = info.getLength();
} }
out.write("<table><tr><th>In/Out</th><th>Expiry</th><th>Usage</th><th>Gateway</th>"); out.write("<table><tr><th>" + _("In/Out") + "</th><th>" + _("Expiry") + "</th><th>" + _("Usage") + "</th><th>" + _("Gateway") + "</th>");
if (maxLength > 3) { if (maxLength > 3) {
out.write("<th align=\"center\" colspan=\"" + (maxLength - 2)); out.write("<th align=\"center\" colspan=\"" + (maxLength - 2));
out.write("\">Participants</th>"); out.write("\">" + _("Participants") + "</th>");
} }
else if (maxLength == 3) { else if (maxLength == 3) {
out.write("<th>Participant</th>"); out.write("<th>" + _("Participant") + "</th>");
} }
if (maxLength > 1) { if (maxLength > 1) {
out.write("<th>Endpoint</th>"); out.write("<th>" + _("Endpoint") + "</th>");
} }
out.write("</tr>\n"); out.write("</tr>\n");
for (int i = 0; i < tunnels.size(); i++) { for (int i = 0; i < tunnels.size(); i++) {
@ -201,17 +201,17 @@ public class TunnelRenderer {
if (in != null) { if (in != null) {
List pending = in.listPending(); List pending = in.listPending();
if (pending.size() > 0) if (pending.size() > 0)
out.write("<div class=\"statusnotes\"><center><b>Build in progress: " + pending.size() + " inbound</b></center></div>\n"); out.write("<div class=\"statusnotes\"><center><b>" + _("Build in progress") + ": " + pending.size() + " " + _("inbound") + "</b></center></div>\n");
live += pending.size(); live += pending.size();
} }
if (outPool != null) { if (outPool != null) {
List pending = outPool.listPending(); List pending = outPool.listPending();
if (pending.size() > 0) if (pending.size() > 0)
out.write("<div class=\"statusnotes\"><center><b>Build in progress: " + pending.size() + " outbound</b></center></div>\n"); out.write("<div class=\"statusnotes\"><center><b>" + _("Build in progress") + ": " + pending.size() + " " + _("outbound") + "</b></center></div>\n");
live += pending.size(); live += pending.size();
} }
if (live <= 0) if (live <= 0)
out.write("<div class=\"statusnotes\"><center><b>No tunnels; waiting for the grace period to end.</center></b></div>\n"); out.write("<div class=\"statusnotes\"><center><b>" + _("No tunnels; waiting for the grace period to end.") + "</center></b></div>\n");
out.write("<div class=\"statusnotes\"><center><b>Lifetime bandwidth usage: " + DataHelper.formatSize(processedIn*1024) + "B in, " + out.write("<div class=\"statusnotes\"><center><b>Lifetime bandwidth usage: " + DataHelper.formatSize(processedIn*1024) + "B in, " +
DataHelper.formatSize(processedOut*1024) + "B out</b></center></div>"); DataHelper.formatSize(processedOut*1024) + "B out</b></center></div>");
} }
@ -230,7 +230,7 @@ public class TunnelRenderer {
List<Hash> peerList = new ArrayList(peers); List<Hash> peerList = new ArrayList(peers);
Collections.sort(peerList, new HashComparator()); Collections.sort(peerList, new HashComparator());
out.write("<h2><a name=\"peers\"></a>Tunnel Counts By Peer:</h2>\n"); out.write("<h2><a name=\"peers\"></a>" + _("Tunnel Counts By Peer") + ":</h2>\n");
out.write("<table><tr><th>Peer</th><th>Expl. + Client</th><th>% of total</th><th>Part. from + to</th><th>% of total</th></tr>\n"); out.write("<table><tr><th>Peer</th><th>Expl. + Client</th><th>% of total</th><th>Part. from + to</th><th>% of total</th></tr>\n");
for (Hash h : peerList) { for (Hash h : peerList) {
out.write("<tr> <td class=\"cells\" align=\"center\">"); out.write("<tr> <td class=\"cells\" align=\"center\">");
@ -249,7 +249,7 @@ public class TunnelRenderer {
out.write('0'); out.write('0');
out.write('\n'); out.write('\n');
} }
out.write("<tr class=\"tablefooter\"> <td align=\"center\"><b>Tunnels</b> <td align=\"center\"><b>" + tunnelCount); out.write("<tr class=\"tablefooter\"> <td align=\"center\"><b>" + _("Tunnels") + "</b> <td align=\"center\"><b>" + tunnelCount);
out.write("</b> <td>&nbsp;</td> <td align=\"center\"><b>" + partCount); out.write("</b> <td>&nbsp;</td> <td align=\"center\"><b>" + partCount);
out.write("</b> <td>&nbsp;</td></tr></table></div>\n"); out.write("</b> <td>&nbsp;</td></tr></table></div>\n");
} }

View File

@ -1,16 +1,17 @@
<%@page contentType="text/html" %> <%@page contentType="text/html" %>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head>
<title>I2P Router Console - config networking</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("config networking")%>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<jsp:useBean class="net.i2p.router.web.ConfigNetHelper" id="nethelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigNetHelper" id="nethelper" scope="request" />
<jsp:setProperty name="nethelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="nethelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<h1>I2P Network Configuration</h1> <h1><%=intl._("I2P Network Configuration")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
@ -25,10 +26,11 @@
System.setProperty("net.i2p.router.web.ConfigNetHandler.nonce", new java.util.Random().nextLong()+""); %> System.setProperty("net.i2p.router.web.ConfigNetHandler.nonce", new java.util.Random().nextLong()+""); %>
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigNetHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigNetHandler.nonce")%>" />
<input type="hidden" name="action" value="blah" /> <input type="hidden" name="action" value="blah" />
<h3>Bandwidth limiter</h3><p> <h3><%=intl._("Bandwidth limiter")%></h3><p>
<b>I2P will work best if you configure your rates to match the speed of your internet connection.</b> <b><%=intl._("I2P will work best if you configure your rates to match the speed of your internet connection.")%></b>
</p> </p>
<div class="wideload"><table><tr><td><input style="text-align: right; width: 5em;" name="inboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="inboundRate" />" /> KBps In <div class="wideload"><p><table><tr><td><input style="text-align: right; width: 5em;" name="inboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="inboundRate" />" />
<%=intl._("KBps In")%>
</td><td>(<jsp:getProperty name="nethelper" property="inboundRateBits" />)</td> </td><td>(<jsp:getProperty name="nethelper" property="inboundRateBits" />)</td>
<!-- let's keep this simple... <!-- let's keep this simple...
bursting up to bursting up to
@ -36,7 +38,8 @@
<jsp:getProperty name="nethelper" property="inboundBurstFactorBox" /><br> <jsp:getProperty name="nethelper" property="inboundBurstFactorBox" /><br>
--> -->
</tr><tr> </tr><tr>
<td><input style="text-align: right; width: 5em;" name="outboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="outboundRate" />" /> KBps Out <td><input style="text-align: right; width: 5em;" name="outboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="outboundRate" />" />
<%=intl._("KBps Out")%>
</td><td>(<jsp:getProperty name="nethelper" property="outboundRateBits" />)</td> </td><td>(<jsp:getProperty name="nethelper" property="outboundRateBits" />)</td>
<!-- let's keep this simple... <!-- let's keep this simple...
bursting up to bursting up to
@ -46,22 +49,22 @@
A negative rate sets the default.</i><br> A negative rate sets the default.</i><br>
--> -->
</tr><tr> </tr><tr>
<td><jsp:getProperty name="nethelper" property="sharePercentageBox" /> Share</td> <td><jsp:getProperty name="nethelper" property="sharePercentageBox" /> <%=intl._("Share")%></td>
<td>(<jsp:getProperty name="nethelper" property="shareRateBits" />) <td>(<jsp:getProperty name="nethelper" property="shareRateBits" />)
</td></tr></table></div></p> </td></tr></table></p></div></p>
<% int share = nethelper.getShareBandwidth(); <% int share = nethelper.getShareBandwidth();
if (share < 12) { if (share < 12) {
out.print("<b>NOTE</b>: You have configured I2P to share only " + share + "KBps. "); out.print("<p><b>"+intl._("NOTE")+"</b>: You have configured I2P to share only " + share + "KBps. ");
out.print("I2P requires at least 12KBps to enable sharing. "); out.print(intl._("I2P requires at least 12KBps to enable sharing. "));
out.print("Please enable sharing (participating in tunnels) by configuring more bandwidth. "); out.print(intl._("Please enable sharing (participating in tunnels) by configuring more bandwidth. "));
out.print("It improves your anonymity by creating cover traffic, and helps the network.<br>"); out.print(intl._("It improves your anonymity by creating cover traffic, and helps the network.")+"</p>");
} else { } else {
out.print("You have configured I2P to share<b> " + share + "KBps</b>. "); out.print("<p>" + intl._("You have configured I2P to share") + "<b> " + share + "KBps</b>. ");
out.print("The higher the share bandwidth the more you improve your anonymity and help the network.<hr>"); out.print(intl._("The higher the share bandwidth the more you improve your anonymity and help the network.")+"</p><hr>");
} }
%> %>
<div class="formaction"> <div class="formaction">
<input type="submit" name="save" value="Save changes" /> <input type="reset" value="Cancel" /></div> <input type="submit" name="save" value="<%=intl._("Save changes")%>" /> <input type="reset" value="<%=intl._("Cancel")%>" /></div>
<!-- <!--
<b>Enable load testing: </b> <b>Enable load testing: </b>
<input type="checkbox" class="optbox" name="enableloadtesting" value="true" <jsp:getProperty name="nethelper" property="enableLoadTesting" /> /> <input type="checkbox" class="optbox" name="enableloadtesting" value="true" <jsp:getProperty name="nethelper" property="enableLoadTesting" /> />
@ -72,27 +75,27 @@
<a href="oldstats.jsp#test.rtt">test.rtt</a> and related stats.</p> <a href="oldstats.jsp#test.rtt">test.rtt</a> and related stats.</p>
<br> <br>
--> -->
<h3>IP and Transport Configuration</h3><p> <h3><%=intl._("IP and Transport Configuration")%></h3><p>
<b>The default settings will work for most people. There is <a href="#chelp">help below</a>.</b> <b><%=intl._("The default settings will work for most people.")%> There is <a href="#chelp">help below</a>.</b>
</p><p><b>UPnP Configuration:</b><br> </p><p><b><%=intl._("UPnP Configuration")%>:</b><br>
<input type="checkbox" class="optbox" name="upnp" value="true" <jsp:getProperty name="nethelper" property="upnpChecked" /> /> <input type="checkbox" class="optbox" name="upnp" value="true" <jsp:getProperty name="nethelper" property="upnpChecked" /> />
Enable UPnP to open firewall ports - <a href="peers.jsp#upnp">UPnP status</a> <%=intl._("Enable UPnP to open firewall ports")%> - <a href="peers.jsp#upnp"><%=intl._("UPnP status")%></a>
</p><p><b>IP Configuration:</b><br> </p><p><b><%=intl._("IP Configuration")%>:</b><br>
Externally reachable hostname or IP address:<br> <%=intl._("Externally reachable hostname or IP address")%>:<br>
<input type="radio" class="optbox" name="udpAutoIP" value="local,upnp,ssu" <%=nethelper.getUdpAutoIPChecked(3) %> /> <input type="radio" class="optbox" name="udpAutoIP" value="local,upnp,ssu" <%=nethelper.getUdpAutoIPChecked(3) %> />
Use all auto-detect methods<br> <%=intl._("Use all auto-detect methods")%><br>
<input type="radio" class="optbox" name="udpAutoIP" value="local,ssu" <%=nethelper.getUdpAutoIPChecked(4) %> /> <input type="radio" class="optbox" name="udpAutoIP" value="local,ssu" <%=nethelper.getUdpAutoIPChecked(4) %> />
Disable UPnP IP address detection<br> <%=intl._("Disable UPnP IP address detection")%><br>
<input type="radio" class="optbox" name="udpAutoIP" value="upnp,ssu" <%=nethelper.getUdpAutoIPChecked(5) %> /> <input type="radio" class="optbox" name="udpAutoIP" value="upnp,ssu" <%=nethelper.getUdpAutoIPChecked(5) %> />
Ignore local interface IP address<br> <%=intl._("Ignore local interface IP address")%><br>
<input type="radio" class="optbox" name="udpAutoIP" value="ssu" <%=nethelper.getUdpAutoIPChecked(0) %> /> <input type="radio" class="optbox" name="udpAutoIP" value="ssu" <%=nethelper.getUdpAutoIPChecked(0) %> />
Use SSU IP address detection only<br> <%=intl._("Use SSU IP address detection only")%><br>
<input type="radio" class="optbox" name="udpAutoIP" value="fixed" <%=nethelper.getUdpAutoIPChecked(1) %> /> <input type="radio" class="optbox" name="udpAutoIP" value="fixed" <%=nethelper.getUdpAutoIPChecked(1) %> />
Specify hostname or IP: <%=intl._("Specify hostname or IP")%>:
<input name ="udpHost1" type="text" size="16" value="<jsp:getProperty name="nethelper" property="udphostname" />" /> <input name ="udpHost1" type="text" size="16" value="<jsp:getProperty name="nethelper" property="udphostname" />" />
<% String[] ips = nethelper.getAddresses(); <% String[] ips = nethelper.getAddresses();
if (ips.length > 0) { if (ips.length > 0) {
out.print(" or <select name=\"udpHost2\"><option value=\"\" selected=\"true\">Select Interface</option>\n"); out.print(" " + intl._("or") + " <select name=\"udpHost2\"><option value=\"\" selected=\"true\">"+intl._("Select Interface")+"</option>\n");
for (int i = 0; i < ips.length; i++) { for (int i = 0; i < ips.length; i++) {
out.print("<option value=\""); out.print("<option value=\"");
out.print(ips[i]); out.print(ips[i]);
@ -105,9 +108,9 @@
%> %>
<br> <br>
<input type="radio" class="optbox" name="udpAutoIP" value="hidden" <%=nethelper.getUdpAutoIPChecked(2) %> /> <input type="radio" class="optbox" name="udpAutoIP" value="hidden" <%=nethelper.getUdpAutoIPChecked(2) %> />
Hidden mode - do not publish IP <i>(prevents participating traffic)</i><br> <%=intl._("Hidden mode - do not publish IP")%> <i><%=intl._("(prevents participating traffic)")%></i><br>
</p><p><b>UDP Configuration:</b><br> </p><p><b><%=intl._("UDP Configuration:")%></b><br>
UDP port: <%=intl._("UDP port:")%>
<input name ="udpPort" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="configuredUdpPort" />" /><br> <input name ="udpPort" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="configuredUdpPort" />" /><br>
<!-- let's keep this simple... <!-- let's keep this simple...
<input type="checkbox" class="optbox" name="requireIntroductions" value="true" <jsp:getProperty name="nethelper" property="requireIntroductionsChecked" /> /> <input type="checkbox" class="optbox" name="requireIntroductions" value="true" <jsp:getProperty name="nethelper" property="requireIntroductionsChecked" /> />
@ -117,123 +120,118 @@
Current External UDP address: <i><jsp:getProperty name="nethelper" property="udpAddress" /></i><br> Current External UDP address: <i><jsp:getProperty name="nethelper" property="udpAddress" /></i><br>
--> -->
</p><p> </p><p>
<b>TCP Configuration:</b><br> <b><%=intl._("TCP Configuration")%>:</b><br>
Externally reachable hostname or IP address:<br> <%=intl._("Externally reachable hostname or IP address")%>:<br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="true" <%=nethelper.getTcpAutoIPChecked(2) %> /> <input type="radio" class="optbox" name="ntcpAutoIP" value="true" <%=nethelper.getTcpAutoIPChecked(2) %> />
Use auto-detected IP address <%=intl._("Use auto-detected IP address")%>
<i>(currently <jsp:getProperty name="nethelper" property="udpIP" />)</i> <i>(<%=intl._("currently")%> <jsp:getProperty name="nethelper" property="udpIP" />)</i>
if we are not firewalled<br> <%=intl._("if we are not firewalled")%><br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="always" <%=nethelper.getTcpAutoIPChecked(3) %> /> <input type="radio" class="optbox" name="ntcpAutoIP" value="always" <%=nethelper.getTcpAutoIPChecked(3) %> />
Always use auto-detected IP address (Not firewalled)<br> <%=intl._("Always use auto-detected IP address (Not firewalled)")%><br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(1) %> /> <input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(1) %> />
Specify hostname or IP: <%=intl._("Specify hostname or IP")%>:
<input name ="ntcphost" type="text" size="16" value="<jsp:getProperty name="nethelper" property="ntcphostname" />" /><br> <input name ="ntcphost" type="text" size="16" value="<jsp:getProperty name="nethelper" property="ntcphostname" />" /><br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(0) %> /> <input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(0) %> />
Disable inbound (Firewalled)<br> <%=intl._("Disable inbound (Firewalled)")%><br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="disabled" <%=nethelper.getTcpAutoIPChecked(4) %> /> <input type="radio" class="optbox" name="ntcpAutoIP" value="disabled" <%=nethelper.getTcpAutoIPChecked(4) %> />
Completely disable <i>(select only if behind a firewall that throttles or blocks outbound TCP)</i><br> <%=intl._("Completely disable")%> <i><%=intl._("(select only if behind a firewall that throttles or blocks outbound TCP)")%></i><br>
</p><p> </p><p>
Externally reachable TCP port:<br> <%=intl._("Externally reachable TCP port")%>:<br>
<input type="radio" class="optbox" name="ntcpAutoPort" value="2" <%=nethelper.getTcpAutoPortChecked(2) %> /> <input type="radio" class="optbox" name="ntcpAutoPort" value="2" <%=nethelper.getTcpAutoPortChecked(2) %> />
Use the same port configured for UDP <%=intl._("Use the same port configured for UDP")%>
<i>(currently <jsp:getProperty name="nethelper" property="udpPort" />)</i><br> <i>(<%=intl._("currently")%> <jsp:getProperty name="nethelper" property="udpPort" />)</i><br>
<input type="radio" class="optbox" name="ntcpAutoPort" value="1" <%=nethelper.getTcpAutoPortChecked(1) %> /> <input type="radio" class="optbox" name="ntcpAutoPort" value="1" <%=nethelper.getTcpAutoPortChecked(1) %> />
Specify Port: <%=intl._("Specify Port")%>:
<input name ="ntcpport" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="ntcpport" />" /><br> <input name ="ntcpport" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="ntcpport" />" /><br>
</p><p><b>Note: Changing these settings will restart your router.</b></p> </p><p><b><%=intl._("Note")%>: <%=intl._("Changing these settings will restart your router.")%></b></p>
<hr><div class="formaction"> <hr><div class="formaction">
<input type="submit" name="save" value="Save changes" /> <input type="reset" value="Cancel" /> <input type="submit" name="save" value="<%=intl._("Save changes")%>" /> <input type="reset" value="<%=intl._("Cancel")%>" />
</div><h3><a name="chelp">Configuration Help:</a></h3><div align="justify"><p> </div><h3><a name="chelp"><%=intl._("Configuration Help")%>:</a></h3><div align="justify"><p>
While I2P will work fine behind most firewalls, your speeds and network integration will generally improve <%=intl._("While I2P will work fine behind most firewalls, your speeds and network integration will generally improve if the I2P port (generally 8887) is forwarded for both UDP and TCP.")%>
if the I2P port (generally 8887) is forwarded for both UDP and TCP.
</p><p> </p><p>
If you can, please poke a hole in your firewall to allow unsolicited UDP and TCP packets to reach <%=intl._("If you can, please poke a hole in your firewall to allow unsolicited UDP and TCP packets to reach you.")%>
you. If you can't, I2P supports UPnP (Universal Plug and Play) and UDP hole punching <%=intl._("If you can't, I2P supports UPnP (Universal Plug and Play) and UDP hole punching with \"SSU introductions\" to relay traffic.")%>
with "SSU introductions" to relay traffic. Most of the options above are for special situations, <%=intl._("Most of the options above are for special situations, for example where UPnP does not work correctly, or a firewall not under your control is doing harm.")%>
for example where UPnP does not work correctly, or a firewall not under your control is doing <%=intl._("Certain firewalls such as symmetric NATs may not work well with I2P.")%>
harm. Certain firewalls such as symmetric NATs may not work well with I2P.
</p> </p>
<!-- let's keep this simple... <!-- let's keep this simple...
<input type="submit" name="recheckReachability" value="Check network reachability..." /> <input type="submit" name="recheckReachability" value="Check network reachability..." />
</p> </p>
--> -->
<p> <p>
UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address <%=intl._("UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address and forward ports.")%>
and forward ports. <%=intl._("UPnP support is beta, and may not work for any number of reasons")%>:
UPnP support is beta, and may not work for any number of reasons:
<ul> <ul>
<li class="tidylist">No UPnP-compatible device present <li class="tidylist"><%=intl._("No UPnP-compatible device present")%>
<li class="tidylist">UPnP disabled on the device <li class="tidylist"><%=intl._("UPnP disabled on the device")%>
<li class="tidylist">Software firewall interference with UPnP <li class="tidylist"><%=intl._("Software firewall interference with UPnP")%>
<li class="tidylist">Bugs in the device's UPnP implementation <li class="tidylist"><%=intl._("Bugs in the device's UPnP implementation")%>
<li class="tidylist">Multiple firewall/routers in the internet connection path <li class="tidylist"><%=intl._("Multiple firewall/routers in the internet connection path")%>
<li class="tidylist">UPnP device change, reset, or address change <li class="tidylist"><%=intl._("UPnP device change, reset, or address change")%>
</ul><br> </ul></p><p>
Reviewing the <a href="peers.jsp#upnp">UPnP status</a> may help. Reviewing the <a href="peers.jsp#upnp">UPnP status</a> may help.
UPnP may be enabled or disabled above, but a change requires a router restart to take effect. <%=intl._("UPnP may be enabled or disabled above, but a change requires a router restart to take effect.")%></p>
<p>Hostnames entered above will be published in the network database. <p><%=intl._("Hostnames entered above will be published in the network database.")%>
They are <b>not private</b>. They are <b>not private</b>.
Also, <b>do not enter a private IP address</b> like 127.0.0.1 or 192.168.1.1. Also, <b>do not enter a private IP address</b> like 127.0.0.1 or 192.168.1.1.
If you specify the wrong IP address or <%=intl._("If you specify the wrong IP address or hostname, or do not properly configure your NAT or firewall, your network performance will degrade substantially.")%>
hostname, or do not properly configure your NAT or firewall, your network performance will degrade <%=intl._("When in doubt, leave the settings at the defaults.")%>
substantially. When in doubt, leave the settings at the defaults.
</p> </p>
<h3><a name="help">Reachability Help:</a></h3><p> <h3><a name="help"><%=intl._("Reachability Help")%>:</a></h3><p>
While I2P will work fine behind most firewalls, your speeds and network integration will generally improve <%=intl._("While I2P will work fine behind most firewalls, your speeds and network integration will generally improve if the I2P port (generally 8887) is forwarded for both UDP and TCP.")%>
if the I2P port (generally 8887) to both UDP and TCP. <%=intl._("If you think you have opened up your firewall and I2P still thinks you are firewalled, remember that you may have multiple firewalls, for example both software packages and external hardware routers.")%>
If you think you have opened up your firewall and I2P still thinks you are firewalled, remember
that you may have multiple firewalls, for example both software packages and external hardware routers.
If there is an error, the <a href="logs.jsp">logs</a> may also help diagnose the problem. If there is an error, the <a href="logs.jsp">logs</a> may also help diagnose the problem.
<ul> <ul>
<li class="tidylist"><b>OK</b> - Your UDP port does not appear to be firewalled. <li class="tidylist"><b><%=intl._("OK")%></b> -
<li class="tidylist"><b>Firewalled</b> - Your UDP port appears to be firewalled. <%=intl._("Your UDP port does not appear to be firewalled.")%>
As the firewall detection methods are not 100% reliable, this may occasionally be displayed in error. <li class="tidylist"><b><%=intl._("Firewalled")%></b> -
However, if it appears consistently, you should check whether both your external and internal <%=intl._("Your UDP port appears to be firewalled.")%>
firewalls are open on port 8887. I2P will work fine when firewalled, there is no reason for concern. <%=intl._("As the firewall detection methods are not 100% reliable, this may occasionally be displayed in error.")%>
When firewalled, the router uses "introducers" to relay inbound connections. <%=intl._("However, if it appears consistently, you should check whether both your external and internal firewalls are open on port 8887.")%>
However, you will get more participating traffic and help the network more if you can open your <%=intl._("I2P will work fine when firewalled, there is no reason for concern. When firewalled, the router uses \"introducers\" to relay inbound connections.")%>
firewall(s). If you think you have already done so, remember that you may have both a hardware <%=intl._("However, you will get more participating traffic and help the network more if you can open your firewall(s).")%>
and a software firewall, or be behind an additional, institutional firewall you cannot control. <%=intl._("If you think you have already done so, remember that you may have both a hardware and a software firewall, or be behind an additional, institutional firewall you cannot control.")%>
Also, some routers cannot correctly forward both TCP and UDP on a single port, or may have other <%=intl._("Also, some routers cannot correctly forward both TCP and UDP on a single port, or may have other limitations or bugs that prevent them from passing traffic through to I2P.")%>
limitations or bugs that prevent them from passing traffic through to I2P. <li class="tidylist"><b><%=intl._("Testing")%></b> -
<li class="tidylist"><b>Testing</b> - The router is currently testing whether your UDP port is firewalled. <%=intl._("The router is currently testing whether your UDP port is firewalled.")%>
<li class="tidylist"><b>Hidden</b> - The router is not configured to publish its address, <li class="tidylist"><b><%=intl._("Hidden")%></b> -
therefore it does not expect incoming connections. <%=intl._("The router is not configured to publish its address, therefore it does not expect incoming connections.")%>
<li class="tidylist"><b>WARN - Firewalled and Fast</b> - You have configured I2P to share more than 128KBps of bandwidth, <li class="tidylist"><b><%=intl._("WARN - Firewalled and Fast")%></b> -
but you are firewalled. While I2P will work fine in this configuration, if you really have <%=intl._("You have configured I2P to share more than 128KBps of bandwidth, but you are firewalled.")%>
over 128KBps of bandwidth to share, it will be much more helpful to the network if <%=intl._("While I2P will work fine in this configuration, if you really have over 128KBps of bandwidth to share, it will be much more helpful to the network if you open your firewall.")%>
you open your firewall. <li class="tidylist"><b><%=intl._("WARN - Firewalled and Floodfill")%></b> -
<li class="tidylist"><b>WARN - Firewalled and Floodfill</b> - You have configured I2P to be a floodfill router, but <%=intl._("You have configured I2P to be a floodfill router, but you are firewalled.")%>
you are firewalled. For best participation as a floodfill router, you should open your firewall. <%=intl._("For best participation as a floodfill router, you should open your firewall.")%>
<li class="tidylist"><b>WARN - Firewalled with Inbound TCP Enabled</b> - You have configured inbound TCP, however <li class="tidylist"><b><%=intl._("WARN - Firewalled with Inbound TCP Enabled")%></b> -
your UDP port is firewalled, and therefore it is likely that your TCP port is firewalled as well. <%=intl._("You have configured inbound TCP, however your UDP port is firewalled, and therefore it is likely that your TCP port is firewalled as well.")%>
If your TCP port is firewalled with inbound TCP enabled, routers will not be able to contact <%=intl._("If your TCP port is firewalled with inbound TCP enabled, routers will not be able to contact you via TCP, which will hurt the network.")%>
you via TCP, which will hurt the network. Please open your firewall or disable inbound TCP above. <%=intl._("Please open your firewall or disable inbound TCP above.")%>
<li class="tidylist"><b>WARN - Firewalled with UDP Disabled</b> - <li class="tidylist"><b><%=intl._("WARN - Firewalled with UDP Disabled")%></b> -
You have configured inbound TCP, however <%=intl._("You have configured inbound TCP, however you have disabled UDP.")%>
you have disabled UDP. You appear to be firewalled on TCP, therefore your router cannot <%=intl._("You appear to be firewalled on TCP, therefore your router cannot accept inbound connections.")%>
accept inbound connections. <%=intl._("Please open your firewall or enable UDP.")%>
Please open your firewall or enable UDP. <li class="tidylist"><b><%=intl._("ERR - Clock Skew")%></b> -
<li class="tidylist"><b>ERR - Clock Skew</b> - Your system's clock is skewed, which will make it difficult <%=intl._("Your system's clock is skewed, which will make it difficult to participate in the network.")%>
to participate in the network. Correct your clock setting if this error persists. <%=intl._("Correct your clock setting if this error persists.")%>
<li class="tidylist"><b>ERR - Private TCP Address</b> - You must never advertise an unroutable IP address such as <li class="tidylist"><b><%=intl._("ERR - Private TCP Address")%></b> -
127.0.0.1 or 192.168.1.1 as your external address. Correct the address or disable inbound TCP above. <%=intl._("You must never advertise an unroutable IP address such as 127.0.0.1 or 192.168.1.1 as your external address.")%>
<li class="tidylist"><b>ERR - SymmetricNAT</b> - I2P detected that you are firewalled by a Symmetric NAT. <%=intl._("Correct the address or disable inbound TCP above.")%>
I2P does not work well behind this type of firewall. You will probably not be able to <li class="tidylist"><b><%=intl._("ERR - SymmetricNAT")%></b> -
accept inbound connections, which will limit your participation in the network. <%=intl._("I2P detected that you are firewalled by a Symmetric NAT.")%>
<li class="tidylist"><b>ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart</b> - <%=intl._("I2P does not work well behind this type of firewall. You will probably not be able to accept inbound connections, which will limit your participation in the network.")%>
I2P was unable to bind to port 8887 or other configured port. <li class="tidylist"><b><%=intl._("ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart")%></b> -
Check to see if another program is using port 8887. If so, stop that program or configure <%=intl._("I2P was unable to bind to port 8887 or other configured port.")%>
I2P to use a different port. This may be a transient error, if the other program is no longer <%=intl._("Check to see if another program is using port 8887. If so, stop that program or configure I2P to use a different port.")%>
using the port. However, a restart is always required after this error. <%=intl._("This may be a transient error, if the other program is no longer using the port.")%>
<li class="tidylist"><b>ERR - UDP Disabled and Inbound TCP host/port not set</b> - <%=intl._("However, a restart is always required after this error.")%>
You have not configured inbound TCP with a hostname and port above, however <li class="tidylist"><b><%=intl._("ERR - UDP Disabled and Inbound TCP host/port not set")%></b> -
you have disabled UDP. Therefore your router cannot accept inbound connections. <%=intl._("You have not configured inbound TCP with a hostname and port above, however you have disabled UDP.")%>
Please configure a TCP host and port above or enable UDP. <%=intl._("Therefore your router cannot accept inbound connections.")%>
<li class="tidylist"><b>ERR - Client Manager I2CP Error - check logs</b> - <%=intl._("Please configure a TCP host and port above or enable UDP.")%>
This is usually due to a port 7654 conflict. Check the logs to verify. Do you have another I2P instance running? <li class="tidylist"><b><%=intl._("ERR - Client Manager I2CP Error - check logs")%></b> -
Stop the conflicting program and restart I2P. <%=intl._("This is usually due to a port 7654 conflict. Check the logs to verify.")%>
</ul><hr> <%=intl._("Do you have another I2P instance running? Stop the conflicting program and restart I2P.")%>
</ul></p><hr>
<!-- <!--
<b>Dynamic Router Keys: </b> <b>Dynamic Router Keys: </b>
<input type="checkbox" class="optbox" name="dynamicKeys" value="true" <jsp:getProperty name="nethelper" property="dynamicKeysChecked" /> /><br> <input type="checkbox" class="optbox" name="dynamicKeys" value="true" <jsp:getProperty name="nethelper" property="dynamicKeysChecked" /> /><br>

View File

@ -2,8 +2,9 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>I2P Router Console - config advanced</title> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("config advanced")%>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
@ -11,7 +12,7 @@
<jsp:useBean class="net.i2p.router.web.ConfigAdvancedHelper" id="advancedhelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigAdvancedHelper" id="advancedhelper" scope="request" />
<jsp:setProperty name="advancedhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="advancedhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<h1>I2P Advanced Configuration</h1> <h1><%=intl._("I2P Advanced Configuration")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
@ -28,10 +29,10 @@
System.setProperty("net.i2p.router.web.ConfigAdvancedHandler.nonce", new java.util.Random().nextLong()+""); %> System.setProperty("net.i2p.router.web.ConfigAdvancedHandler.nonce", new java.util.Random().nextLong()+""); %>
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigAdvancedHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigAdvancedHandler.nonce")%>" />
<input type="hidden" name="action" value="blah" /> <input type="hidden" name="action" value="blah" />
<h3>Advanced I2P Configuration</h3> <h3><%=intl._("Advanced I2P Configuration")%></h3>
<textarea rows="32" cols="60" name="config" wrap="off"><jsp:getProperty name="advancedhelper" property="settings" /></textarea><br><hr> <textarea rows="32" cols="60" name="config" wrap="off"><jsp:getProperty name="advancedhelper" property="settings" /></textarea><br><hr>
<div class="formaction"> <div class="formaction">
<input type="submit" name="shouldsave" value="Apply" /> <input type="submit" name="shouldsave" value="<%=intl._("Apply")%>" />
<input type="reset" value="Cancel" /><br> <input type="reset" value="<%=intl._("Cancel")%>" /><br>
<b>NOTE:</b> Some changes may require a restart to take effect. <b><%=intl._("NOTE")%>:</b> <%=intl._("Some changes may require a restart to take effect.")%>
</div></form></div></div></div></body></html> </div></form></div></div></div></body></html>

View File

@ -2,8 +2,9 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>I2P Router Console - config clients</title> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("config clients")%>
<style type='text/css'> <style type='text/css'>
button span.hide{ button span.hide{
display:none; display:none;
@ -14,7 +15,7 @@ button span.hide{
<jsp:useBean class="net.i2p.router.web.ConfigClientsHelper" id="clientshelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigClientsHelper" id="clientshelper" scope="request" />
<jsp:setProperty name="clientshelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="clientshelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<h1>I2P Client Configuration</h1> <h1><%=intl._("I2P Client Configuration")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
@ -29,29 +30,23 @@ button span.hide{
if (prev != null) System.setProperty("net.i2p.router.web.ConfigClientsHandler.noncePrev", prev); if (prev != null) System.setProperty("net.i2p.router.web.ConfigClientsHandler.noncePrev", prev);
System.setProperty("net.i2p.router.web.ConfigClientsHandler.nonce", new java.util.Random().nextLong()+""); %> System.setProperty("net.i2p.router.web.ConfigClientsHandler.nonce", new java.util.Random().nextLong()+""); %>
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigClientsHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigClientsHandler.nonce")%>" />
<h3>Client Configuration</h3><p> <h3><%=intl._("Client Configuration")%></h3><p>
The Java clients listed below are started by the router and run in the same JVM. <%=intl._("The Java clients listed below are started by the router and run in the same JVM.")%>
</p><div class="wideload"> </p><div class="wideload">
<p><jsp:getProperty name="clientshelper" property="form1" /> <p><jsp:getProperty name="clientshelper" property="form1" />
</p><p><i>To change other client options, edit the file </p><p><i><%=intl._("To change other client options, edit the file")%>
<%=net.i2p.router.startup.ClientAppConfig.configFile(net.i2p.I2PAppContext.getGlobalContext()).getAbsolutePath()%>. <%=net.i2p.router.startup.ClientAppConfig.configFile(net.i2p.I2PAppContext.getGlobalContext()).getAbsolutePath()%>.
All changes require restart to take effect.</i> <%=intl._("All changes require restart to take effect.")%></i>
</p><hr><div class="formaction"> </p><hr><div class="formaction">
<input type="submit" name="action" value="Save Client Configuration" /> <input type="submit" name="action" value="<%=intl._("Save Client Configuration")%>" />
</div></div><h3>WebApp Configuration</h3><p> </div></div><h3><%=intl._("WebApp Configuration")%></h3><p>
The Java web applications listed below are started by the webConsole client and run in the same JVM as the router. <%=intl._("The Java web applications listed below are started by the webConsole client and run in the same JVM as the router. They are usually web applications accessible through the router console. They may be complete applications (e.g. i2psnark),front-ends to another client or application which must be separately enabled (e.g. susidns, i2ptunnel), or have no web interface at all (e.g. addressbook).")%>
They are usually web applications accessible through the router console.
They may be complete applications (e.g. i2psnark),
front-ends to another client or application which must be separately enabled (e.g. susidns, i2ptunnel),
or have no web interface at all (e.g. addressbook).
</p><p> </p><p>
A web app may also be disabled by removing the .war file from the webapps directory; <%=intl._("A web app may also be disabled by removing the .war file from the webapps directory; however the .war file and web app will reappear when you update your router to a newer version, so disabling the web app here is the preferred method.")%>
however the .war file and web app will reappear when you update your router to a newer version,
so disabling the web app here is the preferred method.
</p><div class="wideload"><p> </p><div class="wideload"><p>
<jsp:getProperty name="clientshelper" property="form2" /> <jsp:getProperty name="clientshelper" property="form2" />
</p><p> </p><p>
<i>All changes require restart to take effect.</i> <i><%=intl._("All changes require restart to take effect.")%></i>
</p><hr><div class="formaction"> </p><hr><div class="formaction">
<input type="submit" name="action" value="Save WebApp Configuration" /> <input type="submit" name="action" value="<%=intl._("Save WebApp Configuration")%>" />
</div></div></form></div></div></body></html> </div></div></form></div></div></body></html>

View File

@ -2,12 +2,13 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>I2P Router Console - config keyring</title> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("config keyring")%>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1>I2P Keyring Configuration</h1> <h1><%=intl._("I2P Keyring Configuration")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
@ -17,32 +18,30 @@
<jsp:getProperty name="formhandler" property="allMessages" /> <jsp:getProperty name="formhandler" property="allMessages" />
<jsp:useBean class="net.i2p.router.web.ConfigKeyringHelper" id="keyringhelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigKeyringHelper" id="keyringhelper" scope="request" />
<jsp:setProperty name="keyringhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="keyringhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<div class="configure"><p><h3>Keyring</h3> <div class="configure"><h2><%=intl._("Keyring")%></h2><p>
The router keyring is used to decrypt encrypted leaseSets. <%=intl._("The router keyring is used to decrypt encrypted leaseSets.")%>
The keyring may contain keys for local or remote encrypted destinations. <%=intl._("The keyring may contain keys for local or remote encrypted destinations.")%></p>
<div class="wideload"><p> <div class="wideload"><p>
<jsp:getProperty name="keyringhelper" property="summary" /> <jsp:getProperty name="keyringhelper" property="summary" />
</p></div> </p></div>
<br>
<form action="configkeyring.jsp" method="POST"> <form action="configkeyring.jsp" method="POST">
<% String prev = System.getProperty("net.i2p.router.web.ConfigKeyringHandler.nonce"); <% String prev = System.getProperty("net.i2p.router.web.ConfigKeyringHandler.nonce");
if (prev != null) System.setProperty("net.i2p.router.web.ConfigKeyringHandler.noncePrev", prev); if (prev != null) System.setProperty("net.i2p.router.web.ConfigKeyringHandler.noncePrev", prev);
System.setProperty("net.i2p.router.web.ConfigKeyringHandler.nonce", new java.util.Random().nextLong()+""); %> System.setProperty("net.i2p.router.web.ConfigKeyringHandler.nonce", new java.util.Random().nextLong()+""); %>
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigKeyringHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigKeyringHandler.nonce")%>" />
<h3>Manual Keyring Addition</h3> <h3><%=intl._("Manual Keyring Addition")%></h3><p>
Enter keys for encrypted remote destinations here. <%=intl._("Enter keys for encrypted remote destinations here.")%>
Keys for local destinations must be entered on the <a href="i2ptunnel/index.jsp">I2PTunnel page</a>. Keys for local destinations must be entered on the <a href="i2ptunnel/index.jsp">I2PTunnel page</a>.
<p> </p>
<div class="wideload"> <div class="wideload">
<table><tr> <p><table><tr>
<td class="mediumtags" align="right">Dest. name, hash, or full key:</td> <td class="mediumtags" align="right"><%=intl._("Dest. name, hash, or full key")%>:</td>
<td><textarea name="peer" cols="44" rows="1" style="height: 3em;" wrap="off"></textarea></td> <td><textarea name="peer" cols="44" rows="1" style="height: 3em;" wrap="off"></textarea></td>
</tr><tr> </tr><tr>
<td class="mediumtags" align="right">Encryption Key:</td> <td class="mediumtags" align="right"><%=intl._("Encryption Key")%>:</td>
<td><input type="text" size="55" name="key" /></td> <td><input type="text" size="55" name="key" /></td>
</tr><tr> </tr><tr>
<td align="right" colspan="2"><input type="submit" name="action" value="Add key" /> <td align="right" colspan="2"><input type="submit" name="action" value="<%=intl._("Add key")%>" />
<input type="submit" name="action" value="Delete key" /> <input type="reset" value="Cancel" /></td> <input type="submit" name="action" value="<%=intl._("Delete key")%>" /> <input type="reset" value="<%=intl._("Cancel")%>" /></td>
</tr></table></div></form></div></div></body></html> </tr></table></p></div></form></div></div></body></html>

View File

@ -3,14 +3,14 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head>
<title>I2P Router Console - config logging</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("config logging")%>
</head><body> </head><body>
<jsp:useBean class="net.i2p.router.web.ConfigLoggingHelper" id="logginghelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigLoggingHelper" id="logginghelper" scope="request" />
<jsp:setProperty name="logginghelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="logginghelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1>I2P Logging Configuration</h1> <h1><%=intl._("I2P Logging Configuration")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
@ -25,29 +25,29 @@
System.setProperty("net.i2p.router.web.ConfigLoggingHandler.nonce", new java.util.Random().nextLong()+""); %> System.setProperty("net.i2p.router.web.ConfigLoggingHandler.nonce", new java.util.Random().nextLong()+""); %>
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigLoggingHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigLoggingHandler.nonce")%>" />
<input type="hidden" name="action" value="blah" /> <input type="hidden" name="action" value="blah" />
<h3>Configure I2P Logging Options</h3> <h3><%=intl._("Configure I2P Logging Options")%></h3>
<div class="wideload"> <div class="wideload">
<table border="0" cellspacing="5"> <table border="0" cellspacing="5">
<tr><td class="mediumtags" align="right"><b>Logging filename:</b></td> <tr><td class="mediumtags" align="right"><b><%=intl._("Logging filename")%>:</b></td>
<td><input type="text" name="logfilename" size="40" value="<jsp:getProperty name="logginghelper" property="logFilePattern" />" /> <td><input type="text" name="logfilename" size="40" value="<jsp:getProperty name="logginghelper" property="logFilePattern" />" />
<br><i>(the symbol '@' will be replaced during log rotation)</i></td> <br> <i><%=intl._("(the symbol '@' will be replaced during log rotation)")%></i></td>
</tr><tr><td class="mediumtags" align="right"><b>Log record format:</b></td> </tr><tr><td class="mediumtags" align="right"><b><%=intl._("Log record format")%>:</b></td>
<td><input type="text" name="logformat" size="20" value="<jsp:getProperty name="logginghelper" property="recordPattern" />" /> <td><input type="text" name="logformat" size="20" value="<jsp:getProperty name="logginghelper" property="recordPattern" />" />
<br> <i>(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, <br> <i><%=intl._("(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 'm' = message)")%>
'm' = message)</i></td> </i></td>
</tr><tr><td class="mediumtags" align="right"><b>Log date format:</b></td> </tr><tr><td class="mediumtags" align="right"><b><%=intl._("Log date format")%>:</b></td>
<td><input type="text" name="logdateformat" size="20" value="<jsp:getProperty name="logginghelper" property="datePattern" />" /> <td><input type="text" name="logdateformat" size="20" value="<jsp:getProperty name="logginghelper" property="datePattern" />" />
<br> <i>('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' <br> <i><%=intl._("('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' = second, 'SSS' = millisecond)")%>
= second, 'SSS' = millisecond)</i></td> </i></td>
</tr><tr><td class="mediumtags" align="right"><b>Max log file size:</b></td> </tr><tr><td class="mediumtags" align="right"><b><%=intl._("Max log file size")%>:</b></td>
<td><input type="text" name="logfilesize" size="4" value="<jsp:getProperty name="logginghelper" property="maxFileSize" />" /><br></td> <td><input type="text" name="logfilesize" size="4" value="<jsp:getProperty name="logginghelper" property="maxFileSize" />" /><br></td>
</tr><tr><td class="mediumtags" align="right"><b>Default log level:</b></td> </tr><tr><td class="mediumtags" align="right"><b><%=intl._("Default log level")%>:</b></td>
<td><jsp:getProperty name="logginghelper" property="defaultLogLevelBox" /><br><i>(DEBUG and INFO are not recommended defaults, <td><jsp:getProperty name="logginghelper" property="defaultLogLevelBox" /><br><i><%=intl._("(DEBUG and INFO are not recommended defaults, as they will drastically slow down your router)")%>
as they will drastically slow down your router)</i></td> </i></td>
</tr><tr><td class="mediumtags" align="right"><b>Log level overrides:</b></td> </tr><tr><td class="mediumtags" align="right"><b><%=intl._("Log level overrides")%>:</b></td>
<td><jsp:getProperty name="logginghelper" property="logLevelTable" /></td> <td><jsp:getProperty name="logginghelper" property="logLevelTable" /></td>
</tr><tr><td colspan="2"><hr></td> </tr><tr><td colspan="2"><hr></td>
</tr><tr class="tablefooter"><td colspan="2"> <div class="formaction"> </tr><tr class="tablefooter"><td colspan="2"> <div class="formaction">
<input type="submit" name="shouldsave" value="Save changes" /> <input type="submit" name="shouldsave" value="<%=intl._("Save changes")%>" />
<input type="reset" value="Cancel" /> <input type="reset" value="<%=intl._("Cancel")%>" />
</div></td></tr></table></div></form></div></div></body></html> </div></td></tr></table></div></form></div></div></body></html>

View File

@ -2,12 +2,13 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>I2P Router Console - config peers</title> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("config peers")%>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1>I2P Peer Configuration</h1> <h1><%=intl._("I2P Peer Configuration")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
@ -31,50 +32,41 @@
if (prev != null) System.setProperty("net.i2p.router.web.ConfigPeerHandler.noncePrev", prev); if (prev != null) System.setProperty("net.i2p.router.web.ConfigPeerHandler.noncePrev", prev);
System.setProperty("net.i2p.router.web.ConfigPeerHandler.nonce", new java.util.Random().nextLong()+""); %> System.setProperty("net.i2p.router.web.ConfigPeerHandler.nonce", new java.util.Random().nextLong()+""); %>
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigPeerHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigPeerHandler.nonce")%>" />
<p>
<a name="sh"> </a> <a name="sh"> </a>
<a name="unsh"> </a> <a name="unsh"> </a>
<a name="bonus"> </a> <a name="bonus"> </a>
<h2>Manual Peer Controls</h2> <h2><%=intl._("Manual Peer Controls")%></h2>
<div class="mediumtags">Router Hash: <div class="mediumtags"><p><%=intl._("Router Hash")%>:
<input type="text" size="55" name="peer" value="<%=peer%>" /></div> <input type="text" size="55" name="peer" value="<%=peer%>" /></p></div>
<h3>Manually Ban / Unban a Peer</h3> <h3><%=intl._("Manually Ban / Unban a Peer")%></h3>
Banning will prevent the participation of this peer in tunnels you create. <p><%=intl._("Banning will prevent the participation of this peer in tunnels you create.")%></p>
<hr>
<div class="formaction"> <div class="formaction">
<input type="submit" name="action" value="Ban peer until restart" /> <input type="submit" name="action" value="<%=intl._("Ban peer until restart")%>" />
<input type="submit" name="action" value="Unban peer" /> <input type="submit" name="action" value="<%=intl._("Unban peer")%>" />
<% if (! "".equals(peer)) { %> <% if (! "".equals(peer)) { %>
<!-- <font color="blue">&lt;---- click to verify action</font> --> <!-- <font color="blue">&lt;---- click to verify action</font> -->
<% } %> <% } %>
</div> </div>
<h3>Adjust Profile Bonuses</h3> <h3><%=intl._("Adjust Profile Bonuses")%></h3>
Bonuses may be positive or negative, and affect the peer's inclusion in Fast <p><%=intl._("Bonuses may be positive or negative, and affect the peer's inclusion in Fast and High Capacity tiers. Fast peers are used for client tunnels, and High Capacity peers are used for some exploratory tunnels. Current bonuses are displayed on the")%> <a href="profiles.jsp"><%=intl._("profiles page")%></a>.</p>
and High Capacity tiers. Fast peers are used for client tunnels, and High
Capacity peers are used for some exploratory tunnels. Current bonuses are
displayed on the <a href="profiles.jsp">profiles page</a>.
<p>
<% long speed = 0; long capacity = 0; <% long speed = 0; long capacity = 0;
if (! "".equals(peer)) { if (! "".equals(peer)) {
// get existing bonus values? // get existing bonus values?
} }
%> %>
<hr> <div class="mediumtags"><p><%=intl._("Speed")%>:
<div class="mediumtags">Speed:
<input type="text" size="8" name="speed" value="<%=speed%>" /> <input type="text" size="8" name="speed" value="<%=speed%>" />
Capacity: <%=intl._("Capacity")%>:
<input type="text" size="8" name="capacity" value="<%=capacity%>" /> <input type="text" size="8" name="capacity" value="<%=capacity%>" />
<input type="submit" name="action" value="Adjust peer bonuses" /></div> <input type="submit" name="action" value="<%=intl._("Adjust peer bonuses")%>" /></p></div>
</p>
</form> </form>
<a name="shitlist"> </a> <a name="shitlist"> </a>
<jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" />
<jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:setProperty name="profilesHelper" property="writer" value="<%=out%>" /> <jsp:setProperty name="profilesHelper" property="writer" value="<%=out%>" />
<jsp:getProperty name="profilesHelper" property="shitlistSummary" /> <jsp:getProperty name="profilesHelper" property="shitlistSummary" />
<hr>
<div class="wideload"> <div class="wideload">
<jsp:getProperty name="peerhelper" property="blocklistSummary" /> <jsp:getProperty name="peerhelper" property="blocklistSummary" />
</div></div></div></body></html> </div><hr></div></div></body></html>

View File

@ -2,12 +2,13 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>I2P Router Console - config service</title> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("config service")%>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1>I2P Service Configuration</h1> <h1><%=intl._("I2P Service Configuration")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
@ -21,64 +22,58 @@
if (prev != null) System.setProperty("net.i2p.router.web.ConfigServiceHandler.noncePrev", prev); if (prev != null) System.setProperty("net.i2p.router.web.ConfigServiceHandler.noncePrev", prev);
System.setProperty("net.i2p.router.web.ConfigServiceHandler.nonce", new java.util.Random().nextLong()+""); %> System.setProperty("net.i2p.router.web.ConfigServiceHandler.nonce", new java.util.Random().nextLong()+""); %>
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigServiceHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigServiceHandler.nonce")%>" />
<h3>Shutdown the router</h3> <h3><%=intl._("Shutdown the router")%></h3>
<p>Graceful shutdown lets the router satisfy the agreements it has already made <p><%=intl._("Graceful shutdown lets the router satisfy the agreements it has already made before shutting down, but may take a few minutes.")%>
before shutting down, but may take a few minutes. If you need to kill the <%=intl._("If you need to kill the router immediately, that option is available as well.")%></p>
router immediately, that option is available as well.</p>
<hr><div class="formaction"> <hr><div class="formaction">
<input type="submit" name="action" value="Shutdown gracefully" /> <input type="submit" name="action" value="<%=intl._("Shutdown gracefully")%>" />
<input type="submit" name="action" value="Shutdown immediately" /> <input type="submit" name="action" value="<%=intl._("Shutdown immediately")%>" />
<input type="submit" name="action" value="Cancel graceful shutdown" /> <input type="submit" name="action" value="<%=intl._("Cancel graceful shutdown")%>" />
</div> </div>
<% if (System.getProperty("wrapper.version") != null) { %> <% if (System.getProperty("wrapper.version") != null) { %>
<p>If you want the router to restart itself after shutting down, you can choose one of <p><%=intl._("If you want the router to restart itself after shutting down, you can choose one of the following.")%>
the following. This is useful in some situations - for example, if you changed <%=intl._("This is useful in some situations")%> -
some settings that client applications only read at startup, such as the routerconsole password <%=intl._("for example, if you changed some settings that client applications only read at startup, such as the routerconsole password or the interface it listens on.")%>
or the interface it listens on. A graceful restart will take a few minutes (but your peers <%=intl._("A graceful restart will take a few minutes (but your peers will appreciate your patience), while a hard restart does so immediately.")%>
will appreciate your patience), while a hard restart does so immediately. After tearing down <%=intl._("After tearing down the router, it will wait 1 minute before starting back up again.")%></p>
the router, it will wait 1 minute before starting back up again.</p>
<hr><div class="formaction"> <hr><div class="formaction">
<input type="submit" name="action" value="Graceful restart" /> <input type="submit" name="action" value="<%=intl._("Graceful restart")%>" />
<input type="submit" name="action" value="Hard restart" /> <input type="submit" name="action" value="<%=intl._("Hard restart")%>" />
<% } %></div> <% } %></div>
<% if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %> <% if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %>
<h3>Systray integration</h3> <h3><%=intl._("Systray integration")%></h3>
<p>On the windows platform, there is a small application to sit in the system <p><%=intl._("On the windows platform, there is a small application to sit in the system tray, allowing you to view the router's status")%>
tray, allowing you to view the router's status (later on, I2P client applications <%=intl._("(later on, I2P client applications will be able to integrate their own functionality into the system tray as well).")%>
will be able to integrate their own functionality into the system tray as well). <%=intl._("If you are on windows, you can either enable or disable that icon here.")%></p>
If you are on windows, you can either enable or disable that icon here.</p>
<hr><div class="formaction"> <hr><div class="formaction">
<input type="submit" name="action" value="Show systray icon" /> <input type="submit" name="action" value="<%=intl._("Show systray icon")%>" />
<input type="submit" name="action" value="Hide systray icon" /> <input type="submit" name="action" value="<%=intl._("Hide systray icon")%>" />
</div><h3>Run on startup</h3> </div><h3><%=intl._("Run on startup")%></h3>
<p>You can control whether I2P is run on startup or not by selecting one of the <p><%=intl._("You can control whether I2P is run on startup or not by selecting one of the following options")%> -
following options - I2P will install (or remove) a service accordingly. You can <%=intl._("I2P will install (or remove) a service accordingly.")%>
also run the <code>install_i2p_service_winnt.bat</code> (or <%=intl._("If you prefer the command line, you can also run the ")%> <code>install_i2p_service_winnt.bat</code> (<%=intl._("or")%>
<code>uninstall_i2p_service_winnt.bat</code>) from the command line, if you prefer.</p> <code>uninstall_i2p_service_winnt.bat</code>).</p>
<hr><div class="formaction"> <hr><div class="formaction">
<input type="submit" name="action" value="Run I2P on startup" /> <input type="submit" name="action" value="<%=intl._("Run I2P on startup")%>" />
<input type="submit" name="action" value="Don't run I2P on startup" /></div> <input type="submit" name="action" value="<%=intl._("Don't run I2P on startup")%>" /></div>
<p><b>Note:</b> If you are running I2P as service right now, removing it will shut <p><b><%=intl._("Note")%>:</b> <%=intl._("If you are running I2P as service right now, removing it will shut down your router immediately.")%>
down your router immediately. You may want to consider shutting down gracefully, as <%=intl._("You may want to consider shutting down gracefully, as above, then running uninstall_i2p_service_winnt.bat.")%></p>
above, then running uninstall_i2p_service_winnt.bat.</p>
<% } %> <% } %>
<% if (System.getProperty("wrapper.version") != null) { %> <% if (System.getProperty("wrapper.version") != null) { %>
<h3>Debugging</h3> <h3><%=intl._("Debugging")%></h3>
<p>At times, it may be helpful to debug I2P by getting a thread dump. To do so, <p> At times, it may be helpful to debug I2P by getting a thread dump.
please select the following option and review the thread dumped to To do so, please select the following option and review the thread dumped to
<a href="logs.jsp#servicelogs">wrapper.log</a>.</p> <a href="logs.jsp#servicelogs">wrapper.log</a>.</p>
<hr><div class="formaction"> <hr><div class="formaction">
<input type="submit" name="action" value="Dump threads" /> <input type="submit" name="action" value="Dump threads" />
<% } %></div> <% } %></div>
<h3>Launch browser on router startup?</h3> <h3><%=intl._("Launch browser on router startup?")%></h3>
<p>I2P's main configuration interface is this web console, so for your convenience <p><%=intl._("I2P's main configuration interface is this web console, so for your convenience I2P can launch a web browser on startup pointing at")%>
I2P can launch a web browser pointing at <a href="http://127.0.0.1:7657/index.jsp">http://127.0.0.1:7657/index.jsp</a> .</p>
<a href="http://127.0.0.1:7657/index.jsp">http://127.0.0.1:7657/index.jsp</a> whenever
the router starts up.</p>
<hr><div class="formaction"> <hr><div class="formaction">
<input type="submit" name="action" value="View console on startup" /> <input type="submit" name="action" value="<%=intl._("View console on startup")%>" />
<input type="submit" name="action" value="Do not view console on startup" /> <input type="submit" name="action" value="<%=intl._("Do not view console on startup")%>" />
</div></form></div></div></body></html> </div></form></div></div></body></html>

View File

@ -2,8 +2,9 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>I2P Router Console - config stats</title> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("config stats")%>
<script type="text/javascript"> <script type="text/javascript">
function init() function init()
{ {
@ -52,7 +53,7 @@ function toggleAll(category)
</script> </script>
</head><body onLoad="init();"> </head><body onLoad="init();">
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1>I2P Stats Configuration</h1> <h1><%=intl._("I2P Stats Configuration")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
@ -70,25 +71,25 @@ function toggleAll(category)
System.setProperty("net.i2p.router.web.ConfigStatsHandler.nonce", new java.util.Random().nextLong()+""); %> System.setProperty("net.i2p.router.web.ConfigStatsHandler.nonce", new java.util.Random().nextLong()+""); %>
<input type="hidden" name="action" value="foo" /> <input type="hidden" name="action" value="foo" />
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigStatsHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigStatsHandler.nonce")%>" />
<h3>Configure I2P Stat Collection</h3> <h3><%=intl._("Configure I2P Stat Collection")%></h3>
Enable full stats? <p><%=intl._("Enable full stats?")%>
<input type="checkbox" class="optbox" name="isFull" value="true" <% <input type="checkbox" class="optbox" name="isFull" value="true" <%
if (statshelper.getIsFull()) { %>checked="true" <% } %>/> if (statshelper.getIsFull()) { %>checked="true" <% } %>/>
(change requires restart to take effect)<br> (<%=intl._("change requires restart to take effect")%>)<br>
Stat file: <input type="text" name="filename" value="<%=statshelper.getFilename()%>" /><br> <%=intl._("Stat file")%>: <input type="text" name="filename" value="<%=statshelper.getFilename()%>" /><br>
Filter: (<a href="javascript: void(null);" onclick="toggleAll('*')">toggle all</a>)<br> <%=intl._("Filter")%>: (<a href="javascript: void(null);" onclick="toggleAll('*')"><%=intl._("toggle all")%></a>)<br></p>
<div class="wideload"> <div class="wideload">
<table> <p><table>
<% while (statshelper.hasMoreStats()) { <% while (statshelper.hasMoreStats()) {
while (statshelper.groupRequired()) { %> while (statshelper.groupRequired()) { %>
<tr class="tablefooter"> <tr class="tablefooter">
<td align="left" colspan="3"> <td align="left" colspan="3">
<b><%=statshelper.getCurrentGroupName()%></b> <b><%=statshelper.getCurrentGroupName()%></b>
(<a href="javascript: void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')">toggle all</a>) (<a href="javascript: void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')"><%=intl._("toggle all")%></a>)
</td></tr> </td></tr>
<tr class="tablefooter"> <tr class="tablefooter">
<td align="center"><b>Log</b></td> <td align="center"><b><%=intl._("Log")%></b></td>
<td align="center"><b>Graph</b></td> <td align="center"><b><%=intl._("Graph")%></b></td>
<td></td></tr> <td></td></tr>
<% <%
} // end iterating over required groups for the current stat %> } // end iterating over required groups for the current stat %>
@ -105,7 +106,7 @@ function toggleAll(category)
} // end iterating over all stats %> } // end iterating over all stats %>
<tr><td colspan="3"></td></tr> <tr><td colspan="3"></td></tr>
<tr><td align="center"><input type="checkbox" class="optbox" name="explicitFilter" /></td> <tr><td align="center"><input type="checkbox" class="optbox" name="explicitFilter" /></td>
<td colspan="2">Advanced filter: <td colspan="2"><%=intl._("Advanced filter")%>:
<input type="text" name="explicitFilterValue" value="<%=statshelper.getExplicitFilter()%>" size="40" /></td></tr> <input type="text" name="explicitFilterValue" value="<%=statshelper.getExplicitFilter()%>" size="40" /></td></tr>
<tr class="tablefooter"><td colspan="3" align="right"><input type="submit" name="shouldsave" value="Save changes" /><input type="reset" value="Cancel" /></td></tr> <tr class="tablefooter"><td colspan="3" align="right"><input type="submit" name="shouldsave" value="Save changes" /><input type="reset" value="Cancel" /></td></tr>
</table></div></form></div></div></body></html> </table></p></div></form></div></div></body></html>

View File

@ -2,15 +2,16 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>I2P Router Console - config tunnels</title> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("config tunnels")%>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<jsp:useBean class="net.i2p.router.web.ConfigTunnelsHelper" id="tunnelshelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigTunnelsHelper" id="tunnelshelper" scope="request" />
<jsp:setProperty name="tunnelshelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="tunnelshelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<h1>I2P Tunnel Configuration</h1> <h1><%=intl._("I2P Tunnel Configuration")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
<jsp:useBean class="net.i2p.router.web.ConfigTunnelsHandler" id="formhandler" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigTunnelsHandler" id="formhandler" scope="request" />
@ -20,23 +21,23 @@
<jsp:setProperty name="formhandler" property="nonce" value="<%=request.getParameter("nonce")%>" /> <jsp:setProperty name="formhandler" property="nonce" value="<%=request.getParameter("nonce")%>" />
<jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" /> <jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" />
<jsp:getProperty name="formhandler" property="allMessages" /> <jsp:getProperty name="formhandler" property="allMessages" />
<div class="configure"><p><i> <div class="configure"><p>
NOTE: The default settings work for most people. <%=intl._("NOTE")%>:
There is a fundamental tradeoff between anonymity and performance. <%=intl._("The default settings work for most people.")%>
Tunnels longer than 3 hops (for example 2 hops + 0-2 hops, 3 hops + 0-1 hops, 3 hops + 0-2 hops), <%=intl._("There is a fundamental tradeoff between anonymity and performance.")%>
or a high quantity + backup quantity, may severely reduce performance or reliability. <%=intl._("Tunnels longer than 3 hops (for example 2 hops + 0-2 hops, 3 hops + 0-1 hops, 3 hops + 0-2 hops), or a high quantity + backup quantity, may severely reduce performance or reliability.")%>
High CPU and/or high outbound bandwidth usage may result. <%=intl._("High CPU and/or high outbound bandwidth usage may result.")%>
Change these settings with care, and adjust them if you have problems. <%=intl._("Change these settings with care, and adjust them if you have problems.")%>
</i></p><div class="wideload"> <div class="wideload">
<form action="configtunnels.jsp" method="POST"> <form action="configtunnels.jsp" method="POST">
<% String prev = System.getProperty("net.i2p.router.web.ConfigTunnelsHandler.nonce"); <% String prev = System.getProperty("net.i2p.router.web.ConfigTunnelsHandler.nonce");
if (prev != null) System.setProperty("net.i2p.router.web.ConfigTunnelsHandler.noncePrev", prev); if (prev != null) System.setProperty("net.i2p.router.web.ConfigTunnelsHandler.noncePrev", prev);
System.setProperty("net.i2p.router.web.ConfigTunnelsHandler.nonce", new java.util.Random().nextLong()+""); %> System.setProperty("net.i2p.router.web.ConfigTunnelsHandler.nonce", new java.util.Random().nextLong()+""); %>
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigTunnelsHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigTunnelsHandler.nonce")%>" />
<input type="hidden" name="action" value="blah" /> <input type="hidden" name="action" value="blah" />
<jsp:getProperty name="tunnelshelper" property="form" /> <jsp:getProperty name="tunnelshelper" property="form" />
<i>Note - Exploratory tunnel setting changes are stored in the router.config file.</i><br> <%=intl._("Note")%>: <%=intl._("Exploratory tunnel setting changes are stored in the router.config file.")%>
<i>Client tunnel changes are temporary and are not saved.</i><br> <%=intl._("Client tunnel changes are temporary and are not saved.")%>
<i>To make permanent client tunnel changes see the </i><a href="i2ptunnel/index.jsp">i2ptunnel page</a>.<br> <%=intl._("To make permanent client tunnel changes see the")%> <a href="i2ptunnel/index.jsp"><%=intl._("i2ptunnel page")%></a>.
<hr><div class="formaction"><input type="submit" name="shouldsave" value="Save changes" /> <input type="reset" value="Cancel" /></div> <hr><div class="formaction"><input type="submit" name="shouldsave" value="Save changes" /> <input type="reset" value="Cancel" /></div>
</form></div></div></div></body></html> </form></p></div></div></div></body></html>

View File

@ -4,7 +4,7 @@
<html><head> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=cssHelper.title("config UI")%> <%=intl.title("config UI")%>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
@ -21,7 +21,7 @@
<jsp:setProperty name="formhandler" property="*" /> <jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:getProperty name="formhandler" property="allMessages" /> <jsp:getProperty name="formhandler" property="allMessages" />
<div class="configure"><h3><%=uihelper._("Router Console Theme")%></h3> <div class="configure"><div class="topshimten"><h3><%=uihelper._("Router Console Theme")%></h3></div>
<form action="configui.jsp" method="POST"> <form action="configui.jsp" method="POST">
<% String prev = System.getProperty("net.i2p.router.web.ConfigUIHandler.nonce"); <% String prev = System.getProperty("net.i2p.router.web.ConfigUIHandler.nonce");
if (prev != null) System.setProperty("net.i2p.router.web.ConfigUIHandler.noncePrev", prev); if (prev != null) System.setProperty("net.i2p.router.web.ConfigUIHandler.noncePrev", prev);
@ -42,6 +42,6 @@
<jsp:getProperty name="uihelper" property="langSettings" /> <jsp:getProperty name="uihelper" property="langSettings" />
<%=uihelper._("Please contribute to the router console translation project! Contact the developers on IRC #i2p to help.")%> <%=uihelper._("Please contribute to the router console translation project! Contact the developers on IRC #i2p to help.")%>
<hr><div class="formaction"> <hr><div class="formaction">
<input type="submit" name="shouldsave" value="Apply" > <input type="reset" value="Cancel" > <input type="submit" name="shouldsave" value="<%=intl._("Apply")%>" > <input type="reset" value="<%=intl._("Cancel")%>" >
</div></form></div> </div></form></div>
</div></body></html> </div></body></html>

View File

@ -4,11 +4,11 @@
<html><head> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=cssHelper.title("config update")%> <%=intl.title("config update")%>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1>I2P Update Configuration</h1> <h1><%=intl._("I2P Update Configuration")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
@ -26,35 +26,35 @@
if (prev != null) System.setProperty("net.i2p.router.web.ConfigUpdateHandler.noncePrev", prev); if (prev != null) System.setProperty("net.i2p.router.web.ConfigUpdateHandler.noncePrev", prev);
System.setProperty("net.i2p.router.web.ConfigUpdateHandler.nonce", new java.util.Random().nextLong()+""); %> System.setProperty("net.i2p.router.web.ConfigUpdateHandler.nonce", new java.util.Random().nextLong()+""); %>
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigUpdateHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigUpdateHandler.nonce")%>" />
<h3>Check for I2P and news updates</h3> <h3><%=intl._("Check for I2P and news updates")%></h3>
<div class="wideload"><table border="0" cellspacing="5"> <div class="wideload"><table border="0" cellspacing="5">
<tr><td colspan="2"></tr> <tr><td colspan="2"></tr>
<tr><td class= "mediumtags" align="right"><b>News &amp; I2P Updates:</b></td> <tr><td class= "mediumtags" align="right"><b><%=intl._("News &amp; I2P Updates")%>:</b></td>
<td> <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> <i>Update In Progress</i><br> <% } else { %> <input type="submit" name="action" value="Check for updates" /> <td> <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> <i><%=intl._("Update In Progress")%></i><br> <% } else { %> <input type="submit" name="action" value="<%=intl._("Check for updates")%>" />
<% } %></td></tr> <% } %></td></tr>
<tr><td colspan="2"><br></td></tr> <tr><td colspan="2"><br></td></tr>
<tr><td class= "mediumtags" align="right"><b>News URL:</b></td> <tr><td class= "mediumtags" align="right"><b><%=intl._("News URL")%>:</b></td>
<td><input type="text" size="60" name="newsURL" value="<jsp:getProperty name="updatehelper" property="newsURL" />"></td> <td><input type="text" size="60" name="newsURL" value="<jsp:getProperty name="updatehelper" property="newsURL" />"></td>
</tr><tr><td class= "mediumtags" align="right"><b>Refresh frequency:</b> </tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Refresh frequency")%>:</b>
<td><jsp:getProperty name="updatehelper" property="refreshFrequencySelectBox" /></td><tr> <td><jsp:getProperty name="updatehelper" property="refreshFrequencySelectBox" /></td><tr>
<td class= "mediumtags" align="right"><b><%=formhandler._("Update policy")%>:</b></td> <td class= "mediumtags" align="right"><b><%=formhandler._("Update policy")%>:</b></td>
<td><jsp:getProperty name="updatehelper" property="updatePolicySelectBox" /></td> <td><jsp:getProperty name="updatehelper" property="updatePolicySelectBox" /></td>
<tr><td class= "mediumtags" align="right"><b>Update through the eepProxy?</b></td> <tr><td class= "mediumtags" align="right"><b><%=intl._("Update through the eepProxy?")%></b></td>
<td><jsp:getProperty name="updatehelper" property="updateThroughProxy" /></td> <td><jsp:getProperty name="updatehelper" property="updateThroughProxy" /></td>
</tr><tr><td class= "mediumtags" align="right"><b>eepProxy host:</b></td> </tr><tr><td class= "mediumtags" align="right"><b><%=intl._("eepProxy host")%>:</b></td>
<td><input type="text" size="10" name="proxyHost" value="<jsp:getProperty name="updatehelper" property="proxyHost" />" /></td> <td><input type="text" size="10" name="proxyHost" value="<jsp:getProperty name="updatehelper" property="proxyHost" />" /></td>
</tr><tr><td class= "mediumtags" align="right"><b>eepProxy port:</b></td> </tr><tr><td class= "mediumtags" align="right"><b><%=intl._("eepProxy port")%>:</b></td>
<td><input type="text" size="4" name="proxyPort" value="<jsp:getProperty name="updatehelper" property="proxyPort" />" /></td> <td><input type="text" size="4" name="proxyPort" value="<jsp:getProperty name="updatehelper" property="proxyPort" />" /></td>
</tr><tr><td class= "mediumtags" align="right"><b>Update URLs:</b></td> </tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Update URLs")%>:</b></td>
<td><textarea name="updateURL" wrap="off"><jsp:getProperty name="updatehelper" property="updateURL" /></textarea></td> <td><textarea name="updateURL" wrap="off"><jsp:getProperty name="updatehelper" property="updateURL" /></textarea></td>
</tr><tr><td class= "mediumtags" align="right"><b>Trusted keys:</b></td> </tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Trusted keys")%>:</b></td>
<td><textarea name="trustedKeys" wrap="off"><jsp:getProperty name="updatehelper" property="trustedKeys" /></textarea></td> <td><textarea name="trustedKeys" wrap="off"><jsp:getProperty name="updatehelper" property="trustedKeys" /></textarea></td>
</tr><tr><td class= "mediumtags" align="right"><b>Update with unsigned development builds?</b></td> </tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Update with unsigned development builds?")%></b></td>
<td><jsp:getProperty name="updatehelper" property="updateUnsigned" /></td> <td><jsp:getProperty name="updatehelper" property="updateUnsigned" /></td>
</tr><tr><td class= "mediumtags" align="right"><b>Unsigned Build URL:</b></td> </tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Unsigned Build URL")%>:</b></td>
<td><input type="text" size="60" name="zipURL" value="<jsp:getProperty name="updatehelper" property="zipURL" />"></td> <td><input type="text" size="60" name="zipURL" value="<jsp:getProperty name="updatehelper" property="zipURL" />"></td>
</tr><tr class="tablefooter"><td colspan="2"> </tr><tr class="tablefooter"><td colspan="2">
<div class="formaction"> <div class="formaction">
<input type="submit" name="action" value="Save" /> <input type="submit" name="action" value="<%=intl._("Save")%>" />
<input type="reset" value="Cancel" /> <input type="reset" value="<%=intl._("Cancel")%>" />
</div></td></tr></table></div></form></div></div></body></html> </div></td></tr></table></div></form></div></div></body></html>

View File

@ -23,17 +23,17 @@
%> %>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="shortcut icon" href="/themes/console/images/favicon.ico"> <link rel="shortcut icon" href="/themes/console/images/favicon.ico">
<jsp:useBean class="net.i2p.router.web.CSSHelper" id="cssHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.CSSHelper" id="intl" scope="request" />
<jsp:setProperty name="cssHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="intl" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<% <%
cssHelper.setLang(request.getParameter("lang")); intl.setLang(request.getParameter("lang"));
%> %>
<link href="<%=cssHelper.getTheme(request.getHeader("User-Agent"))%>console.css" rel="stylesheet" type="text/css"> <link href="<%=intl.getTheme(request.getHeader("User-Agent"))%>console.css" rel="stylesheet" type="text/css">
<% <%
// make the fonts bigger for chinese // make the fonts bigger for chinese
if (cssHelper.getLang().equals("zh")) { if (intl.getLang().equals("zh")) {
%> %>
<link href="<%=cssHelper.getTheme(request.getHeader("User-Agent"))%>console_big.css" rel="stylesheet" type="text/css"> <link href="<%=intl.getTheme(request.getHeader("User-Agent"))%>console_big.css" rel="stylesheet" type="text/css">
<% <%
} }
%> %>

View File

@ -12,8 +12,9 @@
} }
// If it can't find the iframe or viewtheme.jsp I wonder if the whole thing blows up... // If it can't find the iframe or viewtheme.jsp I wonder if the whole thing blows up...
%> %>
<html><head><title>I2P Router Console - Page Not Found</title> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("Page Not Found")%>
</head><body> </head><body>
<% <%
if (System.getProperty("router.consoleNonce") == null) { if (System.getProperty("router.consoleNonce") == null) {
@ -23,6 +24,6 @@ if (System.getProperty("router.consoleNonce") == null) {
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1><%=ERROR_CODE%> <%=ERROR_MESSAGE%></h1> <h1><%=ERROR_CODE%> <%=ERROR_MESSAGE%></h1>
<div class="sorry" id="warning"> <div class="sorry" id="warning">
Sorry! You appear to be requesting a non-existent Router Console page or resource.<hr> <%=intl._("Sorry! You appear to be requesting a non-existent Router Console page or resource.")%><hr>
Error 404: <%=ERROR_URI%> not found. <%=intl._("Error 404")%>: <%=ERROR_URI%> <%=intl._("not found")%>.
</div></body></html> </div></body></html>

View File

@ -2,12 +2,13 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>I2P Router Console - graphs</title> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("graphs")%>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1>I2P Performance Graphs</h1> <h1><%=intl._("I2P Performance Graphs")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<div class="graphspanel"> <div class="graphspanel">
<div class="widepanel"> <div class="widepanel">

View File

@ -7,22 +7,22 @@
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1>I2P Router Help & Support</h1> <h1>I2P Router Help & Support</h1>
<div class="main" id="main"><div align="justify"> <div class="main" id="main"><p>
If you'd like to help improve or translate the documentation, or If you'd like to help improve or translate the documentation, or
help with other aspects of the project, please see the documentation for help with other aspects of the project, please see the documentation for
<a href="http://www.i2p2.i2p/getinvolved.html">volunteers.</a> <a href="http://www.i2p2.i2p/getinvolved.html">volunteers.</a>
<br><br>Further assistance is available here:<br></div> </p><p>Further assistance is available here:
<ul class="links"> <ul class="links">
<li class="tidylist"><a href="http://www.i2p2.i2p/faq.html">FAQ on www.i2p2.i2p</a> <li class="tidylist"><a href="http://www.i2p2.i2p/faq.html">FAQ on www.i2p2.i2p</a>
<li class="tidylist"><a href="http://www.i2p2.i2p/faq_de.html">Deutsch FAQ</a>.</ul><br> <li class="tidylist"><a href="http://www.i2p2.i2p/faq_de.html">Deutsch FAQ</a>.</ul>
You may also try the <a href="http://forum.i2p/">I2P forum</a> </p><p>You may also try the <a href="http://forum.i2p/">I2P forum</a>
or IRC.<br> or IRC.</p>
<h2>Summary Bar Information</h2><div align="justify"> <h2>Summary Bar Information</h2><p>
Many of the stats on the summary bar may be Many of the stats on the summary bar may be
<a href="configstats.jsp">configured</a> to be <a href="configstats.jsp">configured</a> to be
<a href="graphs.jsp">graphed</a> for further analysis. <a href="graphs.jsp">graphed</a> for further analysis.
</div><h3>General</h3><ul> </p><h3>General</h3><ul>
<li class="tidylist"><b>Ident:</b> <li class="tidylist"><b>Ident:</b>
The first four characters (24 bits) of your 44-character (256-bit) Base64 router hash. The first four characters (24 bits) of your 44-character (256-bit) Base64 router hash.
The full hash is shown on your <a href="netdb.jsp?r=.">router info page</a>. The full hash is shown on your <a href="netdb.jsp?r=.">router info page</a>.
@ -75,7 +75,7 @@ The local applications connecting through your router.
These may be clients started through <a href="i2ptunnel/index.jsp">I2PTunnel</a> These may be clients started through <a href="i2ptunnel/index.jsp">I2PTunnel</a>
or external programs connecting through SAM, BOB, or directly to I2CP. or external programs connecting through SAM, BOB, or directly to I2CP.
</div><h3>Tunnels in/out</h3><div align="justify"> </div><h3>Tunnels in/out</h3><div align="justify">
The actual tunnels are shown on the <a href="tunnels.jsp">the tunnels page</a>.</div><br><ul> The actual tunnels are shown on the <a href="tunnels.jsp">the tunnels page</a>.</div><ul>
<li class="tidylist"><div align="justify"><b>Exploratory:</b> <li class="tidylist"><div align="justify"><b>Exploratory:</b>
Tunnels built by your router and used for communication with the floodfill peers, Tunnels built by your router and used for communication with the floodfill peers,
building new tunnels, and testing existing tunnels.</div> building new tunnels, and testing existing tunnels.</div>
@ -91,7 +91,7 @@ You may also limit the total number by setting <tt>router.maxParticipatingTunnel
the <a href="configadvanced.jsp">advanced configuration page</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Enable graphing]</a>.</ul> the <a href="configadvanced.jsp">advanced configuration page</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Enable graphing]</a>.</ul>
<h3>Congestion</h3><div align="justify"> <h3>Congestion</h3><div align="justify">
Some basic indications of router overload:</div><br><ul> Some basic indications of router overload:</div><ul>
<li class="tidylist"><b>Job lag:</b> <li class="tidylist"><b>Job lag:</b>
How long jobs are waiting before execution. The job queue is listed on the <a href="jobs.jsp">jobs page</a>. How long jobs are waiting before execution. The job queue is listed on the <a href="jobs.jsp">jobs page</a>.
Unfortunately, there are several other job queues in the router that may be congested, Unfortunately, there are several other job queues in the router that may be congested,
@ -129,9 +129,8 @@ or reject all requests for a number of reasons, to control
the bandwidth and CPU demands and maintain capacity for the bandwidth and CPU demands and maintain capacity for
local clients.</ul> local clients.</ul>
<h2>Legal stuff</h2><div align="justify"> <h2>Legal stuff</h2><p>The I2P router (router.jar) and SDK (i2p.jar) are almost entirely public domain, with
The I2P router (router.jar) and SDK (i2p.jar) are almost entirely public domain, with a few notable exceptions:</p><ul>
a few notable exceptions:</div><br><ul>
<li class="tidylist">ElGamal and DSA code, under the BSD license, written by TheCrypto</li> <li class="tidylist">ElGamal and DSA code, under the BSD license, written by TheCrypto</li>
<li class="tidylist">SHA256 and HMAC-SHA256, under the MIT license, written by the Legion of the Bouncycastle</li> <li class="tidylist">SHA256 and HMAC-SHA256, under the MIT license, written by the Legion of the Bouncycastle</li>
<li class="tidylist">AES code, under the Cryptix (MIT) license, written by the Cryptix team</li> <li class="tidylist">AES code, under the Cryptix (MIT) license, written by the Cryptix team</li>

View File

@ -4,7 +4,7 @@
<html><head> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<title>I2P Router Console - home</title> <%=intl.title("home")%>
</head><body> </head><body>
<% <%
if (System.getProperty("router.consoleNonce") == null) { if (System.getProperty("router.consoleNonce") == null) {
@ -12,7 +12,7 @@ if (System.getProperty("router.consoleNonce") == null) {
} }
%> %>
<%@include file="summary.jsp" %><h1>I2P Router Console</h1> <%@include file="summary.jsp" %><h1><%=intl._("I2P Router Console")%></h1>
<div class="news" id="news"> <div class="news" id="news">
<jsp:useBean class="net.i2p.router.web.ContentHelper" id="newshelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ContentHelper" id="newshelper" scope="request" />
<% java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getRouterDir(), "docs/news.xml"); %> <% java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getRouterDir(), "docs/news.xml"); %>

View File

@ -2,13 +2,14 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>I2P Router Console - job queue</title> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("job queue")%>
</head><body> </head><body>
<%@include file="summary.jsp" %><h1>I2P Router Job Queue</h1> <%@include file="summary.jsp" %><h1><%=intl._("I2P Router Job Queue")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<jsp:useBean class="net.i2p.router.web.JobQueueHelper" id="jobQueueHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.JobQueueHelper" id="jobQueueHelper" scope="request" />
<jsp:setProperty name="jobQueueHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="jobQueueHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:setProperty name="jobQueueHelper" property="writer" value="<%=out%>" /> <jsp:setProperty name="jobQueueHelper" property="writer" value="<%=out%>" />
<jsp:getProperty name="jobQueueHelper" property="jobQueueSummary" /> <jsp:getProperty name="jobQueueHelper" property="jobQueueSummary" />
</div></body></html> <hr></div></body></html>

View File

@ -2,27 +2,28 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>I2P Router Console - logs</title> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("logs")%>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1>I2P Router Logs</h1> <h1><%=intl._("I2P Router Logs")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<div class="joblog"><h3>Version:</h3><a name="version"> </a> <div class="joblog"><h3><%=intl._("I2P Version & Running Environment")%></h3><a name="version"> </a>
Please include this information in bug reports. <i><%=intl._("Please include this information in bug reports")%>:</i>
<p> <p>
I2P <jsp:getProperty name="helper" property="version" /><br> <b>I2P version:</b> <jsp:getProperty name="helper" property="version" /><br>
<%=System.getProperty("java.vendor")%> <%=System.getProperty("java.version")%><br> <b>Java version:</b> <%=System.getProperty("java.vendor")%> <%=System.getProperty("java.version")%><br>
<%=System.getProperty("os.name")%> <%=System.getProperty("os.arch")%> <%=System.getProperty("os.version")%><br> <b>Platform:</b> <%=System.getProperty("os.name")%> <%=System.getProperty("os.arch")%> <%=System.getProperty("os.version")%><br>
CPU <%=net.i2p.util.NativeBigInteger.cpuModel()%> (<%=net.i2p.util.NativeBigInteger.cpuType()%>)<br> <b>Processor:</b> <%=net.i2p.util.NativeBigInteger.cpuModel()%> (<%=net.i2p.util.NativeBigInteger.cpuType()%>)<br>
jbigi <%=net.i2p.util.NativeBigInteger.loadStatus()%><br> <b>Jbigi:</b> <%=net.i2p.util.NativeBigInteger.loadStatus()%><br>
Encoding <%=System.getProperty("file.encoding")%><br></p><br> <b>Encoding:</b> <%=System.getProperty("file.encoding")%></p>
<jsp:useBean class="net.i2p.router.web.LogsHelper" id="logsHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.LogsHelper" id="logsHelper" scope="request" />
<jsp:setProperty name="logsHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="logsHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<h3>Critical logs:</h3><a name="criticallogs"> </a> <h3>Critical Logs</h3><a name="criticallogs"> </a>
<jsp:getProperty name="logsHelper" property="criticalLogs" /><br> <jsp:getProperty name="logsHelper" property="criticalLogs" />
<h3>Router logs (<a href="configlogging.jsp">configure</a>):</h3> <h3>Router Logs [<a href="configlogging.jsp">configure</a>]</h3>
<jsp:getProperty name="logsHelper" property="logs" /><br> <jsp:getProperty name="logsHelper" property="logs" />
<h3>Service (Wrapper) logs:</h3><a name="servicelogs"> </a> <h3>Service (Wrapper) Logs</h3><a name="servicelogs"> </a>
<jsp:getProperty name="logsHelper" property="serviceLogs" /> <jsp:getProperty name="logsHelper" property="serviceLogs" />
</div></div></body></html> </div><hr></div></body></html>

View File

@ -3,11 +3,11 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head>
<title>I2P Router Console - network database summary</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("network database summary")%>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1>I2P Network Database Summary</h1> <h1><%=intl._("I2P Network Database Summary")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<div class="wideload"> <div class="wideload">
<jsp:useBean class="net.i2p.router.web.NetDbHelper" id="netdbHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.NetDbHelper" id="netdbHelper" scope="request" />

View File

@ -2,14 +2,15 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>I2P Router Console - statistics</title> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("statistics")%>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<jsp:useBean class="net.i2p.router.web.OldConsoleHelper" id="oldhelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.OldConsoleHelper" id="oldhelper" scope="request" />
<jsp:setProperty name="oldhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="oldhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:setProperty name="oldhelper" property="writer" value="<%=out%>" /> <jsp:setProperty name="oldhelper" property="writer" value="<%=out%>" />
<h1>I2P Router Statistics</h1> <h1><%=intl._("I2P Router Statistics")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<jsp:getProperty name="oldhelper" property="stats" /> <jsp:getProperty name="oldhelper" property="stats" />
</div></body></html> <hr></div></body></html>

View File

@ -2,11 +2,12 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>I2P Router Console - peer connections</title> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("peer connections")%>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1>I2P Network Peers</h1> <h1><%=intl._("I2P Network Peers")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<jsp:useBean class="net.i2p.router.web.PeerHelper" id="peerHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.PeerHelper" id="peerHelper" scope="request" />
<jsp:setProperty name="peerHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="peerHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />

View File

@ -2,16 +2,16 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>I2P Router Console - peer profiles</title> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("peer profiles")%>
</head><body><%@include file="summary.jsp" %> </head><body><%@include file="summary.jsp" %>
<h1>I2P Network Peer Profiles</h1> <h1><%=intl._("I2P Network Peer Profiles")%></h1>
<div class="main" id="main"><div class="wideload"> <div class="main" id="main"><div class="wideload">
<jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" />
<jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:setProperty name="profilesHelper" property="writer" value="<%=out%>" /> <jsp:setProperty name="profilesHelper" property="writer" value="<%=out%>" />
<jsp:getProperty name="profilesHelper" property="profileSummary" /> <jsp:getProperty name="profilesHelper" property="profileSummary" />
<br>
<a name="shitlist"> </a> <a name="shitlist"> </a>
<jsp:getProperty name="profilesHelper" property="shitlistSummary" /> <jsp:getProperty name="profilesHelper" property="shitlistSummary" />
</div></div></body></html> <hr></div></div></body></html>

View File

@ -22,10 +22,10 @@
} else { } else {
// since we don't have an iframe this will reload the base page, and // since we don't have an iframe this will reload the base page, and
// the new delay will be passed to the iframe above // the new delay will be passed to the iframe above
out.print("<form action=\"" + request.getRequestURI() + "\" method=\"GET\">\n"); out.print("<div class=\"refresh\"><form action=\"" + request.getRequestURI() + "\" method=\"GET\">\n");
out.print("<b>Refresh (s):</b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" />\n"); out.print("<b>Refresh (s):</b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" />\n");
out.print("<button type=\"submit\">Enable</button>\n"); out.print("<button type=\"submit\">Enable</button>\n");
out.print("</form></div>\n"); out.print("</form></div></div>\n");
} }
%> %>
</div> </div>

View File

@ -53,14 +53,14 @@
<% <%
// d and shutdownSoon defined above // d and shutdownSoon defined above
if (!shutdownSoon) { if (!shutdownSoon) {
out.print("<hr><form action=\"summaryframe.jsp\" method=\"GET\">\n"); out.print("<hr><div class=\"refresh\"><form action=\"summaryframe.jsp\" method=\"GET\">\n");
if ("0".equals(d)) { if ("0".equals(d)) {
out.print("<b>Refresh (s):<b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" align=\"right\" />\n"); out.print("<b>Refresh (s):<b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" />\n");
out.print("<button type=\"submit\">Enable</button>\n"); out.print("<button type=\"submit\">Enable</button></div>\n");
} else { } else {
// this will load in the iframe but subsequent pages will not have the iframe // this will load in the iframe but subsequent pages will not have the iframe
out.print("<input type=\"hidden\" name=\"refresh\" value=\"0\" />\n"); out.print("<input type=\"hidden\" name=\"refresh\" value=\"0\" />\n");
out.print("<button type=\"submit\">Disable " + d + "s Refresh</button>\n"); out.print("<button type=\"submit\">Disable " + d + "s Refresh</button></div>\n");
} }
out.print("</form><hr>\n"); out.print("</form><hr>\n");
} }

View File

@ -2,10 +2,11 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>I2P Router Console - tunnel summary</title> <html><head>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<%=intl.title("tunnel summary")%>
</head><body> </head><body>
<%@include file="summary.jsp" %><h1>I2P Tunnel Summary</h1> <%@include file="summary.jsp" %><h1><%=intl._("I2P Tunnel Summary")%></h1>
<div class="main" id="main"> <div class="main" id="main">
<jsp:useBean class="net.i2p.router.web.TunnelHelper" id="tunnelHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.TunnelHelper" id="tunnelHelper" scope="request" />
<jsp:setProperty name="tunnelHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="tunnelHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

82
codeswarm-extractor.rb Executable file
View File

@ -0,0 +1,82 @@
#!/usr/bin/env ruby1.9
require 'date'
MAPPING={
'"zzz@mail.i2p"' => 'zzz',
'"z3d@mail.i2p"' => 'dr|z3d',
'"sponge@mail.i2p"' => 'sponge',
'"mkvore-commit@mail.i2p"' => 'mkvore',
'"complication@mail.i2p"' => 'complication',
'"dev@welterde.de"' => 'welterde',
'"Oldaris@mail.i2p"' => 'oldaris',
'"mathiasdm@mail.i2p"' => 'mathiasdm',
'"amiga4000@mail.i2p"' => 'amiga4000',
'"dream@mail.i2p"' => 'dream',
'"walking@mail.i2p"' => 'walking',
'"jrandom@i2p.net"' => 'jrandom',
'"jrandom-transfer@i2p.net"' => 'jrandom',
'"transport@welterde.de"' => 'welterde',
'"echelon@mail.i2p"' => 'eche|on',
'"z3d@i2p"' => 'dr|z3d',
'"cervantes@mail.i2p"' => 'cervantes',
'"BlubMail@mail.i2p"' => 'BlubMail'
}
roots=[]
`mtn automate roots`.split("\n").map {|n| n.strip}.each do |rev|
roots << rev
end
revs = []
roots.each do |root|
`mtn automate descendents #{root}`.split("\n").map {|n| n.strip}.each do |rev|
revs << rev
end
end
# open the file
f=File::open('/tmp/i2p.xml', 'w')
f << '<?xml version="1.0"?>'
f << "\n"
f << '<file_events>'
f << "\n"
d=[]
revs.each do |rev|
print rev
print " - "
certs_=`mtn automate certs #{rev}`.split("\n").map{|l|l2=l.strip; l2.split(" ", 2) if l2 != ""}
author=certs_[3][1]
date=nil
branch='""'
certs_.each_index do |i|
next unless certs_[i]
if certs_[i][1]
date=certs_[i+1][1] if certs_[i][1].strip === '"date"'
branch=certs_[i+1][1] if certs_[i][1].strip === '"branch"'
end
end
info=`mtn automate get_revision #{rev}`.strip.split("\n").map{|l|l2=l.strip; l2.split(" ", 2) if l2 != ""}
print date
date=DateTime.parse(date).to_time.to_i*1000
print " - "
print date
print " - "
print branch
print " - "
puts author
info.each do |line|
next unless line
d << [date, (branch.strip[1..-2] + '//' + line[1].strip[1..-2]), (MAPPING[author] or author[1..-2])] if line[0].strip == "patch"
end
end
d.sort! {|a,b| a[0] <=> b[0]}
d.each do |a|
f << "<event date=\"#{a[0]}\" filename=\"#{a[1]}\" author=\"#{a[2]}\" />\n"
end
f << '</file_events>'
f << "\n"
f.close()

View File

@ -1,3 +1,69 @@
2009-10-23 zzz
* Certificate: Fix the (apparently unused) readBytes(byte[], int) method
for a null certificate - http://zzz.i2p/topics/388 - thanks HungryHobo
* Console:
- Don't hide link to configui.jsp for IE any more
- Add lang selection on configui.jsp
- Tag strings in configui.jsp
- Load console_big.css if lang == zh
- Add _x() tag for static iniitializers
- HTML transitional input tags
- Rename cssHelper to intl for ease of tagging
* Update: Better error message when .sud file not found or truncated
http://forum.i2p/viewtopic.php?t=3979
The bug with the file going to the wrong place was fixed a couple months ago.
2009-10-21 dr|z3d
* Enhance index.jsp with "paperclips" for the main links
* Tighten sidepanel layout to gain us some vertical screen real estate
* Update news.xml with the correct link for Chinese translation page
2009-10-20 zzz
* I2NP: Remove old TunnelCreateMessage and TunnelCreateStatusMessage
* Logger: Don't kill the whole JVM if we can't open the log file
* MessageHistory: Cleanups
* NetDb: Move renderStatusHTML to routerconsole
* Router Console translation infrastructure:
- Persistent lang setting with routerconsole.lang=xx
- Loading any page with ?lang=xx changes the persistent setting
- Add a custom Jetty handler to load foo_xx.jsp if it
exists for language xx. This is for jsp files with lots
of text in them. Otherwise use inline translate methods.
Not for included jsps.
- Add a script to create and update messages_xx.po translation
files, and create ResourceBundles from them
- Add class to translate strings from cached ResourceBundles
- Add translate wrappers to HelperBase, FormHandler, and *Renderer,
so calls can be made from both jsp and java files
- Add example translations on configupdate.jsp - two in
the jsp itself and one in the helper.
- This is for strings in routerconsole only. Will be expanded
to other webapps and the router later.
* summarynoframe.jsp:
- Refactor to SummaryBarRenderer (saves 100KB)
- Add translate tags
- Use context RNG for nonces
- Transitional HTML style for input tags
* TunnelDispatcher: Drop messages that expire far in the future
* TunnelPoolManager: Move renderStatusHTML to routerconsole
2009-10-16 dr|z3d
* Extensive UI whitespace cleanups and positional finessing.
2009-10-16 zzz
* Crypto: Two more test classes out of the lib
* FloodfillMonitor: Slow down the volunteers again
* i2psnark: Add TPB tracker
* NetDb: Rework part 1 of N:
- Flood only to those closest to the key
- Java 5 fixups
* oldconsole.jsp: Remove almost all of it, add lines for tino
* ProfileOrganizerRenderer:
- Move to routerconsole
- Write directly to Writer for speed
* Router: Add router.hideFloodfillParticipant option for testing
* StatisticsManager: Cleanup after release
* 2009-10-12 0.7.7 released * 2009-10-12 0.7.7 released
2009-10-11 zzz 2009-10-11 zzz

View File

@ -68,8 +68,8 @@ div.warning {
border: 5px solid #fb7; border: 5px solid #fb7;
text-align: left; text-align: left;
color: inherit; color: inherit;
background-image:url("../images/errortriangle.png"); background-image:url("../images/itoopie_sm.png");
background-position: 17px center; background-position: 12px center;
background-repeat:no-repeat; background-repeat:no-repeat;
-moz-border-radius: 15px; -moz-border-radius: 15px;
-moz-box-shadow: inset 0px 0px 0px 2px #f60; -moz-box-shadow: inset 0px 0px 0px 2px #f60;
@ -169,11 +169,10 @@ div.routersummary hr {
div.routersummary h3 { div.routersummary h3 {
border: 0px solid #f00; border: 0px solid #f00;
/* border-bottom: 1px solid #99f !important;*/ font-size: 9.5pt;
font-size: 10pt;
letter-spacing: 0.05em; letter-spacing: 0.05em;
margin: -7px 1px -7px 1px; margin: -7px 1px -7px 1px;
padding: 5px 0px 5px 0px; padding: 1px 0;
background: #c5d5fb; background: #c5d5fb;
text-transform: uppercase; text-transform: uppercase;
} }
@ -181,10 +180,10 @@ div.routersummary h3 {
div.routersummary h4 { div.routersummary h4 {
border: 0px solid #f00; border: 0px solid #f00;
border-bottom: 0 !important; border-bottom: 0 !important;
font-size: 9pt; font-size: 8.5pt;
letter-spacing: 0.05em; letter-spacing: 0.05em;
margin: -7px 1px -7px 1px !important; margin: -7px 1px -7px 1px !important;
padding: 2px 3px 3px 3px; padding: 1px 3px;
background: #c1d1f7; background: #c1d1f7;
text-transform: capitalize; text-transform: capitalize;
text-decoration: none !important; text-decoration: none !important;
@ -194,11 +193,11 @@ div.routersummary h4 {
div.routersummary table { div.routersummary table {
border: 0; border: 0;
text-align: center !important; text-align: center !important;
margin: -5px 5px -5px 2px; margin: -5px 4px -5px 3px;
width: 180px !important; width: 180px !important;
overflow: hidden; overflow: hidden;
font-size: 8pt; font-size: 8pt;
padding: 0px -10px; padding: 0 -10px;
background-image: none !important; background-image: none !important;
background-color: transparent !important; background-color: transparent !important;
} }
@ -209,8 +208,24 @@ div.routersummary tr {
border: 0 !important; border: 0 !important;
} }
div.tunnels table{
margin: 0 !important;
}
.tunnels tr {
padding: 2px 0 !important;
margin-left: -7px !important;
}
div.routersummary form { div.routersummary form {
margin-top: 8px; margin-top: -6px !important;
margin-bottom: -4px !important;
}
div.refresh {
margin-top: 10px !important;
margin-bottom: 10px !important;
padding: 2px 0 !important;
} }
div.routersummary p { div.routersummary p {
@ -227,21 +242,11 @@ div.routersummary a:hover {
} }
div.routersummary td { div.routersummary td {
padding: 2px 4px; padding: 0 4px;
background-image: none !important; background-image: none !important;
border: 0 !important; border: 0 !important;
} }
div.routersummary tr:nth-child(even) {
background-color: #f60;
background-image: none !important;
}
div.routersummarytr:nth-child(odd) {
background-color: #f00;
background-image: none !important;
}
div.warning h3 { div.warning h3 {
border-bottom: 5px solid #fb7; border-bottom: 5px solid #fb7;
padding-bottom: 10px; padding-bottom: 10px;
@ -249,7 +254,7 @@ div.warning h3 {
div.main { div.main {
margin: 0px 0px 0px 195px; margin: 0px 0px 0px 195px;
padding: 15px; padding: 15px 15px 10px 15px;
background: #eef; background: #eef;
border: 5px solid #bbf; border: 5px solid #bbf;
border-top: 0; border-top: 0;
@ -260,35 +265,74 @@ div.main {
} }
div.main ul { div.main ul {
margin: 0; margin: -10px 0 -10px -10px;
} }
div.main li { div.main li {
padding: 0 0 5px 0; padding: 0 0 5px 0;
list-style: square; list-style: square;
word-wrap: break-word;
margin-right: 20px;
} }
div.main li:first-child { div.main li:first-child {
padding-top: 5px; padding-top: 15px;
}
div.main hr:last-child {
margin: 15px 0 10px 0;
} }
div.main textarea { div.main textarea {
width: 98% !important; width: 98% !important;
margin: 2px 0 2px 5px; margin: 2px 0 2px 5px;
min-height: 96px;
}
div.main h2 {
margin-top: 20px;
margin-bottom: -5px;
}
div.welcome {
margin-top: 5px;
}
div.main h2:first-child, div.main h3:first-child {
margin-top: 0px;
margin-bottom: -5px;
}
div.wideload h2 {
margin-bottom: 0px !important;
}
div.wideload h3:first-child {
margin-top: 0 !important;
}
div.wideload h3 {
margin-top: 15px !important;
margin-bottom: 0px !important;
}
div.wideload p !important {
margin-top: 5px;
} }
div.news { div.news {
margin: -5px 0px 0 195px; margin: -5px 0px 0 195px;
padding: -10px 15px 8px 15px; padding: -10px 0px 8px 0px;
background: #ffffc0; background: #ffffc0;
border: 5px solid #bbf; border: 5px solid #bbf;
text-align: justify; text-align: right;
color: inherit; color: #770;
min-width: 600px; min-width: 600px;
padding-bottom: 8px; padding-bottom: 8px;
padding-left: 10px; padding-left: 10px;
padding-right: 10px; padding-right: 10px;
-moz-box-shadow: inset 0px 0px 0px 1px #99f; -moz-box-shadow: inset 0px 0px 0px 1px #99f;
font-size: 7pt;
} }
/* convert the list entry to our title */ /* convert the list entry to our title */
@ -296,34 +340,50 @@ div.news {
div.news li { div.news li {
text-align: justify; text-align: justify;
list-style: none; list-style: none;
margin: -15px 15px -20px -20px; margin: 15px 15px -10px -20px;
padding: 0px 0 15px 0; padding: 0px 0 15px 0;
border-bottom: 5px solid #cc7; border-bottom: 2px dotted #cc7;
border-top: 0px solid #cc7; border-top: 0px solid #cc7;
padding: 3px 5px 5px 5px; padding: 3px 5px 5px 0;
font-size: 12pt; font-size: 10pt;
color: #540; color: #540;
} }
div.news p { div.news p {
color: #330; color: #330;
font-size: 9pt;
margin-bottom: -10px;
} }
/*
div.news p:first-child {
padding-top: 15px !important;
}
div.news p:nth-child(2n) {
padding-top: 15px !important;
}
*/
div.news p:last-child {
margin-bottom: 10px;
}
div.news a:link { div.news a:link {
color: #773; color: #663;
text-shadow: 0px 0px 1px rgba(128, 128, 48, 0.3); text-shadow: 0px 0px 1px rgba(128, 128, 48, 0.3);
} }
div.news a:visited { div.news a:visited {
color: #f00 !important; color: #773 !important;
text-shadow: 0px 0px 1px rgba(128, 128, 48, 0.3); text-shadow: 0px 0px 1px rgba(128, 128, 48, 0.3);
} }
div.news hr { div.news hr {
color: #cc7; color: #cc7;
background: #cc7; background: #cc7;
height: 2px; height: 1px;
border: 0px solid #cc7; border: 0px solid #cccc77;
margin: 5px 0; margin: 2px 0 0 0;
} }
div.confignav { div.confignav {
@ -339,10 +399,14 @@ div.configure {
padding: 0px 20px 0px 20px; padding: 0px 20px 0px 20px;
} }
div.configure hr {
margin: 15px 0;
}
div.configure table { div.configure table {
font-size: 9pt; font-size: 9pt;
font-weight: bold; font-weight: bold;
-moz-box-shadow: inset 0px 0px 1px 1px #001; border: 1px solid #bbf;
} }
div.configure tr, div.configure td { div.configure tr, div.configure td {
@ -353,6 +417,23 @@ div.configure tr {
-moz-box-shadow: inset 0px 0px 1px 0px #bbf; -moz-box-shadow: inset 0px 0px 1px 0px #bbf;
} }
div.configure li:first-child, div.main li:first-child {
margin-top: -10px;
}
div.configure li:last-child {
margin-bottom: -5px;
}
div.configure h2:first-child {
margin-top: 15px;
}
.topshimten {
margin-top: 15px;
margin-bottom: 15px;
}
div.messages { div.messages {
padding: 0px 10px; padding: 0px 10px;
background: #fff; background: #fff;
@ -367,8 +448,8 @@ div.messages {
} }
div.messages li, div.messages ul { div.messages li, div.messages ul {
padding: 15px 0 5px 5px; padding: 10px 0 0 5px;
margin: -15px 0 0 0; margin: -10px 0 0 0;
} }
div.messages span.error { div.messages span.error {
@ -397,17 +478,18 @@ h1 {
h2 { h2 {
font-size: 14pt; font-size: 14pt;
padding: 0px 10px 10px 10px; padding: 0px 10px 10px 10px;
border-bottom: 5px solid #bbf; border-bottom: 3px solid #aaf;
border-top: 0px solid #bbf; border-top: 0px solid #aaf;
letter-spacing: 0.04em; letter-spacing: 0.04em;
} }
h3 { h3 {
font-size: 12pt; font-size: 12pt;
padding: 0 10px 10px 10px; padding: 0 10px 10px 10px;
border-bottom: 5px solid #bbf; border-bottom: 3px solid #aaf;
border-top: 0px solid #bbf; border-top: 0px solid #aaf;
letter-spacing: 0.04em; letter-spacing: 0.04em;
margin-bottom: 10px;
} }
.proxyfooter{ .proxyfooter{
@ -417,7 +499,7 @@ h3 {
table { table {
border-collapse: collapse; border-collapse: collapse;
border: 5px solid #bbf; border: 1px solid #bbf;
margin: 0 0 5px 0; margin: 0 0 5px 0;
cell-padding: 1px; cell-padding: 1px;
font-size: 7.5pt; font-size: 7.5pt;
@ -442,7 +524,7 @@ th {
background-color: #fff; background-color: #fff;
padding: 8px 2px; padding: 8px 2px;
text-align: center; text-align: center;
border-bottom: 1px solid #88f; border-bottom: 1px solid #bbf;
} }
tt { tt {
@ -466,11 +548,11 @@ tr:nth-child(odd) {
} }
hr { hr {
color: #bbf; color: #aaf;
background: #bbf; background: #aaf;
height: 5px; height: 3px;
border: 0px solid #bbf; border: 0px solid #aaf;
margin: 5px 0; margin: 3px 0;
} }
.statusnotes { .statusnotes {
@ -484,6 +566,58 @@ hr {
border-top: 0; border-top: 0;
padding: 4px 0 2px 0; padding: 4px 0 2px 0;
} }
div.joblog {
margin: 10px 0;
line-height: 130% !important;
}
div.joblog:li {
word-wrap: break-word !important;
text-align: justify !important;
line-height: 80% !important;
}
div.joblog:ul {
word-wrap: break-word !important;
text-align: justify;
}
div.joblog li:first-child {
margin-top: -10px;
}
div.joblog li:last-child {
margin-bottom: -10px;
}
div.joblog form:first-child {
margin-top: 10px;
}
div.joblog table {
margin-top: 15px;
}
div.joblog p {
line-height: 130%;
}
div.joblog h3 {
margin: 10px 0 20px 0;
}
div.joblog h3:first-child {
margin: 5px 0 15px 0;
}
div.joblog hr {
margin: 15px 0 15px;
}
div.joblog ol {
margin-bottom: 0px;
}
input { input {
margin: 3px 5px 3px 0; margin: 3px 5px 3px 0;
@ -512,13 +646,14 @@ p {
.formaction { .formaction {
text-align: right; text-align: right;
margin: -10px -5px;
} }
.langbox { .langbox {
margin: 20px -15px 0px 5px; margin: 10px -20px 0px 5px;
color: #001; color: #001;
font-size: 7pt; font-size: 7pt;
width: 180px; width: 220px;
text-align: center; text-align: center;
float: right; float: right;
valign: middle; valign: middle;
@ -528,6 +663,16 @@ p {
padding: 0 2px; /* Ignored by IE8 */ padding: 0 2px; /* Ignored by IE8 */
} }
.links {
padding-bottom: -2px;
text-align: justify;
margin-top: 5px !important;
}
.links li {
list-style-image: url("../images/link.png") !important;
}
a:link{ a:link{
color: #006; color: #006;
text-decoration: none; text-decoration: none;
@ -565,7 +710,7 @@ tt {
} }
.tablefooter { .tablefooter {
border: 1px solid #88f; border: 1px solid #bbf;
} }
.tablefooter tr, .tablefooter td { .tablefooter tr, .tablefooter td {
@ -575,15 +720,17 @@ tt {
line-height: 150%; line-height: 150%;
word-wrap: nowrap; word-wrap: nowrap;
padding: 8px 1px; padding: 8px 1px;
border-top: 2px solid #bbf;
} }
.tidylist { .tidylist {
text-align: justify; text-align: justify;
padding-right: 30px; padding-right: 30px;
margin-right: 20px;
} }
div.graphspanel { div.graphspanel {
padding: 20px 10px; padding: 15px 5px 20px 5px;
margin: -20px; margin: -20px;
background: #ddf url('images/lightbluetile.png'); background: #ddf url('images/lightbluetile.png');
-moz-border-radius: 4px; -moz-border-radius: 4px;
@ -595,11 +742,12 @@ div.graphspanel {
} }
div.graphspanel img { div.graphspanel img {
border: 1px solid #99f; border: 1px solid #77f;
padding: 2px; padding: 2px;
margin: 6px; margin: 6px;
background: #ddf; background: #ccf;
-moz-box-shadow: inset 0px 0px 1px 1px #99f; -moz-box-shadow: inset 0px 0px 0px 0px #002;
opacity: 0.9;
} }
div.graphspanel img:hover { div.graphspanel img:hover {
@ -609,17 +757,19 @@ div.graphspanel img:hover {
text-align: center !important; text-align: center !important;
background: #001; background: #001;
-moz-box-shadow: inset 0px 0px 2px 1px #f60; -moz-box-shadow: inset 0px 0px 2px 1px #f60;
opacity: 1;
} }
div.graphspanel hr { div.graphspanel hr {
margin: 20px 0; margin: 10px 0;
} }
div.graphspanel form { div.graphspanel form:last-child {
text-align: left; text-align: left;
margin: 0 20px; margin: 0 20px;
} }
div.graphspanel h3 { div.graphspanel h3 {
text-align: left; text-align: left;
margin: 10px 20px 10px 20px;
} }

View File

@ -0,0 +1,786 @@
/* Optimised for less capable browsers and system specifications */
body {
margin: 2px 0 0 2px;
padding: 0;
text-align: left;
background: #bbf;
color: #000;
font: 9pt/140% Verdana, Tahoma, Helvetica, sans-serif;
}
.hide {
display: none;
}
img {
border: none;
}
pre {
overflow: auto;
font-size: 9pt !important;
width: 95%;
padding-top: 10px;
}
div.logo {
float: left;
position-relative: top 20px ;
width: 200px;
margin: 0 0 0 20px;
padding: 10px 5px;
text-align: center;
border: 5px solid #ddf;
background-color: #eef;
-moz-border-radius: 15px;
-moz-box-shadow: inset 0px 0px 0px 2px #99f;
-khtml-border-radius: 15px;
-khtml-box-shadow: inset 0px 0px 0px 2px #99f;
}
div.logo hr {
color: #ddf;
background: #ddf;
height: 5px;
border: 0px solid #ddf;
margin: 8px -3px;
}
div.logo a:link, div.logo a:visited {
text-shadow: 1px 1px 1px rgba(0, 0, 32, 0.5);
}
div.logo a:active {
text-shadow: 1px 1px 1px rgba(255, 96, 0, 0.7);
color: #f60;
}
div.logo a:hover {
text-shadow: 1px 1px 1px rgba(128, 0, 0, 0.7);
color: #900;
}
div.warning {
margin: 20px 20px 10px 260px;
padding: 0px 20px 20px 75px;
background: #ffd;
border: 5px solid #fb7;
text-align: left;
color: inherit;
background-image:url("../images/itoopie_sm.png");
background-position: 12px center;
background-repeat:no-repeat;
-moz-border-radius: 15px;
-moz-box-shadow: inset 0px 0px 0px 2px #f60;
-kthml-border-radius: 15px;
-khtml-box-shadow: inset 0px 0px 0px 2px #f60;
}
div.warning a:link {
color: #f60;
text-shadow: 1px 1px 1px rgba(255, 96, 0, 0.5);
}
div.warning a:visited{
color: #f90;
}
div.warning a:hover{
color: #d30;
text-shadow: 1px 1px 1px rgba(255, 96, 0, 0.7);
}
div.warning a:active{
color: #900;
}
div.warning hr {
color: #fb7;
background: #fb7;
height: 5px;
border: 0px solid #fb7;
margin: 5px 0;
}
/* console error messages */
div.sorry {
padding: 20px;
background: #ddf;
margin: -2px 1px 0 195px;
border: 5px solid #bbf;
text-align: justify;
-moz-box-shadow: inset 0px 0px 0px 1px #d00;
word-wrap: break-word;
font-weight: bold;
color: #001;
}
div.sorry hr {
color: #001;
background: #001;
height: 1px;
border: 1px solid #001;
margin: 10px 0;
}
div.toolbar {
margin: 0em 0em 2em 0em;
font-weight: bold;
display: none !important;
}
div.routersummaryouter {
float: left;
width: 200px;
margin: 0;
padding: 0;
border: 0;
clear: left; /* fixes a bug in Opera */
}
div.routersummary {
background: #ddf;
width: 185px;
color: inherit;
margin: 0;
padding: 10px 1px 7px 1px;
text-align: center !important;
border: 5px solid #bbf;
font-size: 9pt;
word-wrap: break-word;
font: 9pt/125%;
-moz-box-shadow: inset 0px 0px 0px 1px #99f;
}
div.routersummary input[type=text] {
text-align: right !important;
}
div.routersummary hr {
color: #eef;
background: #eef;
height: 2px;
border-bottom: 1px solid #eef;
margin: 8px 1px 7px 1px;
-moz-box-shadow: inset 0px 1px 1px 1px #99f;
}
div.routersummary h3 {
border: 0px solid #f00;
font-size: 12pt;
letter-spacing: 0.05em;
margin: -7px 1px -7px 1px;
padding: 1px 0;
background: #c5d5fb;
text-transform: uppercase;
}
div.routersummary h4 {
border: 0px solid #f00;
border-bottom: 0 !important;
font-size: 10pt;
letter-spacing: 0.05em;
margin: -7px 1px -7px 1px !important;
padding: 1px 3px;
background: #c1d1f7;
text-transform: capitalize;
text-decoration: none !important;
color: #2b2;
}
div.routersummary table {
border: 0;
text-align: center !important;
margin: -5px 4px -5px 3px;
width: 180px !important;
overflow: hidden;
font-size: 9pt;
padding: 0 -10px;
background-image: none !important;
background-color: transparent !important;
}
div.routersummary tr {
background-image: none !important;
background-color: transparent !important;
border: 0 !important;
}
div.tunnels table{
margin: 0 !important;
}
.tunnels tr {
padding: 2px 0 !important;
margin-left: -7px !important;
}
div.routersummary form {
margin-top: -6px !important;
margin-bottom: -4px !important;
}
div.refresh {
margin-top: 10px !important;
margin-bottom: 10px !important;
padding: 2px 0 !important;
}
div.routersummary p {
padding: 0;
}
div.routersummary a:link, div.routersummary a:visited {
text-shadow: 1px 1px 1px rgba(0, 0, 32, 0.3);
}
div.routersummary a:hover {
text-shadow: 1px 1px 1px rgba(255, 96, 0, 0.7);
color: #f60;
}
div.routersummary td {
padding: 0 4px;
background-image: none !important;
border: 0 !important;
}
div.warning h3 {
border-bottom: 5px solid #fb7;
padding-bottom: 10px;
}
div.main {
margin: 0px 0px 0px 195px;
padding: 15px 15px 10px 15px;
background: #eef;
border: 5px solid #bbf;
border-top: 0;
text-align: left;
color: #001;
min-width: 570px;
-moz-box-shadow: inset 0px 0px 0px 1px #99f;
}
div.main ul {
margin: -10px 0 -10px -10px;
}
div.main li {
padding: 0 0 5px 0;
list-style: square;
word-wrap: break-word;
margin-right: 20px;
}
div.main li:first-child {
padding-top: 15px;
}
div.main hr:last-child {
margin: 15px 0 10px 0;
}
div.main textarea {
width: 98% !important;
margin: 2px 0 2px 5px;
min-height: 96px;
}
div.main h2 {
margin-top: 20px;
margin-bottom: -5px;
}
div.welcome {
margin-top: 5px;
}
div.main h2:first-child, div.main h3:first-child {
margin-top: 0px;
margin-bottom: -5px;
}
div.wideload h2 {
margin-bottom: 0px !important;
}
div.wideload h3:first-child {
margin-top: 0 !important;
}
div.wideload h3 {
margin-top: 15px !important;
margin-bottom: 0px !important;
}
div.wideload p !important {
margin-top: 5px;
}
div.news {
margin: -5px 0px 0 195px;
padding: -10px 0px 8px 0px;
background: #ffffc0;
border: 5px solid #bbf;
text-align: right;
color: #770;
min-width: 600px;
padding-bottom: 8px;
padding-left: 10px;
padding-right: 10px;
-moz-box-shadow: inset 0px 0px 0px 1px #99f;
font-size: 7pt;
}
/* convert the list entry to our title */
div.news li {
text-align: justify;
list-style: none;
margin: 15px 15px -10px -20px;
padding: 0px 0 15px 0;
border-bottom: 2px dotted #cc7;
border-top: 0px solid #cc7;
padding: 3px 5px 5px 0;
font-size: 10pt;
color: #540;
}
div.news p {
color: #330;
font-size: 9pt;
margin-bottom: -10px;
}
/*
div.news p:first-child {
padding-top: 15px !important;
}
div.news p:nth-child(2n) {
padding-top: 15px !important;
}
*/
div.news p:last-child {
margin-bottom: 10px;
}
div.news a:link {
color: #663;
text-shadow: 1px 1px 1px rgba(128, 128, 48, 0.3);
}
div.news a:visited {
color: #773 !important;
text-shadow: 1px 1px 1px rgba(128, 128, 48, 0.3);
}
div.news hr {
color: #cc7;
background: #cc7;
height: 1px;
border: 0px solid #cccc77;
margin: 2px 0 0 0;
}
div.confignav {
padding: 12px 0 15px 0;
background: #cfc;
margin: -20px -20px 0 -20px;
border: 5px solid #bbf;
-moz-box-shadow: inset 0px 0px 0px 1px #99f;
}
div.configure {
margin: 1px -20px 0 -20px;
padding: 0px 20px 0px 20px;
}
div.configure hr {
margin: 15px 0;
}
div.configure table {
font-size: 9pt;
font-weight: bold;
border: 1px solid #bbf;
}
div.configure tr, div.configure td {
padding: 10px 2px;
}
div.configure tr {
-moz-box-shadow: inset 0px 0px 1px 0px #bbf;
}
div.configure li:first-child, div.main li:first-child {
margin-top: -10px;
}
div.configure li:last-child {
margin-bottom: -5px;
}
div.configure h2:first-child {
margin-top: 15px;
}
.topshimten {
margin-top: 15px;
margin-bottom: 15px;
}
div.messages {
padding: 0px 10px;
background: #fff;
border: 5px solid #bbf;
border-right: 0;
margin: -5px -15px 10px -20px;
text-align: center;
font-size: 9pt;
font-weight: bold;
color: #474;
-moz-box-shadow: inset 0px 0px 0px 1px #99f;
}
div.messages li, div.messages ul {
padding: 10px 0 0 5px;
margin: -10px 0 0 0;
}
div.messages span.error {
color: #d00000;
}
div.messages span.notice {
font-style: italic;
}
h1 {
font-size: 18pt;
text-shadow: 1px 1px 1px rgba(0, 0, 32, 0.7);
text-align: center;
border: 5px solid #bbf;
padding: 13px 10px 12px 10px;
margin: 0 0px 0 195px;
line-height: 93%;
text-transform: uppercase;
letter-spacing: 0.3em;
background: #fff;
min-width: 600px;
-moz-box-shadow: inset 0px 0px 0px 1px #99f;
}
h2 {
font-size: 14pt;
padding: 0px 10px 10px 10px;
border-bottom: 3px solid #aaf;
border-top: 0px solid #aaf;
letter-spacing: 0.04em;
}
h3 {
font-size: 12pt;
font-family:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
padding: 0 10px 10px 10px;
border-bottom: 3px solid #aaf;
border-top: 0px solid #aaf;
letter-spacing: 0.04em;
margin-bottom: 10px;
}
.proxyfooter{
font-size: 7pt;
display: none !important;
}
table {
border-collapse: collapse;
border: 1px solid #bbf;
margin: 0 0 5px 0;
cell-padding: 1px;
font-size: 9pt;
background: #fff;
width: 100%;
}
table hr {
padding: 0px 0;
color: #bbf;
background: #bbf;
border: 0px solid #bbf;
margin: 0px -5px;
height: 1px;
}
table tt {
font-size: 9pt;
}
th {
background-color: #fff;
padding: 8px 2px;
text-align: center;
border-bottom: 1px solid #bbf;
}
tt {
font-size: 9pt;
}
tt, pre {
font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
}
td {
padding: 4px;
}
tr:nth-child(even) {
background-color: #eef;
}
tr:nth-child(odd) {
background-color: #ddf;
}
hr {
color: #aaf;
background: #aaf;
height: 3px;
border: 0px solid #aaf;
margin: 3px 0;
}
.statusnotes {
font-style: italic;
font-size: 9pt;
color: #001;
text-align: center;
margin: -7px 0 7px 0;
background: #bbf;
border: 5px solid #bbf;
border-top: 0;
padding: 4px 0 2px 0;
}
div.joblog {
margin: 10px 0;
line-height: 130% !important;
}
div.joblog:li {
word-wrap: break-word !important;
text-align: justify !important;
line-height: 80% !important;
}
div.joblog:ul {
word-wrap: break-word !important;
text-align: justify;
}
div.joblog li:first-child {
margin-top: -10px;
}
div.joblog li:last-child {
margin-bottom: -10px;
}
div.joblog form:first-child {
margin-top: 10px;
}
div.joblog table {
margin-top: 15px;
}
div.joblog p {
line-height: 130%;
}
div.joblog h3 {
margin: 10px 0 10px 0;
}
div.joblog h3:first-child {
margin: 5px 0 15px 0;
}
div.joblog hr {
margin: 15px 0 15px;
}
div.joblog ol {
margin-bottom: 0px;
}
input {
margin: 3px 5px 3px 0;
vertical-align: middle;
}
input[type=text] {
margin: 3px 5px 3px 5px;
vertical-align: middle;
}
select {
margin: 3px 5px 3px 5px;
vertical-align: middle;
}
submit {
margin: 3px 5px 3px 5px;
padding: 2px 0;
font: 9pt/140% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
}
table td b{
font-weight:normal;
}
i {
font-weight:normal;
font-size:10pt;
font-family:"<22><><EFBFBD><EFBFBD>";
}
p {
padding: 5px 20px 0px 20px;
text-align: justify;
}
.formaction {
text-align: right;
margin: -10px -5px;
}
.langbox {
margin: 10px -20px 0px 5px;
color: #001;
font-size: 7pt;
width: 220px;
text-align: center;
float: right;
valign: middle;
}
.langbox img {
padding: 0 2px; /* Ignored by IE8 */
}
.links {
padding-bottom: -2px;
text-align: justify;
margin-top: 5px !important;
}
.links li {
list-style-image: url("../images/link.png") !important;
}
a{
white-space:nowrap;
}
a:link{
color: #006;
text-decoration: none;
}
a:visited{
color: #448;
text-decoration: none;
}
a:hover{
color: #f60;
text-decoration: underline;
}
a:active{
color: #f93;
text-decoration: underline;
font-weight: bold;
}
pre {
font-size: 9pt;
margin: 0px 20px;
}
tt {
font-size: 9pt;
font-weight: bold;
color: darkgreen;
}
.tablefooter {
border: 1px solid #bbf;
}
.tablefooter tr, .tablefooter td {
background: #bbf;
font-size: 9pt;
font-weight: bold;
line-height: 150%;
word-wrap: nowrap;
padding: 8px 1px;
border-top: 2px solid #bbf;
}
.tidylist {
text-align: justify;
padding-right: 30px;
margin-right: 20px;
}
div.graphspanel {
padding: 15px 5px 20px 5px;
margin: -20px;
background: #ddf url('images/lightbluetile.png');
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
border: 5px solid #bbf;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
text-align: center !important;
}
div.graphspanel img {
border: 1px solid #77f;
padding: 2px;
margin: 6px;
background: #ccf;
-moz-box-shadow: inset 0px 0px 0px 0px #002;
opacity: 0.9;
}
div.graphspanel img:hover {
border: 1px solid #003;
padding: 2px;
margin: 6px;
text-align: center !important;
background: #001;
-moz-box-shadow: inset 0px 0px 2px 1px #f60;
opacity: 1;
}
div.graphspanel hr {
margin: 10px 0;
}
div.graphspanel form:last-child {
text-align: left;
margin: 0 20px;
}
div.graphspanel h3 {
text-align: left;
margin: 10px 20px 10px 20px;
}

View File

@ -124,10 +124,10 @@ div.routersummary hr {
div.routersummary h3 { div.routersummary h3 {
border: 0; border: 0;
font-size: 10pt; font-size: 9.5pt;
letter-spacing: 0.04em; letter-spacing: 0.04em;
margin: -7px -9px -10px -9px; margin: -7px -9px -8px -9px;
padding: 3px 0px 5px 0px; padding: 2px 0 3px 0 !important;
background: #007; background: #007;
text-transform: uppercase; text-transform: uppercase;
-moz-border-radius: 0; -moz-border-radius: 0;
@ -143,7 +143,7 @@ div.routersummary h4 {
font-size: 8.5pt; font-size: 8.5pt;
letter-spacing: 0.03em; letter-spacing: 0.03em;
margin: -7px -9px -10px -9px !important; margin: -7px -9px -10px -9px !important;
padding: 2px 3px 5px 3px; padding: 1px 3px 4px 3px;
background: #005; background: #005;
text-transform: capitalize; text-transform: capitalize;
text-decoration: none !important; text-decoration: none !important;
@ -154,11 +154,11 @@ div.routersummary h4 {
div.routersummary table { div.routersummary table {
border: 0; border: 0;
text-align: center !important; text-align: center !important;
margin: -1px -4px -4px -4px; margin: -5px -4px -5px -5px !important;
width: 185px !important; width: 185px !important;
overflow: hidden; overflow: hidden;
font-size: 8pt; font-size: 8pt;
padding: 0px -10px; padding: 0 -10px;
background-image: none !important; background-image: none !important;
background-color: transparent !important; background-color: transparent !important;
} }
@ -170,13 +170,23 @@ div.routersummary tr {
} }
div.routersummary form { div.routersummary form {
margin-top: 8px; margin: -6px 0 -7px;
}
div.routersummary form:first-child {
margin: 6px 0 -4px 0 !important;
} }
div.routersummary p { div.routersummary p {
padding: 0; padding: 0;
} }
div.refresh {
margin-top: -10px !important;
margin-bottom: -4px !important;
padding: 2px 0 0px 0 !important;
}
div.routersummary a:link, div.routersummary a:visited { div.routersummary a:link, div.routersummary a:visited {
text-shadow: 0px 0px 1px rgba(192, 192, 255, 0.5); text-shadow: 0px 0px 1px rgba(192, 192, 255, 0.5);
} }
@ -187,20 +197,27 @@ div.routersummary a:hover {
} }
div.routersummary td { div.routersummary td {
padding: 2px 4px; padding: 0px 2px 0px 2px;
background-image: none !important; background-image: none !important;
border: 0 !important; border: 0 !important;
} }
div routersummary hr:last-child {
div.routersummary tr:nth-child(even) { margin-top: 5px;
background-color: #f60; margin-bottom: -5px !important;
background-image: none !important;
} }
div.routersummarytr:nth-child(odd) { div.tunnels {
background-color: #f00; padding-top: 3px !important;
background-image: none !important; margin-left: -2px;
}
div.tunnels table {
margin: -3px 0 !important;
}
div.tunnels td {
padding: 1px 2px 1px 2px;
} }
div.warning { div.warning {
@ -214,8 +231,8 @@ div.warning {
-khtml-border-radius: 4px; -khtml-border-radius: 4px;
border-radius: 4px; border-radius: 4px;
text-align: justify; text-align: justify;
background-image:url("images/errortriangle.png"); background-image:url("../images/itoopie_sm.png");
background-position:15px center; background-position:10px center;
background-repeat:no-repeat; background-repeat:no-repeat;
-moz-box-shadow: inset 0px 0px 0px 1px #f00; -moz-box-shadow: inset 0px 0px 0px 1px #f00;
-khtml-box-shadow: inset 0px 0px 0px 1px #f00; -khtml-box-shadow: inset 0px 0px 0px 1px #f00;
@ -269,16 +286,17 @@ div.main textarea {
div.news { div.news {
margin: 15px 15px 15px 220px; margin: 15px 15px 15px 220px;
padding: 20px 30px 20px 30px; padding: 5px 30px 10px 30px;
border: 1px solid #99f; border: 1px solid #99f;
background: #004; background: #004;
background-image: -moz-linear-gradient(top, bottom, from(#003), to(#005), color-stop(30%, #003), color-stop(100%, #001)); background-image: -moz-linear-gradient(top, bottom, from(#003), to(#005), color-stop(30%, #003), color-stop(100%, #001));
/* background: #003 url("images/darkbluetile.png");*/ /* background: #003 url("images/darkbluetile.png");*/
color: #eef; color: #aaf;
border-radius: 4px; border-radius: 4px;
-moz-border-radius: 4px; -moz-border-radius: 4px;
-khtml-border-radius: 4px; -khtml-border-radius: 4px;
text-align: justify; font-size: 7.5pt;
text-align: right;
-moz-box-shadow: inset 0px 0px 1px 0px #eef; -moz-box-shadow: inset 0px 0px 1px 0px #eef;
-khtml-box-shadow: inset 0px 0px 1px 0px #eef; -khtml-box-shadow: inset 0px 0px 1px 0px #eef;
box-shadow: inset 0px 0px 1px 0px #eef; box-shadow: inset 0px 0px 1px 0px #eef;
@ -287,12 +305,34 @@ div.news {
div.news li { div.news li {
text-align: justify; text-align: justify;
list-style: url('images/info_dark.png'); list-style: url('images/info_dark.png');
margin: 0 10px 0 30px; margin: 0 10px 0 20px;
padding: 5px; padding: 5px 5px 5px 0;
vertical-align: middle; vertical-align: middle;
word-wrap: break-word; word-wrap: break-word;
color: #99f;
} }
div.news h4 {
border-bottom: 1px;
border-bottom-style: dotted;
border-bottom-color: #99f;
padding: 0 0 5px 0;
margin: 5px 0 10px 0;
font-size: 10pt;
opacity: 0.8;
text-transform: capitalize;
}
div.news p {
margin-top: -5px;
font-size: 8.5pt;
color: #eef;
}
div.news hr {
margin: -2px 0 5px 0;
}
div.confignav { div.confignav {
padding: 15px 10px !important; padding: 15px 10px !important;
margin: 15px 0; margin: 15px 0;
@ -301,7 +341,7 @@ div.confignav {
-khtml-border-radius: 4px; -khtml-border-radius: 4px;
border-radius: 4px; border-radius: 4px;
border: 1px solid #99f; border: 1px solid #99f;
font-size: 10pt !important; font-size: 9.5pt !important;
font-weight: bold !important; font-weight: bold !important;
line-height: 160% !important; line-height: 160% !important;
-moz-box-shadow: inset 0px 0px 1px 0px #eef; -moz-box-shadow: inset 0px 0px 1px 0px #eef;
@ -486,6 +526,14 @@ div.main li {
text-align: justify !important; text-align: justify !important;
} }
.tidylist:first-child {
padding-top: 5px;
}
.tidylist:last-child {
padding-bottom: 5px;
}
ol { ol {
display: inline; display: inline;
margin: 1px 0 0 0; margin: 1px 0 0 0;
@ -493,7 +541,7 @@ ol {
} }
ul { ul {
display: inline; /* display: inline; */
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
@ -511,7 +559,7 @@ a:link, h2 a:link{
} }
a:visited{ a:visited{
color: #7bb; color: #77f;
text-decoration: none; text-decoration: none;
font-weight: bold; font-weight: bold;
word-wrap: break-word; word-wrap: break-word;
@ -525,10 +573,14 @@ a:hover{
} }
.links { .links {
list-style-image: url("images/link_dark.png"); padding-bottom: -2px;
margin: 0 5px 0 0px;
padding: 0px 5px;
text-align: justify; text-align: justify;
margin-top: 10px;
margin-bottom: -10px;
}
.links li {
list-style-image: url("../images/link_dark.png") !important;
} }
p { p {
@ -574,7 +626,7 @@ h2 {
-moz-border-radius: 4px; -moz-border-radius: 4px;
-khtml-border-radius: 4px; -khtml-border-radius: 4px;
vertical-align: middle; vertical-align: middle;
margin: 15px 0 15px 0 !important; margin: 15px 0 12px 0 !important;
-moz-box-shadow: inset 0px 0px 1px 0px #eef; -moz-box-shadow: inset 0px 0px 1px 0px #eef;
-khtml-box-shadow: inset 0px 0px 1px 0px #eef; -khtml-box-shadow: inset 0px 0px 1px 0px #eef;
box-shadow: inset 0px 0px 1px 0px #eef; box-shadow: inset 0px 0px 1px 0px #eef;
@ -594,12 +646,11 @@ h3 {
border: 1px solid #99f; border: 1px solid #99f;
border-left: 5px solid #99f; border-left: 5px solid #99f;
padding: 3px 5px 3px 5px; padding: 3px 5px 3px 5px;
/* margin: 20px 0 15px 0;*/ margin: 12px 0 10px 0;
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
-moz-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0;
-khtml-border-radius: 0 4px 4px 0; -khtml-border-radius: 0 4px 4px 0;
background: #002; background: #002;
/* background: url(images/lightbluebg.png);*/
} }
h4 { h4 {
@ -676,6 +727,11 @@ hr {
margin: 10px 0; margin: 10px 0;
} }
hr:last-child {
margin-top: 20px;
margin-bottom: 20px;
}
sidebarlogo { sidebarlogo {
text-align: center; text-align: center;
} }
@ -792,8 +848,8 @@ form {}
color: #eef; color: #eef;
text-align: center; text-align: center;
border: 1px solid #99f !important; border: 1px solid #99f !important;
border-top: 0px !important; /* border-top: 0px !important;*/
margin: -5px 0 5px 0; margin: -3px 0 5px 0;
padding: 7px; padding: 7px;
background: #004; background: #004;
-moz-box-shadow: inset 0px 0px 0px 1px #009; -moz-box-shadow: inset 0px 0px 0px 1px #009;
@ -801,7 +857,7 @@ form {}
box-shadow: inset 0px 0px 0px 1px #009; box-shadow: inset 0px 0px 0px 1px #009;
} }
.joblog { div.joblog {
margin: 15px 0 15px 0; margin: 15px 0 15px 0;
padding: 5px 20px 10px 20px !important; padding: 5px 20px 10px 20px !important;
border: 1px solid #99f; border: 1px solid #99f;
@ -811,7 +867,7 @@ form {}
border-radius: 4px; border-radius: 4px;
-moz-border-radius: 4px; -moz-border-radius: 4px;
-khtml-border-radius: 4px; -khtml-border-radius: 4px;
text-align: justify; text-align: justify !important;
-moz-box-shadow: inset 0px 0px 1px 0px #eef; -moz-box-shadow: inset 0px 0px 1px 0px #eef;
-khtml-box-shadow: inset 0px 0px 1px 0px #eef; -khtml-box-shadow: inset 0px 0px 1px 0px #eef;
box-shadow: inset 0px 0px 1px 0px #eef; box-shadow: inset 0px 0px 1px 0px #eef;
@ -820,18 +876,35 @@ form {}
div.joblog:li { div.joblog:li {
word-wrap: break-word !important; word-wrap: break-word !important;
text-align: justify; text-align: justify !important;
line-height: 80% !important;
} }
.joblog:ul { div.joblog:ul {
word-wrap: break-word !important; word-wrap: break-word !important;
text-align: justify; text-align: justify;
} }
div.joblog li:first-child {
margin-top: 10px;
}
div.joblog li:last-child {
margin-bottom: 0;
}
div.joblog form:first-child { div.joblog form:first-child {
margin-top: 10px; margin-top: 10px;
} }
div.joblog table {
margin-top: 15px;
}
div.joblog p {
line-height: 130%;
}
.smallhead { .smallhead {
font-size: 7pt font-size: 7pt
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 620 B

View File

@ -119,12 +119,17 @@ div.routersummary hr {
-moz-box-shadow: inset 0px 1px 1px 1px #001; -moz-box-shadow: inset 0px 1px 1px 1px #001;
} }
div routersummary hr:last-child {
margin-top: 5px;
margin-bottom: -5px !important;
}
div.routersummary h3 { div.routersummary h3 {
border: 0; border: 0;
font-size: 10pt; font-size: 9.5pt;
letter-spacing: 0.04em; letter-spacing: 0.04em;
margin: -7px -9px -7px -9px; margin: -7px -9px -7px -9px;
padding: 5px 0px 5px 0px; padding: 1px 0;
background: #c5d5fb; background: #c5d5fb;
text-transform: uppercase; text-transform: uppercase;
background-image: -moz-linear-gradient(top, bottom, from(#ddf), to(#c5d5fb), color-stop(25%, #c5d5fb), color-stop(100%, #ddf)); background-image: -moz-linear-gradient(top, bottom, from(#ddf), to(#c5d5fb), color-stop(25%, #c5d5fb), color-stop(100%, #ddf));
@ -136,7 +141,7 @@ div.routersummary h4 {
font-size: 8.5pt; font-size: 8.5pt;
letter-spacing: 0.02em; letter-spacing: 0.02em;
margin: -7px -9px -7px -9px !important; margin: -7px -9px -7px -9px !important;
padding: 2px 3px 3px 3px; padding: 0px 3px 1px 3px;
background: #c1d1f7; background: #c1d1f7;
text-transform: capitalize; text-transform: capitalize;
text-decoration: none !important; text-decoration: none !important;
@ -146,7 +151,7 @@ div.routersummary h4 {
div.routersummary table { div.routersummary table {
border: 0; border: 0;
text-align: center !important; text-align: center !important;
margin: -2px -4px; margin: -7px -5px -6px -5px;
width: 185px !important; width: 185px !important;
overflow: hidden; overflow: hidden;
font-size: 8pt; font-size: 8pt;
@ -161,14 +166,36 @@ div.routersummary tr {
border: 0 !important; border: 0 !important;
} }
div.tunnels {
margin-top: 6px !important;
margin-left: -2px !important;
margin-bottom: 3px !important;
padding-top: 3px !important;
}
.tunnels tr {
padding: 4px 0 !important;
}
div.routersummary form { div.routersummary form {
margin-top: 8px; margin: -6px 0 -5px 0;
}
div.routersummary form:last-child {
margin: 0 !important;
padding: 0;
} }
div.routersummary p { div.routersummary p {
padding: 0; padding: 0;
} }
div.refresh {
margin-top: -6px !important;
margin-bottom: 0px !important;
padding: 2px 0 0px 0 !important;
}
div.routersummary a:link, div.routersummary a:visited { div.routersummary a:link, div.routersummary a:visited {
text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.5); text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.5);
} }
@ -179,26 +206,16 @@ div.routersummary a:hover {
} }
div.routersummary td { div.routersummary td {
padding: 2px 4px; padding: 1px 3px;
background-image: none !important; background-image: none !important;
border: 0 !important; border: 0 !important;
} }
div.routersummary tr:nth-child(even) {
background-color: #f60;
background-image: none !important;
}
div.routersummarytr:nth-child(odd) {
background-color: #f00;
background-image: none !important;
}
/* proxy error messages */ /* proxy error messages */
div.warning { div.warning {
margin: 5px 20px 10px 240px; margin: 5px 20px 10px 240px;
padding: 0px 25px 20px 75px; padding: 5px 25px 20px 75px;
background: #fff; background: #fff;
border: 1px solid #002; border: 1px solid #002;
text-align: left; text-align: left;
@ -207,11 +224,12 @@ div.warning {
-khtml-border-radius: 4px; -khtml-border-radius: 4px;
border-radius: 4px; border-radius: 4px;
text-align: justify; text-align: justify;
background-image:url("images/errortriangle.png"); background-image:url("../images/itoopie_sm.png");
background-position:15px center; background-position:10px center;
background-repeat:no-repeat; background-repeat:no-repeat;
-moz-box-shadow: inset 0px 0px 1px 0px #d00; -moz-box-shadow: inset 0px 0px 1px 0px #d00;
word-wrap: break-word; word-wrap: break-word;
min-width: 400px;
} }
/* console error messages */ /* console error messages */
@ -260,6 +278,10 @@ div.main hr, hr {
margin: 10px 0; margin: 10px 0;
} }
hr:last-child {
margin-top: 20px !important;
}
div.main textarea { div.main textarea {
background: #eef; background: #eef;
color: #001; color: #001;
@ -268,18 +290,24 @@ div.main textarea {
div.news { div.news {
margin: 0px 15px 10px 220px; margin: 0px 15px 10px 220px;
padding: 10px 25px 15px 25px; padding: 10px 25px 7px 25px;
border: 1px solid #003; border: 1px solid #003;
color: #410; color: #410;
border-radius: 4px; border-radius: 4px;
-moz-border-radius: 4px; -moz-border-radius: 4px;
-khtml-border-radius: 4px; -khtml-border-radius: 4px;
text-align: justify !important; text-align: right !important;
font-size: 7pt;
line-height: 140%; line-height: 140%;
background: #fea url('images/sandtile.png'); background: #fea url('images/sandtile.png');
-moz-box-shadow: inset 0px 0px 1px 0px #410; -moz-box-shadow: inset 0px 0px 1px 0px #410;
} }
div.news p {
font-size: 8.5pt;
text-align: justify !important;
}
div.news a:link{ div.news a:link{
color: #630; color: #630;
text-decoration: none; text-decoration: none;
@ -303,13 +331,13 @@ div.news hr{
background: #410; background: #410;
height: 1px; height: 1px;
border: 0px solid #410; border: 0px solid #410;
margin: 10px 0; margin: 10px 0 5px;
} }
div.news li { div.news li {
text-align: justify; text-align: justify;
list-style: none; list-style: none;
margin: 0 0 20px 0 !important; margin: 10px 0 20px 0 !important;
padding: 5px 0; padding: 5px 0;
vertical-align: bottom; vertical-align: bottom;
border: 1px solid #410; border: 1px solid #410;
@ -320,7 +348,7 @@ div.news li {
-khtml-border-radius: 0 4px 4px 0; -khtml-border-radius: 0 4px 4px 0;
background: #fb1; background: #fb1;
font-size: 10pt; font-size: 10pt;
opacity: 0.8; opacity: 0.7;
} }
div.news h4 { div.news h4 {
@ -338,7 +366,7 @@ div.confignav {
-khtml-border-radius: 4px; -khtml-border-radius: 4px;
border-radius: 4px; border-radius: 4px;
border: 1px solid #000022; border: 1px solid #000022;
font-size: 10pt !important; font-size: 9.5pt !important;
font-weight: bold !important; font-weight: bold !important;
line-height: 160% !important; line-height: 160% !important;
-moz-box-shadow: inset 0px 0px 1px 0px #002; -moz-box-shadow: inset 0px 0px 1px 0px #002;
@ -508,10 +536,21 @@ div.main li {
word-wrap: break-word; word-wrap: break-word;
} }
div.main li:first-child {
margin-top: 10px;
}
.tidylist { .tidylist {
text-align: justify !important; text-align: justify !important;
} }
.tidylist li:first-child {
margin-top: -10px !important;
}
.tidylist:last-child {
padding-bottom: 5px;
}
ol { ol {
margin: 1px 0 0 5px; margin: 1px 0 0 5px;
@ -520,7 +559,7 @@ ol {
ul { ul {
display: inline; display: inline;
margin: 5px 0; margin: 0;
padding: 0; padding: 0;
} }
@ -530,14 +569,14 @@ code {
} }
a:link{ a:link{
color: #007; color: #008;
text-decoration: none; text-decoration: none;
font-weight: bold; font-weight: bold;
word-wrap: break-word; word-wrap: break-word;
} }
a:visited{ a:visited{
color: #606; color: #004;
text-decoration: none; text-decoration: none;
font-weight: bold; font-weight: bold;
} }
@ -554,10 +593,23 @@ a:active{
font-weight: bold; font-weight: bold;
} }
.links { .links li {
list-style: url(images/link.png); list-style: url(../images/link.png) !important;
margin: 10px 5px 0 0px; padding-bottom: -2px;
padding: 10px 20px 10px 30px; text-align: justify;
line-height: 120% !important;
}
.links li:first-child {
padding-top: 0 !important;
}
.links li:last-child {
padding-bottom: -15px !important;
}
.links ul {
margin-top: -5px !important;
} }
p { p {
@ -595,7 +647,7 @@ h2 {
border-radius: 4px; border-radius: 4px;
-moz-border-radius: 4px; -moz-border-radius: 4px;
-khtml-border-radius: 4px; -khtml-border-radius: 4px;
margin: 15px 0px 15px 0 !important; margin: 15px 0px 12px 0 !important;
-moz-box-shadow: inset 0px 0px 1px 0px #002; -moz-box-shadow: inset 0px 0px 1px 0px #002;
word-wrap: break-word; word-wrap: break-word;
} }
@ -612,7 +664,7 @@ h3 {
border: 1px solid #002; border: 1px solid #002;
border-left: 5px solid #002; border-left: 5px solid #002;
padding: 3px 5px 3px 5px; padding: 3px 5px 3px 5px;
margin: 15px 0 15px 0; margin: 12px 0 12px 0;
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
-moz-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0;
-khtml-border-radius: 0 4px 4px 0; -khtml-border-radius: 0 4px 4px 0;
@ -803,7 +855,7 @@ form {}
background: #bcf; background: #bcf;
-moz-box-shadow: inset 0px 0px 2px 1px #eef; -moz-box-shadow: inset 0px 0px 2px 1px #eef;
} }
/*
.joblog { .joblog {
margin: 15px 0; margin: 15px 0;
padding: 10px 20px !important; padding: 10px 20px !important;
@ -830,6 +882,59 @@ form {}
.joblog table { .joblog table {
margin-top: 10px; margin-top: 10px;
} }
*/
div.joblog {
margin: 15px 0;
padding: 10px 20px !important;
border: 1px solid #003;
background-color: #004;
background: #ddf url('images/lightbluetile.png');
color: #001;
border-radius: 4px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
text-align: justify;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
overflow: auto;
}
div.joblog:ul {
word-wrap: break-word !important;
text-align: justify;
line-height: 100% !important;
}
div.joblog:li {
word-wrap: break-word !important;
text-align: justify !important;
line-height: 80% !important;
padding: 0;
}
div.joblog li:first-child {
margin-top: 10px;
}
div.joblog li:last-child {
margin-bottom: 5px;
}
div.joblog form:first-child {
margin-top: 10px;
}
div.joblog table {
margin-top: 15px;
}
div.joblog p {
line-height: 130%;
}
div.joblog hr {
margin: 15px 0;
}
.smallhead { .smallhead {
font-size: 7pt font-size: 7pt

View File

@ -9,14 +9,21 @@
publicurl="http://dev.i2p.net/pipermail/i2p/2005-July/000826.html" publicurl="http://dev.i2p.net/pipermail/i2p/2005-July/000826.html"
anonlogs="http://i2p/Nf3ab-ZFkmI-LyMt7GjgT-jfvZ3zKDl0L96pmGQXF1B82W2Bfjf0n7~288vafocjFLnQnVcmZd~-p0-Oolfo9aW2Rm-AhyqxnxyLlPBqGxsJBXjPhm1JBT4Ia8FB-VXt0BuY0fMKdAfWwN61-tj4zIcQWRxv3DFquwEf035K~Ra4SWOqiuJgTRJu7~o~DzHVljVgWIzwf8Z84cz0X33pv-mdG~~y0Bsc2qJVnYwjjR178YMcRSmNE0FVMcs6f17c6zqhMw-11qjKpY~EJfHYCx4lBWF37CD0obbWqTNUIbL~78vxqZRT3dgAgnLixog9nqTO-0Rh~NpVUZnoUi7fNR~awW5U3Cf7rU7nNEKKobLue78hjvRcWn7upHUF45QqTDuaM3yZa7OsjbcH-I909DOub2Q0Dno6vIwuA7yrysccN1sbnkwZbKlf4T6~iDdhaSLJd97QCyPOlbyUfYy9QLNExlRqKgNVJcMJRrIual~Lb1CLbnzt0uvobM57UpqSAAAA/meeting141" anonlogs="http://i2p/Nf3ab-ZFkmI-LyMt7GjgT-jfvZ3zKDl0L96pmGQXF1B82W2Bfjf0n7~288vafocjFLnQnVcmZd~-p0-Oolfo9aW2Rm-AhyqxnxyLlPBqGxsJBXjPhm1JBT4Ia8FB-VXt0BuY0fMKdAfWwN61-tj4zIcQWRxv3DFquwEf035K~Ra4SWOqiuJgTRJu7~o~DzHVljVgWIzwf8Z84cz0X33pv-mdG~~y0Bsc2qJVnYwjjR178YMcRSmNE0FVMcs6f17c6zqhMw-11qjKpY~EJfHYCx4lBWF37CD0obbWqTNUIbL~78vxqZRT3dgAgnLixog9nqTO-0Rh~NpVUZnoUi7fNR~awW5U3Cf7rU7nNEKKobLue78hjvRcWn7upHUF45QqTDuaM3yZa7OsjbcH-I909DOub2Q0Dno6vIwuA7yrysccN1sbnkwZbKlf4T6~iDdhaSLJd97QCyPOlbyUfYy9QLNExlRqKgNVJcMJRrIual~Lb1CLbnzt0uvobM57UpqSAAAA/meeting141"
publiclogs="http://www.i2p.net/meeting141" /> publiclogs="http://www.i2p.net/meeting141" />
<h4><ul><li>2009-10-18: Website &amp; Console Translation - Help Needed!</li></ul></h4>
<p> <p>
Shortly after the release of <a href="http://www.i2p2.i2p/release-0.7.7.html">I2P version 0.7.7</a>, we are happy to announce the first stage of the <a href="http://i2p2.i2p/index_zh.html">Chinese translation</a> of the <a href="http://www.i2p2.i2p">website</a>, thanks to our new Chinese translator, "walking". This we hope is the start of a bigger trend to get the website and console translated into YOUR language. Please visit the #i2p chat channel on <a href="irc://irc.freenode.net/i2p"> Freenode IRC</a> or anonymously over I2P via <a href="irc://127.0.0.1:6668/i2p">localhost:6668</a> if you wish to help. We appeal at this time especially to French and Spanish translators, since we seem to have plenty of you running I2P!</p>
<h4><ul><li>2009-10-12: <b>0.7.7 <a href="http://www.i2p2.i2p/release-0.7.7.html">Released</a></b></li></ul></h4> <h4><ul><li>2009-10-12: <b>0.7.7 <a href="http://www.i2p2.i2p/release-0.7.7.html">Released</a></b></li></ul></h4>
</p><p> <p>
I2P version 0.7.7 contains several anonymity improvements. I2P version 0.7.7 contains several anonymity improvements.
The use of session keys for crypto was completely reworked, The use of session keys for crypto was completely reworked,
and I2PSnark now uses its own tunnels for tracker communication. and <a href="/i2psnark">I2PSnark</a> now uses its own tunnels for tracker communication.
Work continues on improving the router console, Work continues on improving the router console,
including conformance to HTML standards and better support of UTF-8. including conformance to HTML standards, better support of UTF-8, and dr|z3d's ongoing
<a href="/configui.jsp">console theme</a> wizardry, including an extensively
reworked "classic" theme optimized for less capable computers or browsers.
</p><p> </p><p>
Work also continues on increasing speeds, both by reducing the Work also continues on increasing speeds, both by reducing the
number of session keys transferred, by improving the number of session keys transferred, by improving the

View File

@ -6,7 +6,7 @@
<a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a>
<a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div> </div>
<h2>Welcome to I2P!</h2> <div class="welcome"><h2>Welcome to I2P!</h2></div>
<p>If you've just started I2P, the Active: numbers on the left should start to <p>If you've just started I2P, the Active: numbers on the left should start to
grow over the next few minutes and you'll see a "shared clients" local destination grow over the next few minutes and you'll see a "shared clients" local destination
listed on the left (if not, <a href="#trouble">see below</a>). Once those show listed on the left (if not, <a href="#trouble">see below</a>). Once those show
@ -14,7 +14,7 @@ up, you can:</p>
<ul> <ul>
<li><b>browse "eepsites"</b> - on I2P there are anonymously hosted websites <li><b>browse "eepsites"</b> - on I2P there are anonymously hosted websites
- tell your browser to use the <b>HTTP proxy at 127.0.0.1 port 4444</b>, then - tell your browser to use the <b>HTTP proxy at 127.0.0.1 port 4444</b>, then
browse to an eepsite:<br /> browse to an eepsite:<br>
<ul class="links"> <ul class="links">
<li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a> <li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a>
and <a href="http://perv.i2p/stats.cgi">perv.i2p</a>: sites tracking active and <a href="http://perv.i2p/stats.cgi">perv.i2p</a>: sites tracking active
@ -37,7 +37,7 @@ up, you can:</p>
</ul><br> </ul><br>
There are many more eepsites - just follow the links from the ones you see, There are many more eepsites - just follow the links from the ones you see,
bookmark your favorites, and visit them often! bookmark your favorites, and visit them often!
</li><br> </li>
<ul> <ul>
<li class="tidylist"><b>browse the web</b> - there is currently an HTTP <li class="tidylist"><b>browse the web</b> - there is currently an HTTP
"outproxy" in I2P hooked up to your own HTTP proxy on port 4444 - simply "outproxy" in I2P hooked up to your own HTTP proxy on port 4444 - simply

View File

@ -1,22 +1,22 @@
<div align="right"> <div align="right">
<div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div> <div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div> </div>
<h2>Willkommen zu I2P!</h2> <div class="welcome"><h2>Willkommen zu I2P!</h2></div>
<p>Wenn Du gerade I2P gestartet hast, sollten die "Active:" Zahlen links in den n&auml;chsten paar Minuten anwachsen und Du siehst dann dort ein "shared clients" lokales Ziel gelistet (falls nicht, <a href="#trouble">siehe Unten</a>). Sobald das erscheint, kannst Du:</p> <p>Wenn Du gerade I2P gestartet hast, sollten die "Active:" Zahlen links in den n&auml;chsten paar Minuten anwachsen und Du siehst dann dort ein "shared clients" lokales Ziel gelistet (falls nicht, <a href="#trouble">siehe Unten</a>). Sobald das erscheint, kannst Du:</p>
<ul> <ul>
<li class="tidylist"><b>"Eepsites" besuchen</b> - In I2P sind anonym gehostete Websites - <li><b>"Eepsites" besuchen</b> - In I2P sind anonym gehostete Websites -
Stelle Deinen Browser so ein, &uuml;ber den <b>HTTP proxy: 127.0.0.1 port 4444</b> zu surfen, dann besuche eine Eepsite:<br /> Stelle Deinen Browser so ein, &uuml;ber den <b>HTTP proxy: 127.0.0.1 port 4444</b> zu surfen, dann besuche eine Eepsite:<br>
<ul class="links"> <ul class="links">
<li class="tidylist"><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a> und <li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a> und
<a href="http://perv.i2p/stats.cgi">perv.i2p</a>: Webseiten, die aktive Eepsites beobachten</li> <a href="http://perv.i2p/stats.cgi">perv.i2p</a>: Webseiten, die aktive Eepsites beobachten</li>
<li class="tidylist"><a href="http://forum.i2p/">forum.i2p</a>: Eine sichere und anonyme Verbindung zu <a href="http://forum.i2p2.de/">forum.i2p2.de</a></li> <li><a href="http://forum.i2p/">forum.i2p</a>: Eine sichere und anonyme Verbindung zu <a href="http://forum.i2p2.de/">forum.i2p2.de</a></li>
<li class="tidylist"><a href="http://www.i2p2.i2p/index_de.html">www.i2p2.i2p</a> und der Spiegel <a href="http://i2p-projekt.i2p/index_de.html">i2p-projekt.i2p</a>: <li><a href="http://www.i2p2.i2p/index_de.html">www.i2p2.i2p</a> und der Spiegel <a href="http://i2p-projekt.i2p/index_de.html">i2p-projekt.i2p</a>:
Sichere und anonyme Verbindung zu <a href="http://www.i2p2.de/index_de.html">www.i2p2.de</a></li> Sichere und anonyme Verbindung zu <a href="http://www.i2p2.de/index_de.html">www.i2p2.de</a></li>
<li class="tidylist"><a href="http://eepsites.i2p/">eepsites.i2p</a>: Eine anonym gehostete Suchseite f&uuml;r Eepsites</li> <li><a href="http://eepsites.i2p/">eepsites.i2p</a>: Eine anonym gehostete Suchseite f&uuml;r Eepsites</li>
<li class="tidylist"><a href="http://ugha.i2p/">ugha.i2p</a>: Ugha's Eepsite, ein &ouml;ffentliches Wiki mit vielen Links</li> <li><a href="http://ugha.i2p/">ugha.i2p</a>: Ugha's Eepsite, ein &ouml;ffentliches Wiki mit vielen Links</li>
<li class="tidylist"><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a>: Freenet proxy</li> <li><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a>: Freenet proxy</li>
<li class="tidylist"><a href="http://echelon.i2p">echelon.i2p</a>: Software Archive und Informationen zu I2P</li> <li><a href="http://echelon.i2p">echelon.i2p</a>: Software Archive und Informationen zu I2P</li>
<li class="tidylist"><a href="http://paste.i2p2.i2p">paste.i2p2.i2p</a>: Anonymer Pastebin</li> <li><a href="http://paste.i2p2.i2p">paste.i2p2.i2p</a>: Anonymer Pastebin</li>
</ul><br /> </ul><br />
Es gibt viel mehr Eepsites - folge einfach den Links die du findest, Es gibt viel mehr Eepsites - folge einfach den Links die du findest,
bookmarke Deine Favoriten und besuche sie oft!</li><br /> bookmarke Deine Favoriten und besuche sie oft!</li><br />

View File

@ -1,24 +1,24 @@
<div align="right"> <div align="right">
<div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div> <div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div> </div>
<h2>Bienvenu a I2P!</h2> <div class="welcome"><h2>Bienvenu a I2P!</h2></div>
<p>Si vous venez juste de lancer I2P, les chiffres sur la gauche &agrave; cot&eacute; de Active devraient commencer &agrave; augmenter dans les prochaines minutes et vous verrez un "Shared client" en destination locale list&eacute;s sur la gauche (si non, <a href=#trouble>voir plus bas</a>). Une fois qu'ils apparaissent, vous pouvez:</p> <p>Si vous venez juste de lancer I2P, les chiffres sur la gauche &agrave; cot&eacute; de Active devraient commencer &agrave; augmenter dans les prochaines minutes et vous verrez un "Shared client" en destination locale list&eacute;s sur la gauche (si non, <a href=#trouble>voir plus bas</a>). Une fois qu'ils apparaissent, vous pouvez:</p>
<ul> <ul>
<li class="tidylist"><b>parcourir les "eepsites"</b> - sur I2P il y a des sites web anonymes h&eacute;berg&eacute;s - dites &agrave; votre navigateur d'utiliser <b>le HTTP proxy a l'adresse 127.0.0.1 port 4444</b>, ensuite vous pouvez naviguer sur les eepsites:<br /> <li><b>parcourir les "eepsites"</b> - sur I2P il y a des sites web anonymes h&eacute;berg&eacute;s - dites &agrave; votre navigateur d'utiliser <b>le HTTP proxy a l'adresse 127.0.0.1 port 4444</b>, ensuite vous pouvez naviguer sur les eepsites:<br>
<ul class="links"> <ul class="links">
<li class="tidylist"><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a> et <li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a> et
<a href="http://perv.i2p/stats.cgi">perv.i2p</a>: listent les eepsites actifs</li> <a href="http://perv.i2p/stats.cgi">perv.i2p</a>: listent les eepsites actifs</li>
<li class="tidylist"><a href="http://forum.i2p/">forum.i2p</a>: une connection s&eacute;curis&eacute;e et anonyme vers <a href="http://forum.i2p2.de/">forum.i2p2.de</a></li> <li><a href="http://forum.i2p/">forum.i2p</a>: une connection s&eacute;curis&eacute;e et anonyme vers <a href="http://forum.i2p2.de/">forum.i2p2.de</a></li>
<li class="tidylist"><a href="http://www.i2p2.i2p/">www.i2p2.i2p</a> et le miroir <a href="http://i2p-projekt.i2p">i2p-projekt.i2p</a>: <li><a href="http://www.i2p2.i2p/">www.i2p2.i2p</a> et le miroir <a href="http://i2p-projekt.i2p">i2p-projekt.i2p</a>:
connections s&eacute;curis&eacute;es et anonyme vers <a href="http://www.i2p2.de/">www.i2p2.de</a></li> connections s&eacute;curis&eacute;es et anonyme vers <a href="http://www.i2p2.de/">www.i2p2.de</a></li>
<li class="tidylist"><a href="http://eepsites.i2p/">eepsites.i2p</a>: un moteur de recherche d'eepsites</li> <li><a href="http://eepsites.i2p/">eepsites.i2p</a>: un moteur de recherche d'eepsites</li>
<li class="tidylist"><a href="http://ugha.i2p/">ugha.i2p</a>: l'eepsite d'ugha, un wiki que chaucun peut &eacute;diter ainsi que</li> <li><a href="http://ugha.i2p/">ugha.i2p</a>: l'eepsite d'ugha, un wiki que chaucun peut &eacute;diter ainsi que</li>
<li class="tidylist"><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a>: un proxy Freenet 0.5</li> <li><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a>: un proxy Freenet 0.5</li>
<li class="tidylist"><a href="http://echelon.i2p">echelon.i2p</a>: archive</li> <li><a href="http://echelon.i2p">echelon.i2p</a>: archive</li>
<li class="tidylist"><a href="http://paste.i2p2.i2p">paste.i2p2.i2p</a>: Pastebin anonyme</li> <li><a href="http://paste.i2p2.i2p">paste.i2p2.i2p</a>: Pastebin anonyme</li>
<br /> <br>
</ul> </ul>
Il y a bien plus d'eepsites - suivez juste les liens au d&eacute;part de ceux sur lesquels vous &ecirc;tes, mettez-les dans vos favoris et visitez-les souvent!</li><br /> Il y a bien plus d'eepsites - suivez juste les liens au d&eacute;part de ceux sur lesquels vous &ecirc;tes, mettez-les dans vos favoris et visitez-les souvent!</li><br>
<li class="tidylist"><b>Parcourez le web</b> - Il y a pour l'instant un outproxy HTTP sur I2P attach&eacute; &agrave; votre propre proxy HTTP sur le port 4444 - vous devez simplement configurer le proxy de votre navigateur pour l'utiliser (comme expliqu&eacute; ci-dessus) et aller sur n'importe quel URL normale - vos requ&ecirc;tes seront relay&eacute;es par le r&eacute;seau i2p.</li> <li class="tidylist"><b>Parcourez le web</b> - Il y a pour l'instant un outproxy HTTP sur I2P attach&eacute; &agrave; votre propre proxy HTTP sur le port 4444 - vous devez simplement configurer le proxy de votre navigateur pour l'utiliser (comme expliqu&eacute; ci-dessus) et aller sur n'importe quel URL normale - vos requ&ecirc;tes seront relay&eacute;es par le r&eacute;seau i2p.</li>
<li class="tidylist"><b>Transfer de fichiers</b> - Il y a un <a href="i2psnark/">port</a> int&eacute;gr&eacute; de <a href="http://www.klomp.org/snark/">Snark</a> le client <a href="http://www.bittorrent.com/">BitTorrent</a>.</li> <li class="tidylist"><b>Transfer de fichiers</b> - Il y a un <a href="i2psnark/">port</a> int&eacute;gr&eacute; de <a href="http://www.klomp.org/snark/">Snark</a> le client <a href="http://www.bittorrent.com/">BitTorrent</a>.</li>
<li class="tidylist"><b>Utiliser le service de mail anonyme</b> - Postman a cr&eacute;&eacute; un syt&egrave;me de mails compatible avec un client de messagerie normal (POP3 / SMTP) qui permet d'envoyer des emails autant au sein d'i2p que vers et &agrave; partir de l'internet normal! Cr&eacute;ez-vous un compte &agrave; <a href="http://hq.postman.i2p/">hq.postman.i2p</a>. <li class="tidylist"><b>Utiliser le service de mail anonyme</b> - Postman a cr&eacute;&eacute; un syt&egrave;me de mails compatible avec un client de messagerie normal (POP3 / SMTP) qui permet d'envoyer des emails autant au sein d'i2p que vers et &agrave; partir de l'internet normal! Cr&eacute;ez-vous un compte &agrave; <a href="http://hq.postman.i2p/">hq.postman.i2p</a>.

View File

@ -1,11 +1,11 @@
<div align="right"> <div align="right">
<div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div> <div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div> </div>
<h2>Welkom bij I2P!</h2> <div class="welcome"><h2>Welkom bij I2P!</h2></div>
<p>Als je net I2P opgestart hebt, zullen de 'Active:' (Actieve) getallen aan de linkerkant in de komende minuten stijgen, en je zal een "Shared clients" (Gedeelde clients) lokale bestemming zien staan aan de linkerkant (indien niet, <a href=#trouble>zie hieronder</a>). Eenmaal je deze bestemming ziet, kan je:</p> <p>Als je net I2P opgestart hebt, zullen de 'Active:' (Actieve) getallen aan de linkerkant in de komende minuten stijgen, en je zal een "Shared clients" (Gedeelde clients) lokale bestemming zien staan aan de linkerkant (indien niet, <a href=#trouble>zie hieronder</a>). Eenmaal je deze bestemming ziet, kan je:</p>
<ul> <ul>
<li><b>surfen naar "eepsites"</b> - op I2P zijn er anonieme websites - stel je browser in om de <b>HTTP proxy op 127.0.0.1, poort 4444</b> te gebruiken, en surf vervolgens naar een eepsite:<br /><br /> <li><b>surfen naar "eepsites"</b> - op I2P zijn er anonieme websites - stel je browser in om de <b>HTTP proxy op 127.0.0.1, poort 4444</b> te gebruiken, en surf vervolgens naar een eepsite:<br>
<ul> <ul class="links">
<li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a> en <li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a> en
<a href="http://perv.i2p/stats.cgi">perv.i2p</a>: sites die lijsten bijhouden van actieve eepsites</li> <a href="http://perv.i2p/stats.cgi">perv.i2p</a>: sites die lijsten bijhouden van actieve eepsites</li>
<li><a href="http://forum.i2p/">forum.i2p</a>: een beveiligde en anonieme verbinding naar <a href="http://forum.i2p2.de/">forum.i2p2.de</a></li> <li><a href="http://forum.i2p/">forum.i2p</a>: een beveiligde en anonieme verbinding naar <a href="http://forum.i2p2.de/">forum.i2p2.de</a></li>
@ -16,23 +16,23 @@
<li><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a>: proxy naar het Freenet-netwerk</li> <li><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a>: proxy naar het Freenet-netwerk</li>
<li><a href="http://echelon.i2p">echelon.i2p</a>: software <li><a href="http://echelon.i2p">echelon.i2p</a>: software
archive and information for I2P</li> archive and information for I2P</li>
<li class="tidylist"><a href="http://paste.i2p2.i2p">paste.i2p2.i2p</a>: anonieme Pastebin</li> <li><a href="http://paste.i2p2.i2p">paste.i2p2.i2p</a>: anonieme Pastebin</li>
</ul><br /> </ul><br>
Er zijn nog veel meer eepsites - volg gewoon de links vanaf diegene die je ziet. Voeg de beste toe aan je favorieten, en bezoek ze regelmatig!</li><br /> Er zijn nog veel meer eepsites - volg gewoon de links vanaf diegene die je ziet. Voeg de beste toe aan je favorieten, en bezoek ze regelmatig!</li>
<li><b>surfen op het web</b> - er is momenteel een HTTP "outproxy" in I2P, vastgehaakt aan je eigen HTTP proxy op poort 4444 - stel eenvoudigweg de proxy van je browser in om deze te gebruiken (zoals hierboven voor eepsites) en ga naar een willekeurige normale URL - je verzoeken voor websites worden rondgestuurd via het I2P-network.</li> <ul><li class="tidylist"><b>surfen op het web</b> - er is momenteel een HTTP "outproxy" in I2P, vastgehaakt aan je eigen HTTP proxy op poort 4444 - stel eenvoudigweg de proxy van je browser in om deze te gebruiken (zoals hierboven voor eepsites) en ga naar een willekeurige normale URL - je verzoeken voor websites worden rondgestuurd via het I2P-network.</li>
<li><b>bestanden versturen</b> - er is een geintegreerde <a href="i2psnark/">aangepaste versie</a> van de <li class="tidylist"><b>bestanden versturen</b> - er is een geintegreerde <a href="i2psnark/">aangepaste versie</a> van de
<a href="http://www.klomp.org/snark/">Snark</a> <a href="http://www.bittorrent.com/">BitTorrent</a> <a href="http://www.klomp.org/snark/">Snark</a> <a href="http://www.bittorrent.com/">BitTorrent</a>
client.</li> client.</li>
<li><b>anonieme e-mail gebruiken</b> - postman heeft een e-mailsysteem gecreerd, compatibel met normale e-mail <li class="tidylist"><b>anonieme e-mail gebruiken</b> - postman heeft een e-mailsysteem gecreerd, compatibel met normale e-mail
clients (POP3 / SMTP) dat toelaat e-mail binnen I2P evenals e-mail van en naar het gewone internet te versturen. clients (POP3 / SMTP) dat toelaat e-mail binnen I2P evenals e-mail van en naar het gewone internet te versturen.
Maak je eigen account op <a href="http://hq.postman.i2p/">hq.postman.i2p</a>. Maak je eigen account op <a href="http://hq.postman.i2p/">hq.postman.i2p</a>.
In i2p zit een gebundelde <a href="/susimail/susimail">susimail</a>, In i2p zit een gebundelde <a href="/susimail/susimail">susimail</a>,
een webgebaseerde anonimiteits-georienteerde pop3/smtp-client ingesteld om postman zijn e-mailservices te gebruiken.</li> een webgebaseerde anonimiteits-georienteerde pop3/smtp-client ingesteld om postman zijn e-mailservices te gebruiken.</li>
<li><b>anoniem chatten</b> - start je eigen IRC-client op en verbind met <li class="tidylist"><b>anoniem chatten</b> - start je eigen IRC-client op en verbind met
de server op <b>127.0.0.1 poort 6668</b>. Dit wijst naar een of twee anoniem gehoste de server op <b>127.0.0.1 poort 6668</b>. Dit wijst naar een of twee anoniem gehoste
IRC servers, maar zowel jij als zei weten niet waar de andere is.</li> IRC servers, maar zowel jij als zei weten niet waar de andere is.</li>
<li><b>anoniem bloggen</b> - neem een kijkje bij <a href="http://syndie.i2p2.de/">Syndie</a></li> <li class="tidylist"><b>anoniem bloggen</b> - neem een kijkje bij <a href="http://syndie.i2p2.de/">Syndie</a></li>
<li>en veel meer</li> <li class="tidylist">en veel meer</li>
</ul> </ul>
<h2>Wil je je eigen eepsite?</h2> <h2>Wil je je eigen eepsite?</h2>

View File

@ -1,7 +1,7 @@
<div align="right"> <div align="right">
<div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div> <div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div> </div>
<h2>Welcome to I2P!</h2> <div class="welcome"><h2>Welcome to I2P!</h2></div>
<p>Om du just har startat I2P kommer de "Aktiva: #/#" b&ouml;rja &ouml;ka inom <p>Om du just har startat I2P kommer de "Aktiva: #/#" b&ouml;rja &ouml;ka inom
n&aring;gra f&aring; minuter och du kommer se en destination kallad "delade n&aring;gra f&aring; minuter och du kommer se en destination kallad "delade
klienter" p&aring; den v&auml;nstra listan (om inte <a href="#trouble">se klienter" p&aring; den v&auml;nstra listan (om inte <a href="#trouble">se
@ -9,7 +9,7 @@ nedan</a>). N&auml;r de syns kan du:</p>
<ul> <ul>
<li><b>surfa p&aring; "eepsidor"</b> - inom I2P finns det anonyma sajter - <li><b>surfa p&aring; "eepsidor"</b> - inom I2P finns det anonyma sajter -
st&auml;ll in din webbl&auml;sare till att anv&auml;nda <b>HTTP proxy vid st&auml;ll in din webbl&auml;sare till att anv&auml;nda <b>HTTP proxy vid
127.0.0.1 port 4444</b>, surfa sen till en eepsida:<br /> 127.0.0.1 port 4444</b>, surfa sen till en eepsida:<br>
<ul class="links"> <ul class="links">
<li><a <li><a
href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a> och href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a> och
@ -30,9 +30,9 @@ wiki som alla kan f&ouml;r&auml;ndra, inneh&aring;ller m&aring;nga l&auml;nkar</
Freenet proxy</li> Freenet proxy</li>
<li><a href="http://echelon.i2p">echelon.i2p</a>: programvaruförråd och information om I2P</li> <li><a href="http://echelon.i2p">echelon.i2p</a>: programvaruförråd och information om I2P</li>
<li><a href="http://paste.i2p2.i2p">paste.i2p2.i2p</a>: anonym och säker pastebin</li> <li><a href="http://paste.i2p2.i2p">paste.i2p2.i2p</a>: anonym och säker pastebin</li>
</ul><br /> </ul><br>
Det finns m&aring;nga fler eepsidor - f&ouml;lj bara l&auml;nkarna fr&aring;n dom du ser, Det finns m&aring;nga fler eepsidor - f&ouml;lj bara l&auml;nkarna fr&aring;n dom du ser,
spara dina favoriter och bes&ouml;k dom ofta!</li><br /> spara dina favoriter och bes&ouml;k dom ofta!</li><br>
<li><b>surfa p&aring; n&auml;tet</b> - det finns f&ouml;r n&auml;rvarande en "utproxy" i I2P <li><b>surfa p&aring; n&auml;tet</b> - det finns f&ouml;r n&auml;rvarande en "utproxy" i I2P
som &auml;r ansluten som &auml;r ansluten
till din egen HTTP proxt p&aring; port 4444 - st&auml;ll helt enkelt in din till din egen HTTP proxt p&aring; port 4444 - st&auml;ll helt enkelt in din

View File

@ -6,10 +6,10 @@
<a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a>
<a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div> </div>
<h2>欢迎使用 I2P!</h2> <div class="welcome"><h2>欢迎使用 I2P!</h2></div>
<p>如果 I2P 已经运行,未来的几分钟里控制台左侧的活动节点(Active)数量将会增加,并会出现名为共享客户端("shared clients") 的本地目标。(如果没有,请见 <a href="/i2p-zhcn/i2psrc/i2p.i2p/readme_zh.html#trouble">疑难解答</a>)。待出现以上消息后,您可以:</p> <p>如果 I2P 已经运行,未来的几分钟里控制台左侧的活动节点(Active)数量将会增加,并会出现名为共享客户端("shared clients") 的本地目标。(如果没有,请见 <a href="#trouble">疑难解答</a>)。待出现以上消息后,您可以:</p>
<ul> <ul>
<li><B>浏览 I2P 站点 "eepsites"</B> - I2P 网络内匿名运行的小站 - 您要首先设置浏览器的 <b>HTTP 代理</b> 为 127.0.0.1:4444 然后才能浏览 I2P 站点 - <ul> <li><B>浏览 I2P 站点 "eepsites"</B> - I2P 网络内匿名运行的小站 - 您要首先设置浏览器的 <b>HTTP 代理</b> 为 127.0.0.1:4444 然后才能浏览 I2P 站点 - <ul class="links">
<li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a><a href="http://perv.i2p/stats.cgi">perv.i2p</a>:&nbsp;这两个站点用于跟踪哪些 I2P 站点在线。</li> <li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a><a href="http://perv.i2p/stats.cgi">perv.i2p</a>:&nbsp;这两个站点用于跟踪哪些 I2P 站点在线。</li>
<li><a href="http://forum.i2p/">forum.i2p</a>:I2P官方论坛 <a href="http://forum.i2p2.de/">forum.i2p2.de</a>&nbsp;的匿名入口&nbsp;(个人的I2P站点会在论坛的EEPSITE讨论区发布)</li> <li><a href="http://forum.i2p/">forum.i2p</a>:I2P官方论坛 <a href="http://forum.i2p2.de/">forum.i2p2.de</a>&nbsp;的匿名入口&nbsp;(个人的I2P站点会在论坛的EEPSITE讨论区发布)</li>
<li><a href="http://www.i2p2.i2p/">www.i2p2.i2p</a> 与镜像 <a href="http://i2p-projekt.i2p/">i2p-projekt.i2p</a>:&nbsp;可以安全匿名的访问I2P官网 <a href="http://www.i2p2.de/">www.i2p2.de</a></li> <li><a href="http://www.i2p2.i2p/">www.i2p2.i2p</a> 与镜像 <a href="http://i2p-projekt.i2p/">i2p-projekt.i2p</a>:&nbsp;可以安全匿名的访问I2P官网 <a href="http://www.i2p2.de/">www.i2p2.de</a></li>
@ -21,7 +21,7 @@
</ul> <br> </ul> <br>
I2P网络中还有很多其他网站(EEPSITE) - 访问上面的网站你会找到更多,收藏你喜爱的 I2P 网站,别忘了常去看看!</li><br> I2P网络中还有很多其他网站(EEPSITE) - 访问上面的网站你会找到更多,收藏你喜爱的 I2P 网站,别忘了常去看看!</li><br>
<li><b>浏览 Web 网页</b> - 目前 IP2 网络中的出口代理("Outproxy")只有一个它以HTTP代理的形式挂接在本地计算机的4444端口上。- 将浏览器的代理设置指向为上述地址(127.0.0.1:4444)后,访问任何普通链接即可 - 您的HTTP请求将在 I2P 网络内部传递。</li> <li><b>浏览 Web 网页</b> - 目前 IP2 网络中的出口代理("Outproxy")只有一个它以HTTP代理的形式挂接在本地计算机的4444端口上。- 将浏览器的代理设置指向为上述地址(127.0.0.1:4444)后,访问任何普通链接即可 - 您的HTTP请求将在 I2P 网络内部传递。</li>
<li><b>文件交换</b> - I2P的其中一个本地&nbsp;<a href="/i2p-zhcn/i2psrc/i2p.i2p/i2psnark/">端口</a>&nbsp;用于内置的&nbsp;<a href="http://www.klomp.org/snark/">Snark</a> <a href="http://www.bittorrent.com/">BitTorrent</a> 客户端。</li> <li><b>文件交换</b> - I2P的其中一个本地&nbsp;<a href="/i2psnark">端口</a>&nbsp;用于内置的&nbsp;<a href="http://www.klomp.org/snark/">Snark</a> <a href="http://www.bittorrent.com/">BitTorrent</a> 客户端。</li>
<li><b>匿名电邮</b> - POSTMAN 建立了兼容普通邮件客户端 (POP3 / SMTP)的邮件系统,这个系统可以在 I2P 网络内部收发 Email 也可以收发来自外部 Internet 的邮件I2P的邮件帐户请到 <a href="http://hq.postman.i2p/">hq.postman.i2p</a> 申请。I2P中集成了Web界面的pop3/stmp邮件客户端 <a href="/susimail/susimail">SUSIMail</a>并已设置好使用POSTMAN 的邮件服务。</li> <li><b>匿名电邮</b> - POSTMAN 建立了兼容普通邮件客户端 (POP3 / SMTP)的邮件系统,这个系统可以在 I2P 网络内部收发 Email 也可以收发来自外部 Internet 的邮件I2P的邮件帐户请到 <a href="http://hq.postman.i2p/">hq.postman.i2p</a> 申请。I2P中集成了Web界面的pop3/stmp邮件客户端 <a href="/susimail/susimail">SUSIMail</a>并已设置好使用POSTMAN 的邮件服务。</li>
<li><b>匿名聊天</b> - 打开你的 IRC 聊天程序,连接至 <b>127.0.0.1:6668&nbsp;</b>即可访问I2P的匿名 IRC 服务器,但无论你还是服务器都不知道聊天的人在哪里。</li> <li><b>匿名聊天</b> - 打开你的 IRC 聊天程序,连接至 <b>127.0.0.1:6668&nbsp;</b>即可访问I2P的匿名 IRC 服务器,但无论你还是服务器都不知道聊天的人在哪里。</li>
<li><b>匿名博客</b> - 请访问 <a href="http://syndie.i2p2.de/">Syndie</a></li> <li><b>匿名博客</b> - 请访问 <a href="http://syndie.i2p2.de/">Syndie</a></li>

View File

@ -18,7 +18,7 @@ public class RouterVersion {
/** deprecated */ /** deprecated */
public final static String ID = "Monotone"; public final static String ID = "Monotone";
public final static String VERSION = CoreVersion.VERSION; public final static String VERSION = CoreVersion.VERSION;
public final static long BUILD = 0; public final static long BUILD = 6;
/** for example "-test" */ /** for example "-test" */
public final static String EXTRA = ""; public final static String EXTRA = "";
public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA; public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA;

View File

@ -642,11 +642,11 @@ public class NTCPTransport extends TransportImpl {
long totalRecv = 0; long totalRecv = 0;
StringBuilder buf = new StringBuilder(512); StringBuilder buf = new StringBuilder(512);
buf.append("<p><b id=\"ntcpcon\"><h3>NTCP connections: ").append(peers.size()); buf.append("<div class=\"wideload\"><h3 id=\"ntcpcon\">NTCP connections: ").append(peers.size());
buf.append(". Limit: ").append(getMaxConnections()); buf.append(". Limit: ").append(getMaxConnections());
buf.append(". Timeout: ").append(DataHelper.formatDuration(_pumper.getIdleTimeout())); buf.append(". Timeout: ").append(DataHelper.formatDuration(_pumper.getIdleTimeout()));
buf.append(".</b></h3>\n" + buf.append(".</h3>\n" +
"<div class=\"wideload\"><table>\n" + "<table>\n" +
"<tr><th><a href=\"#def.peer\">Peer</a></th>" + "<tr><th><a href=\"#def.peer\">Peer</a></th>" +
"<th>Dir</th>" + "<th>Dir</th>" +
"<th align=\"right\"><a href=\"#def.idle\">Idle</a></th>" + "<th align=\"right\"><a href=\"#def.idle\">Idle</a></th>" +
@ -730,7 +730,7 @@ public class NTCPTransport extends TransportImpl {
"</td></tr>\n"); "</td></tr>\n");
} }
buf.append("</table></div></p>\n"); buf.append("</table>\n");
out.write(buf.toString()); out.write(buf.toString());
buf.setLength(0); buf.setLength(0);
} }

View File

@ -1771,7 +1771,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
buf.append(". Limit: ").append(getMaxConnections()); buf.append(". Limit: ").append(getMaxConnections());
buf.append(". Timeout: ").append(DataHelper.formatDuration(_expireTimeout)); buf.append(". Timeout: ").append(DataHelper.formatDuration(_expireTimeout));
buf.append(".</h3>\n"); buf.append(".</h3>\n");
buf.append("<div class=\"wideload\"><table>\n"); buf.append("<table>\n");
buf.append("<tr><th class=\"smallhead\" nowrap><a href=\"#def.peer\">Peer</a>"); buf.append("<tr><th class=\"smallhead\" nowrap><a href=\"#def.peer\">Peer</a>");
if (sortFlags != FLAG_ALPHA) if (sortFlags != FLAG_ALPHA)
buf.append(" <a href=\"").append(urlBase).append("?sort=0\">V</a> "); buf.append(" <a href=\"").append(urlBase).append("?sort=0\">V</a> ");
@ -2002,7 +2002,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
buf.append(sendTotal).append("</b></td> <td align=\"center\"><b>").append(recvTotal).append("</b></td>\n"); buf.append(sendTotal).append("</b></td> <td align=\"center\"><b>").append(recvTotal).append("</b></td>\n");
buf.append(" <td align=\"center\"><b>").append(resentTotal); buf.append(" <td align=\"center\"><b>").append(resentTotal);
buf.append("</b></td> <td align=\"center\"><b>").append(dupRecvTotal).append("</b></td>\n"); buf.append("</b></td> <td align=\"center\"><b>").append(dupRecvTotal).append("</b></td>\n");
buf.append(" </tr></table></div></p><p>\n"); buf.append(" </tr></table></div>\n");
long bytesTransmitted = _context.bandwidthLimiter().getTotalAllocatedOutboundBytes(); long bytesTransmitted = _context.bandwidthLimiter().getTotalAllocatedOutboundBytes();
// NPE here early // NPE here early
double averagePacketSize = _context.statManager().getRate("udp.sendPacketSize").getLifetimeAverageValue(); double averagePacketSize = _context.statManager().getRate("udp.sendPacketSize").getLifetimeAverageValue();
@ -2011,7 +2011,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
double nondupSent = ((double)bytesTransmitted - ((double)resentTotal)*averagePacketSize); double nondupSent = ((double)bytesTransmitted - ((double)resentTotal)*averagePacketSize);
double bwResent = (nondupSent <= 0 ? 0d : ((((double)resentTotal)*averagePacketSize) / nondupSent)); double bwResent = (nondupSent <= 0 ? 0d : ((((double)resentTotal)*averagePacketSize) / nondupSent));
buf.append("<h3>Percentage of bytes retransmitted (lifetime): ").append(formatPct(bwResent)); buf.append("<h3>Percentage of bytes retransmitted (lifetime): ").append(formatPct(bwResent));
buf.append("</h3><i>(Includes retransmission required by packet loss)</i><br></p>\n"); buf.append("</h3><i>(Includes retransmission required by packet loss)</i>\n");
out.write(buf.toString()); out.write(buf.toString());
buf.setLength(0); buf.setLength(0);
out.write(KEY); out.write(KEY);
@ -2031,7 +2031,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
} }
private static final String KEY = "<h3>Definitions:</h3><div class=\"configure\">" + private static final String KEY = "<h3>Definitions:</h3><div class=\"configure\">" +
"<br><b id=\"def.peer\">Peer</b>: the remote peer.<br>\n" + "<p><b id=\"def.peer\">Peer</b>: the remote peer.<br>\n" +
"<b id=\"def.dir\">Dir</b>: v means they offer to introduce us, ^ means we offer to introduce them.<br>\n" + "<b id=\"def.dir\">Dir</b>: v means they offer to introduce us, ^ means we offer to introduce them.<br>\n" +
"<b id=\"def.idle\">Idle</b>: the idle time is how long since a packet has been received or sent.<br>\n" + "<b id=\"def.idle\">Idle</b>: the idle time is how long since a packet has been received or sent.<br>\n" +
"<b id=\"def.rate\">In/out</b>: the rates show a smoothed inbound and outbound transfer rate (KBytes per second).<br>\n" + "<b id=\"def.rate\">In/out</b>: the rates show a smoothed inbound and outbound transfer rate (KBytes per second).<br>\n" +
@ -2049,10 +2049,10 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
"<b id=\"def.send\">TX</b>: the number of packets sent to the peer.<br>\n" + "<b id=\"def.send\">TX</b>: the number of packets sent to the peer.<br>\n" +
"<b id=\"def.recv\">RX</b>: the number of packets received from the peer.<br>\n" + "<b id=\"def.recv\">RX</b>: the number of packets received from the peer.<br>\n" +
"<b id=\"def.resent\">ReTX</b>: the number of packets retransmitted to the peer.<br>\n" + "<b id=\"def.resent\">ReTX</b>: the number of packets retransmitted to the peer.<br>\n" +
"<b id=\"def.dupRecv\">DupRX</b>: the number of duplicate packets received from the peer." + "<b id=\"def.dupRecv\">DupRX</b>: the number of duplicate packets received from the peer.</p>" +
"</div>\n"; "</div>\n";
/** /*
* Cache the bid to reduce object churn * Cache the bid to reduce object churn
*/ */
private class SharedBid extends TransportBid { private class SharedBid extends TransportBid {