From 0bef85277e54e6f59dcb147bb2fb903a18e9fb32 Mon Sep 17 00:00:00 2001 From: zzz Date: Fri, 31 Jul 2009 02:36:15 +0000 Subject: [PATCH 01/23] try to automate the release process --- build.xml | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/build.xml b/build.xml index a831938ed..3fbb7ec51 100644 --- a/build.xml +++ b/build.xml @@ -571,4 +571,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 1cba7b8ec1e567141163d623ce5bc460ce68ae06 Mon Sep 17 00:00:00 2001 From: zzz Date: Fri, 31 Jul 2009 17:55:38 +0000 Subject: [PATCH 02/23] * Core: - Catch unzip fd leaks on error - Move 2 test classes out of the lib --- core/java/src/net/i2p/util/FileUtil.java | 10 +++++++--- core/java/{src => test}/net/i2p/crypto/SHA1Test.java | 0 core/java/{src => test}/net/i2p/stat/SizeTest.java | 0 3 files changed, 7 insertions(+), 3 deletions(-) rename core/java/{src => test}/net/i2p/crypto/SHA1Test.java (100%) rename core/java/{src => test}/net/i2p/stat/SizeTest.java (100%) diff --git a/core/java/src/net/i2p/util/FileUtil.java b/core/java/src/net/i2p/util/FileUtil.java index 2946cd09e..38073fd60 100644 --- a/core/java/src/net/i2p/util/FileUtil.java +++ b/core/java/src/net/i2p/util/FileUtil.java @@ -76,9 +76,10 @@ public class FileUtil { } public static boolean extractZip(File zipfile, File targetDir) { + ZipFile zip = null; try { byte buf[] = new byte[16*1024]; - ZipFile zip = new ZipFile(zipfile); + zip = new ZipFile(zipfile); Enumeration entries = zip.entries(); while (entries.hasMoreElements()) { ZipEntry entry = (ZipEntry)entries.nextElement(); @@ -124,13 +125,16 @@ public class FileUtil { } } } - zip.close(); return true; } catch (IOException ioe) { System.err.println("ERROR: Unable to extract the zip file"); ioe.printStackTrace(); return false; - } + } finally { + if (zip != null) { + try { zip.close(); } catch (IOException ioe) {} + } + } } /** diff --git a/core/java/src/net/i2p/crypto/SHA1Test.java b/core/java/test/net/i2p/crypto/SHA1Test.java similarity index 100% rename from core/java/src/net/i2p/crypto/SHA1Test.java rename to core/java/test/net/i2p/crypto/SHA1Test.java diff --git a/core/java/src/net/i2p/stat/SizeTest.java b/core/java/test/net/i2p/stat/SizeTest.java similarity index 100% rename from core/java/src/net/i2p/stat/SizeTest.java rename to core/java/test/net/i2p/stat/SizeTest.java From 4172ed21a93af6741e4330863a6bc24c890135a8 Mon Sep 17 00:00:00 2001 From: zzz Date: Fri, 31 Jul 2009 17:56:02 +0000 Subject: [PATCH 03/23] take jetty back out of the updater --- build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.xml b/build.xml index 3fbb7ec51..c77cfe0ac 100644 --- a/build.xml +++ b/build.xml @@ -205,7 +205,7 @@ - + From e1a5d5e19aade5e7361659f26bcfe80c5b0b64b2 Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 1 Aug 2009 14:43:04 +0000 Subject: [PATCH 04/23] post-release cleanup --- .../java/src/net/i2p/router/StatisticsManager.java | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/router/java/src/net/i2p/router/StatisticsManager.java b/router/java/src/net/i2p/router/StatisticsManager.java index a3c54458a..eb49ae002 100644 --- a/router/java/src/net/i2p/router/StatisticsManager.java +++ b/router/java/src/net/i2p/router/StatisticsManager.java @@ -139,18 +139,8 @@ public class StatisticsManager implements Service { //includeRate("tunnel.buildRequestTime", stats, new long[] { 10*60*1000 }); long rate = 60*60*1000; - boolean commentOutIn076 = RouterVersion.VERSION.equals("0.7.5"); - if (commentOutIn076) { - includeRate("tunnel.buildClientExpire", stats, new long[] { rate }); - includeRate("tunnel.buildClientReject", stats, new long[] { rate }); - includeRate("tunnel.buildClientSuccess", stats, new long[] { rate }); - includeRate("tunnel.buildExploratoryExpire", stats, new long[] { rate }); - includeRate("tunnel.buildExploratoryReject", stats, new long[] { rate }); - includeRate("tunnel.buildExploratorySuccess", stats, new long[] { rate }); - } else { - includeTunnelRates("Client", stats, rate); - includeTunnelRates("Exploratory", stats, rate); - } + includeTunnelRates("Client", stats, rate); + includeTunnelRates("Exploratory", stats, rate); //includeRate("tunnel.rejectTimeout", stats, new long[] { 10*60*1000 }); //includeRate("tunnel.rejectOverloaded", stats, new long[] { 10*60*1000 }); //includeRate("tunnel.acceptLoad", stats, new long[] { 10*60*1000 }); From a14ad423a64dffc9dd700a9ae9eb01b1ef1c77e1 Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 1 Aug 2009 17:22:57 +0000 Subject: [PATCH 05/23] formatDuration tweak --- core/java/src/net/i2p/data/DataHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/java/src/net/i2p/data/DataHelper.java b/core/java/src/net/i2p/data/DataHelper.java index b3806d1b9..56528a46b 100644 --- a/core/java/src/net/i2p/data/DataHelper.java +++ b/core/java/src/net/i2p/data/DataHelper.java @@ -871,7 +871,7 @@ public class DataHelper { public static String formatDuration(long ms) { if (ms < 5 * 1000) { return ms + "ms"; - } else if (ms < 5 * 60 * 1000) { + } else if (ms < 3 * 60 * 1000) { return (ms / 1000) + "s"; } else if (ms < 120 * 60 * 1000) { return (ms / (60 * 1000)) + "m"; From 13e8c956675601da9736435e246dececdbef1334 Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 1 Aug 2009 17:42:27 +0000 Subject: [PATCH 06/23] Hide update button when shutting down --- apps/routerconsole/jsp/summarynoframe.jsp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/routerconsole/jsp/summarynoframe.jsp b/apps/routerconsole/jsp/summarynoframe.jsp index 655741b83..633794bb6 100644 --- a/apps/routerconsole/jsp/summarynoframe.jsp +++ b/apps/routerconsole/jsp/summarynoframe.jsp @@ -54,8 +54,11 @@ if (helper.updateAvailable()) { // display all the time so we display the final failure message out.print("
" + update.getStatus()); - if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { - } else if(!update.isDone()) { + if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress"))) { + } else if((!update.isDone()) && + request.getParameter("action") == null && + request.getParameter("updateNonce") == null && + net.i2p.router.web.ConfigRestartBean.getRestartTimeRemaining() > 12*60*1000) { long nonce = new java.util.Random().nextLong(); String prev = System.getProperty("net.i2p.router.web.UpdateHandler.nonce"); if (prev != null) System.setProperty("net.i2p.router.web.UpdateHandler.noncePrev", prev); From 316c20ee4481069e1d183331d921f17ed5f48b6c Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 2 Aug 2009 11:54:14 +0000 Subject: [PATCH 07/23] Dont count yourself as a known peer --- .../java/src/net/i2p/router/web/SummaryHelper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java index f5bdd7342..390407f7c 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java @@ -90,7 +90,8 @@ public class SummaryHelper extends HelperBase { Boolean.valueOf(_context.getProperty("i2p.alwaysAllowReseed")).booleanValue()); } - public int getAllPeers() { return _context.netDb().getKnownRouters(); } + /** subtract one for ourselves, so if we know no other peers it displays zero */ + public int getAllPeers() { return Math.max(_context.netDb().getKnownRouters() - 1, 0); } public String getReachability() { if (_context.router().getUptime() > 60*1000 && (!_context.router().gracefulShutdownInProgress()) && From d8d76fd32714d903a085626778157a2f50b4388a Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 2 Aug 2009 13:37:23 +0000 Subject: [PATCH 08/23] * Ministreaming: - Make getInt() static - Move the big TestSwarm class out of the lib --- .../java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java | 2 +- .../java/{src => test}/net/i2p/client/streaming/TestSwarm.java | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename apps/ministreaming/java/{src => test}/net/i2p/client/streaming/TestSwarm.java (100%) diff --git a/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java b/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java index 334c86af0..4ecf34d6a 100644 --- a/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java +++ b/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java @@ -53,7 +53,7 @@ public class I2PSocketOptionsImpl implements I2PSocketOptions { _writeTimeout = getInt(opts, PROP_WRITE_TIMEOUT, DEFAULT_WRITE_TIMEOUT); } - protected int getInt(Properties opts, String name, int defaultVal) { + protected static int getInt(Properties opts, String name, int defaultVal) { if (opts == null) return defaultVal; String val = opts.getProperty(name); if (val == null) { diff --git a/apps/ministreaming/java/src/net/i2p/client/streaming/TestSwarm.java b/apps/ministreaming/java/test/net/i2p/client/streaming/TestSwarm.java similarity index 100% rename from apps/ministreaming/java/src/net/i2p/client/streaming/TestSwarm.java rename to apps/ministreaming/java/test/net/i2p/client/streaming/TestSwarm.java From 8d4a1899f246ab971fc3b373d8a31ea04fdd0bfe Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 2 Aug 2009 14:51:06 +0000 Subject: [PATCH 09/23] * Streaming: New option i2p.streaming.answerPings (default true) --- .../client/streaming/ConnectionManager.java | 2 ++ .../client/streaming/ConnectionOptions.java | 28 +++++++++++++++++-- .../i2p/client/streaming/PacketHandler.java | 10 +++++-- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java index b978ff3be..7efc6cc40 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java @@ -284,6 +284,8 @@ public class ConnectionManager { // exporting non-public type through public API, this is a potential bug. public ConnectionHandler getConnectionHandler() { return _connectionHandler; } public PacketQueue getPacketQueue() { return _outboundQueue; } + /** do we respond to pings that aren't on an existing connection? */ + public boolean answerPings() { return _defaultOptions.getAnswerPings(); } /** * Something b0rked hard, so kill all of our connections without mercy. diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java index c7084b4e7..13e18baff 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java @@ -9,6 +9,7 @@ import java.util.Properties; public class ConnectionOptions extends I2PSocketOptionsImpl { private int _connectDelay; private boolean _fullySigned; + private boolean _answerPings; private volatile int _windowSize; private int _receiveWindow; private int _profile; @@ -51,12 +52,15 @@ public class ConnectionOptions extends I2PSocketOptionsImpl { public static final String PROP_MAX_WINDOW_SIZE = "i2p.streaming.maxWindowSize"; public static final String PROP_CONGESTION_AVOIDANCE_GROWTH_RATE_FACTOR = "i2p.streaming.congestionAvoidanceGrowthRateFactor"; public static final String PROP_SLOW_START_GROWTH_RATE_FACTOR = "i2p.streaming.slowStartGrowthRateFactor"; + public static final String PROP_ANSWER_PINGS = "i2p.streaming.answerPings"; private static final int TREND_COUNT = 3; static final int INITIAL_WINDOW_SIZE = 6; static final int DEFAULT_MAX_SENDS = 8; public static final int DEFAULT_INITIAL_RTT = 8*1000; static final int MIN_WINDOW_SIZE = 1; + private static final boolean DEFAULT_ANSWER_PINGS = true; + // Syncronization fix, but doing it this way causes NPE... // private final int _trend[] = new int[TREND_COUNT]; private int _trend[]; @@ -198,6 +202,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl { setSlowStartGrowthRateFactor(opts.getSlowStartGrowthRateFactor()); setWriteTimeout(opts.getWriteTimeout()); setReadTimeout(opts.getReadTimeout()); + setAnswerPings(opts.getAnswerPings()); } } @@ -221,8 +226,8 @@ public class ConnectionOptions extends I2PSocketOptionsImpl { setInboundBufferSize(getMaxMessageSize() * (Connection.MAX_WINDOW_SIZE + 2)); setCongestionAvoidanceGrowthRateFactor(getInt(opts, PROP_CONGESTION_AVOIDANCE_GROWTH_RATE_FACTOR, 1)); setSlowStartGrowthRateFactor(getInt(opts, PROP_SLOW_START_GROWTH_RATE_FACTOR, 1)); - setConnectTimeout(getInt(opts, PROP_CONNECT_TIMEOUT, Connection.DISCONNECT_TIMEOUT)); + setAnswerPings(getBool(opts, PROP_ANSWER_PINGS, DEFAULT_ANSWER_PINGS)); } @Override @@ -260,9 +265,10 @@ public class ConnectionOptions extends I2PSocketOptionsImpl { setCongestionAvoidanceGrowthRateFactor(getInt(opts, PROP_CONGESTION_AVOIDANCE_GROWTH_RATE_FACTOR, 2)); if (opts.contains(PROP_SLOW_START_GROWTH_RATE_FACTOR)) setSlowStartGrowthRateFactor(getInt(opts, PROP_SLOW_START_GROWTH_RATE_FACTOR, 2)); - if (opts.containsKey(PROP_CONNECT_TIMEOUT)) setConnectTimeout(getInt(opts, PROP_CONNECT_TIMEOUT, Connection.DISCONNECT_TIMEOUT)); + if (opts.containsKey(PROP_ANSWER_PINGS)) + setAnswerPings(getBool(opts, PROP_ANSWER_PINGS, DEFAULT_ANSWER_PINGS)); } /** @@ -282,11 +288,22 @@ public class ConnectionOptions extends I2PSocketOptionsImpl { * or can we deal with signatures on the SYN and FIN packets * only? * + * There is no property name defined for this, so it's safe to + * say this is unused and always false. + * * @return if we want signatures on all packets. */ public boolean getRequireFullySigned() { return _fullySigned; } public void setRequireFullySigned(boolean sign) { _fullySigned = sign; } + /** + * Do we respond to a ping? + * + * @return if we do + */ + public boolean getAnswerPings() { return _answerPings; } + public void setAnswerPings(boolean yes) { _answerPings = yes; } + /** * How many messages will we send before waiting for an ACK? * @@ -492,6 +509,13 @@ public class ConnectionOptions extends I2PSocketOptionsImpl { return buf.toString(); } + private static boolean getBool(Properties opts, String name, boolean defaultVal) { + if (opts == null) return defaultVal; + String val = opts.getProperty(name); + if (val == null) return defaultVal; + return Boolean.valueOf(val).booleanValue(); + } + public static void main(String args[]) { Properties p = new Properties(); diff --git a/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java index bbb5a9536..19e62db0c 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java @@ -129,7 +129,10 @@ public class PacketHandler { private void receiveKnownCon(Connection con, Packet packet) { if (packet.isFlagSet(Packet.FLAG_ECHO)) { if (packet.getSendStreamId() > 0) { - receivePing(packet); + if (con.getOptions().getAnswerPings()) + receivePing(packet); + else if (_log.shouldLog(Log.WARN)) + _log.warn("Dropping Echo packet on existing con: " + packet); } else if (packet.getReceiveStreamId() > 0) { receivePong(packet); } else { @@ -230,7 +233,10 @@ public class PacketHandler { private void receiveUnknownCon(Packet packet, long sendId, boolean queueIfNoConn) { if (packet.isFlagSet(Packet.FLAG_ECHO)) { if (packet.getSendStreamId() > 0) { - receivePing(packet); + if (_manager.answerPings()) + receivePing(packet); + else if (_log.shouldLog(Log.WARN)) + _log.warn("Dropping Echo packet on unknown con: " + packet); } else if (packet.getReceiveStreamId() > 0) { receivePong(packet); } else { From d84b1125ebbbbd80c025342e000a9adae9583c46 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 2 Aug 2009 16:16:57 +0000 Subject: [PATCH 10/23] * Timestamper: Don't start thread if not enabled --- core/java/src/net/i2p/time/Timestamper.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/core/java/src/net/i2p/time/Timestamper.java b/core/java/src/net/i2p/time/Timestamper.java index c452f110a..4692c8d53 100644 --- a/core/java/src/net/i2p/time/Timestamper.java +++ b/core/java/src/net/i2p/time/Timestamper.java @@ -52,6 +52,15 @@ public class Timestamper implements Runnable { this(ctx, lsnr, true); } public Timestamper(I2PAppContext ctx, UpdateListener lsnr, boolean daemon) { + // Don't bother starting a thread if we are disabled. + // This means we no longer check every 5 minutes to see if we got enabled, + // so the property must be set at startup. + // We still need to be instantiated since the router calls clock().getTimestamper().waitForInitialization() + String disabled = ctx.getProperty(PROP_DISABLED, DEFAULT_DISABLED); + if (Boolean.valueOf(disabled).booleanValue()) { + _initialized = true; + return; + } _context = ctx; _daemon = daemon; _initialized = false; From 7aa051ef4f2a479195aa868dfa5187db3736d7a6 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 2 Aug 2009 20:12:16 +0000 Subject: [PATCH 11/23] add custom error page --- apps/routerconsole/java/build.xml | 1 + apps/routerconsole/jsp/error.jsp | 32 +++++++++++++++++++++++++++++++ apps/routerconsole/jsp/web.xml | 4 ++++ 3 files changed, 37 insertions(+) create mode 100644 apps/routerconsole/jsp/error.jsp diff --git a/apps/routerconsole/java/build.xml b/apps/routerconsole/java/build.xml index d571e4809..f77a14387 100644 --- a/apps/routerconsole/java/build.xml +++ b/apps/routerconsole/java/build.xml @@ -123,6 +123,7 @@ + diff --git a/apps/routerconsole/jsp/error.jsp b/apps/routerconsole/jsp/error.jsp new file mode 100644 index 000000000..da2dfeac8 --- /dev/null +++ b/apps/routerconsole/jsp/error.jsp @@ -0,0 +1,32 @@ +<%@page contentType="text/html"%> +<%@page pageEncoding="UTF-8"%> + +<% + // Let's make this easy... + final Integer ERROR_CODE = (Integer) request.getAttribute(org.mortbay.jetty.servlet.ServletHandler.__J_S_ERROR_STATUS_CODE); + final String ERROR_URI = (String) request.getAttribute(org.mortbay.jetty.servlet.ServletHandler.__J_S_ERROR_REQUEST_URI); + final String ERROR_MESSAGE = (String) request.getAttribute(org.mortbay.jetty.servlet.ServletHandler.__J_S_ERROR_MESSAGE); + if (ERROR_CODE != null && ERROR_MESSAGE != null) { + // this is deprecated but we don't want sendError() + response.setStatus(ERROR_CODE.intValue(), ERROR_MESSAGE); + } + // If it can't find the iframe or viewtheme.jsp I wonder if the whole thing blows up... +%> + +I2P Router Console + +<%@include file="css.jsp" %> + + +<% +if (System.getProperty("router.consoleNonce") == null) { + System.setProperty("router.consoleNonce", new java.util.Random().nextLong() + ""); +} +%> +<%@include file="summary.jsp" %> +

<%=ERROR_CODE%> <%=ERROR_MESSAGE%>

+
+The Router Console page <%=ERROR_URI%> was not found. +
+ + diff --git a/apps/routerconsole/jsp/web.xml b/apps/routerconsole/jsp/web.xml index 7a8e431ce..a0436d305 100644 --- a/apps/routerconsole/jsp/web.xml +++ b/apps/routerconsole/jsp/web.xml @@ -21,4 +21,8 @@ index.html index.jsp + + 404 + /error.jsp + From b5a17637cb088ea3785b173e46c9836363372afe Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 3 Aug 2009 14:18:55 +0000 Subject: [PATCH 12/23] * Wrapper: - Extend timeout to 20s (was 5s) - Shorten ping interval to 5m (was 10m) --- installer/resources/wrapper.config | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/installer/resources/wrapper.config b/installer/resources/wrapper.config index 295811d9e..3f07e7c85 100644 --- a/installer/resources/wrapper.config +++ b/installer/resources/wrapper.config @@ -158,8 +158,10 @@ wrapper.jvm_exit.timeout=30 # Let's change the default from 60 to 15 seconds and see if anyone moans.. wrapper.restart.delay=15 -wrapper.ping.interval=600 -wrapper.ping.timeout=605 +wrapper.ping.interval=300 +# The ping timeout must be at least 5 seconds longer than the value of wrapper.ping.interval. +# Extend this if you are getting 'JVM appears hung' shutdowns. +wrapper.ping.timeout=320 # use the wrapper's internal timer thread. otherwise this would # force a restart of the router during daylight savings time as well From 7986f5646e44f5a448990a704da886fb54ac3816 Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 3 Aug 2009 15:29:35 +0000 Subject: [PATCH 13/23] truncate long dest names --- .../java/src/net/i2p/router/web/SummaryHelper.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java index 390407f7c..ea6d0f4e4 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java @@ -355,7 +355,11 @@ public class SummaryHelper extends HelperBase { buf.append("* "); buf.append(""); - buf.append(name).append("
\n"); + if (name.length() < 16) + buf.append(name); + else + buf.append(name.substring(0,15)).append("…"); + buf.append("
\n"); LeaseSet ls = _context.netDb().lookupLeaseSetLocally(client.calculateHash()); if (ls != null) { long timeToExpire = ls.getEarliestLeaseDate() - _context.clock().now(); From c3af134a5b78dc543b96b14b926270f62ae86004 Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 3 Aug 2009 20:02:28 +0000 Subject: [PATCH 14/23] - Remove UTC time from summary bar - Increase skew warning threshold to 3s (was 100ms) --- .../src/net/i2p/router/web/SummaryHelper.java | 25 ++++++++----------- apps/routerconsole/jsp/summarynoframe.jsp | 1 - 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java index ea6d0f4e4..10169ac9f 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java @@ -64,24 +64,15 @@ public class SummaryHelper extends HelperBase { return DataHelper.formatDuration(router.getUptime()); } - private static final DateFormat _fmt = new java.text.SimpleDateFormat("HH:mm:ss", Locale.UK); - public String getTime() { + private String timeSkew() { if (_context == null) return ""; - - String now = null; - synchronized (_fmt) { - now = _fmt.format(new Date(_context.clock().now())); - } - - if (!_context.clock().getUpdatedSuccessfully()) - return now + " (Unknown skew)"; - + //if (!_context.clock().getUpdatedSuccessfully()) + // return " (Unknown skew)"; long ms = _context.clock().getOffset(); - long diff = Math.abs(ms); - if (diff < 100) - return now; - return now + " (" + DataHelper.formatDuration(diff) + " skew)"; + if (diff < 3000) + return ""; + return " (" + DataHelper.formatDuration(diff) + " skew)"; } public boolean allowReseed() { @@ -94,6 +85,10 @@ public class SummaryHelper extends HelperBase { public int getAllPeers() { return Math.max(_context.netDb().getKnownRouters() - 1, 0); } public String getReachability() { + return reachability() + timeSkew(); + } + + private String reachability() { if (_context.router().getUptime() > 60*1000 && (!_context.router().gracefulShutdownInProgress()) && !_context.clientManager().isAlive()) return "ERR-Client Manager I2CP Error - check logs"; // not a router problem but the user should know diff --git a/apps/routerconsole/jsp/summarynoframe.jsp b/apps/routerconsole/jsp/summarynoframe.jsp index 633794bb6..2a6252cc4 100644 --- a/apps/routerconsole/jsp/summarynoframe.jsp +++ b/apps/routerconsole/jsp/summarynoframe.jsp @@ -48,7 +48,6 @@ Ident: (, never reveal it to anyone" href="netdb.jsp?r=." target="_top">view)
Version:
Uptime:
-Now:
Reachability: <% if (helper.updateAvailable()) { From b5876e7f04c9229c216be994caa6e6fb97fc5e80 Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 5 Aug 2009 17:08:04 +0000 Subject: [PATCH 15/23] * Router: Move the WorkingDir class from i2p.jar to router.jar --- router/java/src/net/i2p/router/Router.java | 2 +- .../java/src/net/i2p/router/startup}/WorkingDir.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename {core/java/src/net/i2p/util => router/java/src/net/i2p/router/startup}/WorkingDir.java (99%) diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java index a79e2242a..d85ea17b2 100644 --- a/router/java/src/net/i2p/router/Router.java +++ b/router/java/src/net/i2p/router/Router.java @@ -35,6 +35,7 @@ import net.i2p.data.i2np.GarlicMessage; import net.i2p.router.message.GarlicMessageHandler; import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade; import net.i2p.router.startup.StartupJob; +import net.i2p.router.startup.WorkingDir; import net.i2p.router.transport.FIFOBandwidthLimiter; import net.i2p.stat.Rate; import net.i2p.stat.RateStat; @@ -44,7 +45,6 @@ import net.i2p.util.I2PThread; import net.i2p.util.Log; import net.i2p.util.SimpleScheduler; import net.i2p.util.SimpleTimer; -import net.i2p.util.WorkingDir; /** * Main driver for the router. diff --git a/core/java/src/net/i2p/util/WorkingDir.java b/router/java/src/net/i2p/router/startup/WorkingDir.java similarity index 99% rename from core/java/src/net/i2p/util/WorkingDir.java rename to router/java/src/net/i2p/router/startup/WorkingDir.java index 1f5960d2f..928a74152 100644 --- a/core/java/src/net/i2p/util/WorkingDir.java +++ b/router/java/src/net/i2p/router/startup/WorkingDir.java @@ -1,4 +1,4 @@ -package net.i2p.util; +package net.i2p.router.startup; import java.io.BufferedWriter; import java.io.File; From cf880548d98ba289de656dca2a928c1abda9cb14 Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 5 Aug 2009 19:15:03 +0000 Subject: [PATCH 16/23] * HTTP Proxy: - Restore the localhost error message - Catch 127.0.0.1:xxxx addresses too --- .../i2p/i2ptunnel/I2PTunnelHTTPClient.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java index 8fbba7ff3..fc8d5b76a 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java @@ -404,6 +404,16 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable } line = method + " " + request.substring(pos); + } else if (host.toLowerCase().equals("localhost") || host.equals("127.0.0.1")) { + if (out != null) { + out.write(ERR_LOCALHOST); + out.write("

Generated on: ".getBytes()); + out.write(new Date().toString().getBytes()); + out.write("\n".getBytes()); + out.flush(); + } + s.close(); + return; } else if (host.indexOf(".") != -1) { // rebuild host host = host + ":" + port; @@ -431,16 +441,6 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable usingWWWProxy = true; if (_log.shouldLog(Log.DEBUG)) _log.debug(getPrefix(requestId) + "Host doesnt end with .i2p and it contains a period [" + host + "]: wwwProxy!"); - } else if (host.toLowerCase().startsWith("localhost:")) { - if (out != null) { - out.write(ERR_LOCALHOST); - out.write("

Generated on: ".getBytes()); - out.write(new Date().toString().getBytes()); - out.write("\n".getBytes()); - out.flush(); - } - s.close(); - return; } else { request = request.substring(pos + 1); pos = request.indexOf("/"); From c65a97882e1ae1b4d2f3041c267cb8d39f8ae259 Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 5 Aug 2009 19:18:17 +0000 Subject: [PATCH 17/23] * Eepsite: - Quote the jetty.xml path in clients.config, and adjust the migration function, to fix the eepsite-won't-start bug on windows --- installer/resources/clients.config | 2 +- router/java/src/net/i2p/router/startup/WorkingDir.java | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/installer/resources/clients.config b/installer/resources/clients.config index 88bba5f9a..daa698908 100644 --- a/installer/resources/clients.config +++ b/installer/resources/clients.config @@ -20,7 +20,7 @@ clientApp.2.startOnLoad=true # run our own eepsite with a seperate jetty instance clientApp.3.main=org.mortbay.jetty.Server clientApp.3.name=My eepsite web server -clientApp.3.args=eepsite/jetty.xml +clientApp.3.args="eepsite/jetty.xml" clientApp.3.delay=30 clientApp.3.startOnLoad=true diff --git a/router/java/src/net/i2p/router/startup/WorkingDir.java b/router/java/src/net/i2p/router/startup/WorkingDir.java index 928a74152..e124727d9 100644 --- a/router/java/src/net/i2p/router/startup/WorkingDir.java +++ b/router/java/src/net/i2p/router/startup/WorkingDir.java @@ -195,8 +195,10 @@ public class WorkingDir { out.println("# Modified by I2P User dir migration script"); String s = null; while ((s = DataHelper.readLine(in)) != null) { - if (s.endsWith("=eepsite/jetty.xml")) { - s = s.replace("=eepsite", '=' + todir.getAbsolutePath() + File.separatorChar + "eepsite"); + if (s.endsWith("=\"eepsite/jetty.xml\"")) { + s = s.replace("=\"eepsite/jetty.xml\"", "=\"" + todir.getAbsolutePath() + + File.separatorChar + "eepsite" + + File.separatorChar + "jetty.xml\""); } out.println(s); } From 4d005349a7f8e5ace8e14c6a4e5ac8f0189a94f0 Mon Sep 17 00:00:00 2001 From: zzz Date: Thu, 6 Aug 2009 18:59:06 +0000 Subject: [PATCH 18/23] * I2PTunnel: - Move the privkey files from the app dir to the config dir, in preparation for splitting the two dirs by default --- apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java | 8 ++++---- .../java/src/net/i2p/i2ptunnel/TunnelController.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java index e4f8453bc..0b2d2d7c0 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java @@ -373,7 +373,7 @@ public class I2PTunnel implements Logging, EventDispatcher { privKeyFile = new File(args[2]); if (!privKeyFile.isAbsolute()) - privKeyFile = new File(_context.getAppDir(), args[2]); + privKeyFile = new File(_context.getConfigDir(), args[2]); if (!privKeyFile.canRead()) { l.log("private key file does not exist"); _log.error(getPrefix() + "Private key file does not exist or is not readable: " + args[2]); @@ -422,7 +422,7 @@ public class I2PTunnel implements Logging, EventDispatcher { privKeyFile = new File(args[2]); if (!privKeyFile.isAbsolute()) - privKeyFile = new File(_context.getAppDir(), args[2]); + privKeyFile = new File(_context.getConfigDir(), args[2]); if (!privKeyFile.canRead()) { l.log("private key file does not exist"); _log.error(getPrefix() + "Private key file does not exist or is not readable: " + args[2]); @@ -481,7 +481,7 @@ public class I2PTunnel implements Logging, EventDispatcher { privKeyFile = new File(args[3]); if (!privKeyFile.isAbsolute()) - privKeyFile = new File(_context.getAppDir(), args[3]); + privKeyFile = new File(_context.getConfigDir(), args[3]); if (!privKeyFile.canRead()) { l.log("private key file does not exist"); _log.error(getPrefix() + "Private key file does not exist or is not readable: " + args[3]); @@ -877,7 +877,7 @@ public class I2PTunnel implements Logging, EventDispatcher { File privKeyFile = new File(args[1]); if (!privKeyFile.isAbsolute()) - privKeyFile = new File(_context.getAppDir(), args[1]); + privKeyFile = new File(_context.getConfigDir(), args[1]); if (!privKeyFile.canRead()) { l.log("private key file does not exist"); _log.error(getPrefix() + "Private key file does not exist or is not readable: " + args[3]); diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java index 6efff96e5..b5ca6c3a1 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java @@ -73,7 +73,7 @@ public class TunnelController implements Logging { File keyFile = new File(getPrivKeyFile()); if (!keyFile.isAbsolute()) - keyFile = new File(I2PAppContext.getGlobalContext().getAppDir(), getPrivKeyFile()); + keyFile = new File(I2PAppContext.getGlobalContext().getConfigDir(), getPrivKeyFile()); if (keyFile.exists()) { //log("Not overwriting existing private keys in " + keyFile.getAbsolutePath()); return; From f188e02a5d2f93ecfd8fe34c2ff9230e4cb1655a Mon Sep 17 00:00:00 2001 From: zzz Date: Fri, 7 Aug 2009 15:49:36 +0000 Subject: [PATCH 19/23] move css include up to possibly reduce servlet borkage --- apps/routerconsole/jsp/index.jsp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/routerconsole/jsp/index.jsp b/apps/routerconsole/jsp/index.jsp index e389bb15b..3056741e6 100644 --- a/apps/routerconsole/jsp/index.jsp +++ b/apps/routerconsole/jsp/index.jsp @@ -3,9 +3,9 @@ +<%@include file="css.jsp" %> I2P Router Console - home -<%@include file="css.jsp" %> <% From 15565ca09ce066e78f7f397b0cf8b0237570564f Mon Sep 17 00:00:00 2001 From: zzz Date: Fri, 7 Aug 2009 16:17:52 +0000 Subject: [PATCH 20/23] more hellips --- .../java/src/org/klomp/snark/web/I2PSnarkServlet.java | 4 ++-- router/java/src/net/i2p/router/PersistentKeyRing.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index 21d1edc27..f2f71e6ba 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -401,7 +401,7 @@ public class I2PSnarkServlet extends HttpServlet { if (i > 0) filename = filename.substring(0, i); if (filename.length() > MAX_DISPLAYED_FILENAME_LENGTH) - filename = filename.substring(0, MAX_DISPLAYED_FILENAME_LENGTH) + "..."; + filename = filename.substring(0, MAX_DISPLAYED_FILENAME_LENGTH) + "…"; long total = snark.meta.getTotalLength(); // Early typecast, avoid possibly overflowing a temp integer long remaining = (long) snark.storage.needed() * (long) snark.meta.getPieceLength(0); @@ -453,7 +453,7 @@ public class I2PSnarkServlet extends HttpServlet { statusString = "TrackerErr (" + curPeers + "/" + knownPeers + " peers)"; else { if (err.length() > MAX_DISPLAYED_ERROR_LENGTH) - err = err.substring(0, MAX_DISPLAYED_ERROR_LENGTH) + "..."; + err = err.substring(0, MAX_DISPLAYED_ERROR_LENGTH) + "…"; statusString = "TrackerErr
(" + err + ")"; } } else if (remaining <= 0) { diff --git a/router/java/src/net/i2p/router/PersistentKeyRing.java b/router/java/src/net/i2p/router/PersistentKeyRing.java index 9b7ffe0f3..ec1ae24d5 100644 --- a/router/java/src/net/i2p/router/PersistentKeyRing.java +++ b/router/java/src/net/i2p/router/PersistentKeyRing.java @@ -71,7 +71,7 @@ public class PersistentKeyRing extends KeyRing { for (Entry e : entrySet()) { buf.append("\n"); Hash h = e.getKey(); - buf.append(h.toBase64().substring(0, 6)).append("..."); + buf.append(h.toBase64().substring(0, 6)).append("…"); buf.append(""); LeaseSet ls = _ctx.netDb().lookupLeaseSetLocally(h); if (ls != null) { @@ -81,13 +81,13 @@ public class PersistentKeyRing extends KeyRing { if (in != null && in.getDestinationNickname() != null) buf.append(in.getDestinationNickname()); else - buf.append(dest.toBase64().substring(0, 6)).append("..."); + buf.append(dest.toBase64().substring(0, 6)).append("…"); } else { String host = _ctx.namingService().reverseLookup(dest); if (host != null) buf.append(host); else - buf.append(dest.toBase64().substring(0, 6)).append("..."); + buf.append(dest.toBase64().substring(0, 6)).append("…"); } } buf.append(""); From 70ae99f31a4ae104582f92d722d1d6e12b84f55d Mon Sep 17 00:00:00 2001 From: zzz Date: Fri, 7 Aug 2009 17:03:26 +0000 Subject: [PATCH 21/23] fix broken persistent key storage --- router/java/src/net/i2p/router/PersistentKeyRing.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/router/java/src/net/i2p/router/PersistentKeyRing.java b/router/java/src/net/i2p/router/PersistentKeyRing.java index ec1ae24d5..780433325 100644 --- a/router/java/src/net/i2p/router/PersistentKeyRing.java +++ b/router/java/src/net/i2p/router/PersistentKeyRing.java @@ -53,7 +53,7 @@ public class PersistentKeyRing extends KeyRing { if (key == null || key.length() != 44) continue; String hb = prop.substring(PROP_PFX.length()); - hb.replace("$", "="); + hb = hb.replace("$", "="); Hash dest = new Hash(); SessionKey sk = new SessionKey(); try { From e36f9b22731f1aa7b363b7c100b10f468ce37223 Mon Sep 17 00:00:00 2001 From: z3d Date: Fri, 7 Aug 2009 18:19:42 +0000 Subject: [PATCH 22/23] UI enhancements. --- .../src/net/i2p/router/web/GraphHelper.java | 2 +- apps/routerconsole/jsp/summarynoframe.jsp | 6 +- .../themes/console/classic/console.css | 27 +++++++- .../themes/console/classic/ieshim.css | 20 +++++- .../resources/themes/console/dark/console.css | 62 +++++++++++++++--- .../themes/console/dark/images/titletile.png | Bin 0 -> 2181 bytes .../themes/console/light/console.css | 55 +++++++++++++--- .../console/light/images/lightbluetile.png | Bin 1410 -> 3486 bytes .../themes/console/light/images/titletile.png | Bin 0 -> 1112 bytes installer/resources/themes/console/snark.css | 14 ++-- 10 files changed, 156 insertions(+), 30 deletions(-) create mode 100644 installer/resources/themes/console/dark/images/titletile.png create mode 100644 installer/resources/themes/console/light/images/titletile.png diff --git a/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java index 037ca17af..e9749750c 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java @@ -115,7 +115,7 @@ public class GraphHelper extends HelperBase { + "\" /> pixels, height:
\n"); _out.write("Refresh delay:
\n"); - _out.write("


"); + _out.write("
"); } catch (IOException ioe) { ioe.printStackTrace(); } diff --git a/apps/routerconsole/jsp/summarynoframe.jsp b/apps/routerconsole/jsp/summarynoframe.jsp index 655741b83..6333a14cf 100644 --- a/apps/routerconsole/jsp/summarynoframe.jsp +++ b/apps/routerconsole/jsp/summarynoframe.jsp @@ -26,9 +26,9 @@ <% } else { %> I2P Services
-
Susimail -SusiDNS -Torrents +Addressbook +Torrents +Webmail Webserver
I2P Internals
I2PTunnel diff --git a/installer/resources/themes/console/classic/console.css b/installer/resources/themes/console/classic/console.css index 7b79f2860..3231ef874 100644 --- a/installer/resources/themes/console/classic/console.css +++ b/installer/resources/themes/console/classic/console.css @@ -132,6 +132,10 @@ div.routersummary a:hover { color: #f60; } +div.routersummary input[type=text] { + text-align: right !important; +} + div.warning { margin: 20px 20px 10px 260px; padding: 0px 20px 20px 75px; @@ -176,6 +180,7 @@ div.main { div.main li { padding-bottom: 10px; + list-style: square; } div.main li:first-child { @@ -223,6 +228,11 @@ div.news a:link { text-shadow: 0px 0px 1px rgba(128, 128, 48, 0.3); } +div.news a:visited { + color: #f00 !important; + text-shadow: 0px 0px 1px rgba(128, 128, 48, 0.3); +} + div.news hr { color: #cc7; background: #cc7; @@ -331,11 +341,20 @@ table { } table hr { - padding: 1px 0; + padding: 0px 0; + color: #bbf; + background: #bbf; + border: 0px solid #bbf; + margin: 0px -5px; + height: 1px; +} + +table tt { + font-size: 7.5pt; } th { - background-color: #def; + background-color: #fff; padding: 8px 2px; text-align: center; border-bottom: 1px solid #88f; @@ -345,6 +364,10 @@ tt { font-size: 8pt; } +tt, pre { + font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; +} + td { padding: 4px; } diff --git a/installer/resources/themes/console/classic/ieshim.css b/installer/resources/themes/console/classic/ieshim.css index 3e897a7af..9fff032b1 100644 --- a/installer/resources/themes/console/classic/ieshim.css +++ b/installer/resources/themes/console/classic/ieshim.css @@ -36,8 +36,10 @@ div.configure table { } h1 { - padding: 15px 10px 16px 10px !important; + padding: 15px 10px 16px -10px !important; margin: 0 0px 0 175px !important; + background-color: #bbf !important; + color: #001; } h2 { @@ -97,6 +99,11 @@ div.routersummary { border-left: 5px solid #bbf; } +div.routersummary submit { + padding: 0; + margin-bottom: 5px; +} + div.news li { padding-top: 0px 0px !important; margin-bottom: -23px !important; @@ -131,4 +138,15 @@ div.configure hr{ input { padding: 0; +} + +div.graphspanel img { + border: 1px solid #99f; + margin: 6px 0 !important; + background: #ddf; + -moz-box-shadow: inset 0px 0px 1px 1px #99f; +} + +div.graphspanel hr { + margin: 20px 0; } \ No newline at end of file diff --git a/installer/resources/themes/console/dark/console.css b/installer/resources/themes/console/dark/console.css index 8e0d75d60..5c561e94a 100644 --- a/installer/resources/themes/console/dark/console.css +++ b/installer/resources/themes/console/dark/console.css @@ -89,7 +89,7 @@ div.routersummary { width: 175px; padding: 10px; text-align: center; - border: 1px solid #9999ff; + border: 1px solid #99f; background: #003; background: url(images/darkbluebg.png); color: #eef; @@ -102,6 +102,28 @@ div.routersummary { -moz-box-shadow: inset 0px 0px 1px 0px #eef; } +div.routersummary input[type=text] { + text-align: right !important; + -moz-box-shadow: inset 1px 1px 1px 0px #000; +} + +div.routersummary hr { + color: #99f; + background: #99f; + height: 1px; + border-bottom: 1px outset #bbf; + margin: 5px -10px 4px -10px; +} + +div.routersummary hr { + color: #bbf; + background: #bbf; + height: 2px; + border-bottom: 1px outset #bbf; + margin: 8px -10px 7px -10px; + -moz-box-shadow: inset 0px -4px 2px 1px #001; +} + div.warning { margin: 5px 20px 10px 240px; padding: 0px 25px 20px 75px; @@ -254,6 +276,16 @@ table { background: #003; } +table hr { + padding: 0px 0; + color: #99f; + background: #99f; + border: 0px solid #99f; + margin: 0px 0px; + height: 1px; + display: none; +} + th { padding: 6px 2px; color: #eef; @@ -392,7 +424,7 @@ h2 { color: #fff; text-shadow: 0px 0px 1px rgba(255, 255, 255, 0.5); letter-spacing: 0.05em; - background: #003 url('images/darkbluebg.png'); + background: #003 url('images/titletile.png'); padding: 5px 10px 8px 10px; wordwrap: none; border: 1px solid #99f; @@ -435,9 +467,9 @@ h4 { font-size: 11pt; } -button { +button, button:visited { font: bold 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - border: 1px outset #ddddc0; + border: 1px outset #77f; padding: 1px 3px; background: #bbf; text-decoration: none; @@ -450,12 +482,23 @@ button { text-align: center; vertical-align: middle; min-width: 76px; + -moz-box-shadow: inset 0px 1px 1px 0px #55f; + background: #003; + color: #99f; } +button:hover { + border: 1px solid #f60; + -moz-box-shadow: inset 0px 1px 1px 0px #eef; + background: #001; + color: #f60; +} + button:active { border: 1px inset #f60; background: #f60; color: #fff; + -moz-box-shadow: inset 0px 0px 0px 0px #f60; } .underline { @@ -488,9 +531,10 @@ sidebarlogo { } input { - border: 1px outset #bbf; - background: #bbf; - color: #002; + border: 1px outset #55f; + -moz-box-shadow: inset 0px 1px 1px 0px #55f; + background: #003; + color: #99f; margin: 5px; font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; padding: 1px 2px; @@ -502,9 +546,10 @@ input { } input:hover { - background: #003; + background: #001; color: #f60; border: 1px solid #f60; + -moz-box-shadow: inset 0px 1px 1px 0px #eef; } input:active { @@ -530,6 +575,7 @@ input[type=text] { border-radius: 4px; -moz-border-radius: 4px; -khtml-border-radius: 4px; + -moz-box-shadow: inset 1px 1px 1px 0px #000; } input[type=text]:active, input[type=text]:hover { diff --git a/installer/resources/themes/console/dark/images/titletile.png b/installer/resources/themes/console/dark/images/titletile.png new file mode 100644 index 0000000000000000000000000000000000000000..945acc5b981b768b8a64a6a9f7a8c969c17733ba GIT binary patch literal 2181 zcmdsyX*3&%7ROUf2^q^MrnWK^rxf+3r3s-?v2=+ocwQ`3I&>(dQcI)`Mvdwd+ObP4 zK@dr*_ASOUAzD*WB6j1{5{acqsHAx2%$NE2zP$J0-E;rv{(tx0bMCpBZb&D2ISn}g z03h$;?BH=yfB8coDFEP9eaE|j6Oeu6?E4r1Q0V_drv{^HLjVAfm5T!$6<@khJQJzu zrSgnB`O0%<+-2-T>9pa4tQ@6`f>RgbrP>!$!L;l4v$_|`Q^96Rc+jBx&^71$z3&RYjSn>z)+X zt^P;C@f7K}+7WJ15GjElwUSSD%SK|tK5<76zpour|Bx@TX7>g3Nl#z){Q0>a!d|i-(e4v2S9b` zht8TLW3Ic4EH^mt(Q2n@f8ASwE|HXsyoSV7;kjczR$J!Ds(d04w)brM=ivP?_UPBL zi6r>OVSqXc=q#Z;I!36QTj0r)S#zIHONfaC<=EHU!Oi8!oIzmb3qu{3&~-wh|Gm0i zUDl)~=DRS5u8>VQ^(*7qto}+>Y4votV^EI!xe%5AiiL--U~|vp%1ntXS-9Nrjy-`M zMbGMs@Uj+R%*mg{){mQLrt=#*ge(Hq7JDu`WEeTl^+YanxE{y@UQiQ+f`^q=gt|<< z?%GnxfbXW*9$&)s0FX@C9d5s4uy@(9-!md(LhUi1YZG|C0;niD2wh_aoxJW6XIWyc zm=&FOfOKoZtfdXhLRZ}PB!;WFxm}!N{5S!d_iGf730XT7ed0ZWVK%xubjtJ@MVuzmClyQA-(DyW5@HK%uZ2h#v z>7KKm;;rrZBkGuh7lci&D45%YErjDBYsr}n@jSRv5^W^e6pe@d<9!Rg)`^(txulO< zxuq_C6L8<8xTaftN5l$@;tlnbQWv-jnWde1f%qr9R_Jn_m9WT;HR0oNewl;Asu+b` zMEBB>)H=@ukr#$fgf5fzi_0;}KO4XyiOt39R6FVWv8#n+kbpoVo1IZjajp7Rn)fT~ z>FO`yxut+;rfZZizM#FBV!i)m!Q`c`vO}t~lB^#5!cV~5|2Z5ftK1Ge^js=p<+BoU z^TTm)Q8s@_Ly%S9CZu>7X#4qoLAF5>pLOZYYznLR!IB>+=z9GdmWY~qa@th2ov<#F z9Jc6omUI?4O)FGbiF#U+^YJq~x*C0xL|t@fx&*alwNf-lcenSpI+te>w_>6}(AF68 zyx2avb=D$<)^qqz7Ua;odzmIY;DS)DxFnMv-yG98N(r^d)d8w^oOuOd)-_SVQq4V` zn~ZS$p}`3;uRP@m^ES{v!|M-uH&eHvkzR`0vCZ#day$Xwa z5Gon9K8|)(TV+Qd8b>S(f*9%Tl+fg_=ik2DH~p2*kSp=;B%v8a5gm_V1e*|os8NJA zt|z6LfCDc=YF_%t(}V)L?FXMAYHU)@L%tOm72)M5Q$RaffgDW%pWC?HKaJH*SFxh zpevvh+cDGR%H;UVt4Q*LaU`NX5_*Sph^jKKBmsKpXxkDkC{0+)Z>_=H*2lQrg3%HK zWv^7^PE%fH%Pv_$_3L;q)b4_JInl8LSxw84EizKDw^%UPzC7d1R164ZCZD3K1WdiI z1d_@_-OvRA|3m}MN#o@H3A(vl{d0bTD3Aa1bqrHhXeZaL9=g#y%L1H)3j*mtv%j1A EZ)FP6B>(^b literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/light/console.css b/installer/resources/themes/console/light/console.css index 20d8c28cf..26f8b40c5 100644 --- a/installer/resources/themes/console/light/console.css +++ b/installer/resources/themes/console/light/console.css @@ -105,6 +105,19 @@ div.routersummary { -moz-box-shadow: inset 0px 0px 1px 0px #002; } +div.routersummary input[type=text] { + text-align: right !important; +} + +div.routersummary hr { + color: #eef; + background: #eef; + height: 2px; + border-bottom: 1px solid #eef; + margin: 8px -10px 7px -10px; + -moz-box-shadow: inset 0px 1px 1px 1px #001; +} + div.warning { margin: 5px 20px 10px 240px; padding: 0px 25px 20px 75px; @@ -226,6 +239,7 @@ div.configure { border-radius: 4px; border: 1px solid #000022; -moz-box-shadow: inset 0px 0px 1px 0px #002; + min-width: 400px; } div.graphspanel { @@ -237,9 +251,9 @@ div.graphspanel { border-radius: 4px; border: 1px solid #000022; -moz-box-shadow: inset 0px 0px 1px 0px #002; + text-align: center !important; } - div.graphspanel img { border: 1px solid #003; padding: 2px; @@ -247,7 +261,7 @@ div.graphspanel img { text-align: center !important; background: #001; -moz-box-shadow: inset 0px 0px 1px 1px #99f; - opacity: 0.9; + opacity: 0.8; } div.graphspanel img:hover { @@ -260,6 +274,10 @@ div.graphspanel img:hover { opacity: 1; } +div.graphspanel form { + text-align: left; +} + div.messages { padding: 10px; margin: 10px 0 20px 0; @@ -301,6 +319,16 @@ table { font: 7pt/130% "Lucida Sans Unicode", Verdana, Bitstream Vera Sans", Tahoma, Helvetica, sans-serif; } +table hr { + padding: 0px 0; + color: #99f; + background: #99f; + border: 0px solid #99f; + margin: 0px 0px; + height: 1px; + display: none; +} + th { padding: 6px 2px; color: #000; @@ -433,7 +461,7 @@ h2 { font-size: 12pt; color: #001; letter-spacing: 0.05em; - background: #ddf url('images/lightbluetile.png'); + background: #ddf url('images/titletile.png'); text-shadow: 0px 0px 1px rgba(0, 0, 64, 0.5); padding: 7px 10px; wordwrap: none; @@ -476,9 +504,9 @@ h4 { button, button:visited { font: bold 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - border: 1px outset #ddddc0; + border: 1px outset #999; padding: 1px 3px; - background: #bbf !important; + background: #ddf !important; text-decoration: none; border-radius: 4px; -moz-border-radius: 4px; @@ -488,18 +516,22 @@ button, button:visited { margin: 0 1px; text-align: center; min-width: 80px; + -moz-box-shadow: inset 0px 2px 8px 0px #fff; + color: #006; } button:hover{ border: 1px solid #f60; background: #f60 !important; color: #fff; + -moz-box-shadow: inset 0px 0px 0px 1px #fff; } button:active{ border: 1px solid #f60; background: #001 !important; color: #f60; + -moz-box-shadow: inset 0px 0px 0px 1px #f60; } .underline { @@ -531,8 +563,8 @@ input { } input, input:visited { - border: 1px outset #bbf; - background: #bbf; + border: 1px outset #999; + background: #ddf; color: #001; margin: 5px; font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; @@ -542,6 +574,9 @@ input, input:visited { border-radius: 4px; -moz-border-radius: 4px; -khtml-border-radius: 4px; + -moz-box-shadow: inset 0px 2px 8px 0px #fff; + color: #006; + opacity: 0.9; } @@ -549,7 +584,9 @@ input:hover { background: #f60; color: #fff; border: 1px solid #f60; - opacity: 0.9; + opacity: 1.0; + -moz-box-shadow: inset 0px 0px 0px 1px #fff; + } input:active { @@ -557,6 +594,7 @@ input:active { color: #f60; border: 1px solid #f60; opacity: 1.0; + -moz-box-shadow: inset 0px 0px 0px 1px #f60; } input[type=text] { @@ -595,6 +633,7 @@ select { border-radius: 4px; -moz-border-radius: 4px; -khtml-border-radius: 4px; + text-align: left !important; } textarea { diff --git a/installer/resources/themes/console/light/images/lightbluetile.png b/installer/resources/themes/console/light/images/lightbluetile.png index e7fc6c1f12ab57637c3c0858a74ad87643a76b28..53f9d54deaaa6cc333aca3c07e71848e26f5d2b0 100644 GIT binary patch literal 3486 zcmbW(c{J1u9|rJASGFugku2Q^m2I-izH4L>vS-awwvi-6mSjzu5?NBH7;Ba>c4q8p z3>m|SD0>*0vChozrS7@!J@>xno_pVOKF|67{rvHq^Nqh`YRJyY&k6#8*o}?!F7Mv> zy)f?wf%aL`h&~|De$XWo3;mW46f}Ob15a!0TkZNpYyC)R=v+njZ?%tYHFlCQSZed& zYR@FS=PMo6Nhb2ls63 z8rZY`6AqyK)DMtt}OAiW26t@Q3$?%A`{1AOb=v)BbJ?CJ#OcXa@B z9l&fmF!RGS2H5o#4Se}wstx$v=T_jSi5B2@<1N6a=HHAp17l6UAvOU&jWzD*_P#v)A<0(K4jEnF?o|Id6t0{>he68PzT4e)RE)&PIfQw{vz zx~qY|(NzWfOApH*LUxD2;%{Vg69nQw?`2=7-&;2jh*i&6Pun6mtIs~ZZn229LsZdx zgG7ghTIeytjI37F#dj)6x>X!TE$%+Sjrbi(T_OW9NUBh>>7L4ZcF$zuJ}cNXBSyWn zB{i~@fxdH@#d2Q@-&H46O^M_%BR=QN*+;DR6s!}95*L+ZK&AX=OCOin*Id)SLR2hq z{M@{eJ{iuWHZKb<|c@JNE6N+o!8BN+rmZ!ua-BhN?$} zo7!xiFU$T zs#88u1_^qW*{8*8Ad@e9OGWPX%nWa-v68)i#G%wcf-FJkDi>YD!W@7Ut7Sy zJAB|8_MnFpjueGBJO2>MgUo2#Z}bwc`BDJW@z%_AB9cML_o=CU6Btl_90-y3zAzyk z?SM>;6^xM&JRb(*Gtl=5ZYYv|N#cW16)j_)pP@aXO*W>G9R@P)IQ!}paAkXXS~!-~ zW{GEVq87Rj+aYb42@XaSofkYADYBwStWoks&U$TBfGc+=YYbK<0p=86FOecS;YUE{6Y>p!*q3nEp*0suJB>1JSnR&=^Il}H1JER zb#rohRZ4J}^%u)dm~cgo&s~V4EdiDCg}lRhdvf{qv=@T`j8LHdjb-B?@`QjD5=Zi# zQz_K%tR~#i(*!}OMkhEtQ`GOvYt9ouh8Kv+N?ItrHeyp<%(YRW}LJh7hMqw zw?e*Q3}`->djDQsgG3G5cy$o<`|4y@}zZT+pWlg^_37?s?6rl30%|6_)rb~hDe^K#+j ze%H;IK~VOIK-DYRDpUMdot{V9$>kuX&U+?Lu^bSh>f~5QCMSTyl2aA2lB(%S2KmRd znj65*Sr<2<`*nvk-ZnqID=VP8bVfqy<#*Y%l;qZa8PhpuZ{}+2g_nFgzs~5Gu%N}h z>_>ltI)I#w*16Knkty&1VZjY*cU45BFGtk^+LkePUX(GuK{$J9Q_Uw#+skk)OVoGb zD2KkR%k0-fzG8-h1oZ}uIEJFn`vP>HUgJE~#oqac3wQuWT~m-RIsMH2EMeaL2ss zV+**|2*Cpm<4Uta$Buz*;ZLXw$`fg_NpJ#e6nt}B6*i4gnr;p`S^PB-9MRFZw(O># zZPwH~Y2p!WpwywfB_5PydhVe6OiZegcjZtjxDio>->@=vO>D^a?|F*59+!Vw5+g`O ziwgT;;$+iYifpL&3s3!N=~!)3E91L2iQfDC_fy#@{l;uQpO- zK_QRIXA?2F+UwM&R~5L(B(>a;>YGB5u3?Y2i9&d5NA)>F58VU}{wE3Xi-NF<5WmLzjYh%>gNMZ9U-^BUun-etHmLu~35RccxWJ~7)b9^^ z!cLZw5g%eW;|yp7{49CNUB*W0SapQlTf#|9Zm@>5*YWE}R@!BR92)59Y7lp6M4VLUp zH-6Y z1mN_%vWRg>S-S_V(g*H7YjfgFdEV}j^$MCa14nv zj6Xzo`?7a8<5AB1IvaDP$w)jJ2@~S zv|5|jOn!}t$ZJ*0T#UhA*9YF|gXfWq$>E8&+htraY-NqNp^gbs3YnBX zaXhf4&0Nxn3LAq|c!Ug%hwxld$RxM89y`iF(aG`%k$T5qR+0eCd2PLRnviR=>0&~a zqrDl4%szBOy7<$#h}pJ$b?lHOI86EtC9K2}j1V@-Iy{XjkLHkZKXywMXwlQKgv^TD zk9nmDvr+vn7tapO@sQCX&o7>TH4-}{ua0pQS3?wdrEsHor}DBUf<@*z2jJ-+qU`#f fN8k0?++?ap?AKg@mOq``P$!{ literal 1410 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvEiGhJ})y~t$fE>;OkH}&M2EM}}%y>M1MG6B0 ztBI$JV@SoEw|8&nO$n7a_VMf1D?w5P)e2W!T03q>fAYvbWW4S)voL>;c>>3~0AT_C zJ0Y`}E*-M?E9Euw+!^D|X}u;Nzss!IliOzc{`;5t|Cc;maQAsU|0$1MALGk{ZB>=wK1TpH3%wH693lc?_Qn1m!`!V{G7V@{)_!~rM!`t>ab`< z7n;)iU;p;sWjS>rS?Bmqzx%rB=Rv0Dzf-@v-K^1{^F41$@#gvOr&Zto_PqS*ovR<8 zAG=yqf9j{-&i}Rb{|bK9B`w$G;tCAtXmSz}S+qcawN*pI#Zi%VLM8F{q-=IYhv`q* z_i30w+n#RwecS0<7k`FFR`0Zr*Q~A&n_E9+>-AIj-h11GYu(T;Iezb z_oH7A{tBzy68vvxY}onfhM(6q@4I&2V#S*bIk7JVA1hbSuYdd8`|-2S$K#4E-cM=Y zuKm38yhY7A_4n3kcK>Fb{Jv*Hs9gB@>A!yZ*~iDc+f%pk{?80KyX*Pq&mB&$ubuaE z^7(bPKVClYznUAP7aKlrX8yO&Q!h>Z^x(K*@ydDn-#?#i-mkFZW0_|2zuMix#g)7K zU%q;N@wwHk)0e-$ViSHQ^v-hkiJFT4`t0vZzpZ_GPCEFRqdkAUSpKwkA8S6pIzB&c zc39zcskz$z7he97|EyBNc03@$%x&@o$vF9NbTmpO09_Z-$;WIM zz}y4mYh6rKV9RO{1oBm_fDYv~NK#;1<xsF@2mk*YJ*dqLWf4+foWC&kZC*}}`cm<-?K@2^r=;8Y z%r~2U^2d)GH@()@{@7ONt}JIAkh`8wcJt%yTIH)>eK_vJ2SdvZMmy93x!V4s) z+b%zy)3BRAa`*Q2i><$%&7I4*OwNcW=CJ9j>o<-rf6X}kZuc>-<#T7nguj=we!oGz zI)8tr?~DDZ{9TRR%2QXksA>gzt_Z41uH7MQw{5AdT>U%et9jPH*2ymF`l^%qY4sPL z)U=h8cE2pRcEWw*&Sxg68qSiZ0@{qGEaU+)XVxW7k6(BC`GFr_D*INvs$C`Oee~ka z+84<`I~Vsviyk_e{$lp@-Wm2U&KX=zo0GqDuHWXTDep|wpG$1F-rpfnyuNU;;lrHy z@2_WnX8D`JP6Rq${Q9_E&Hkc?XMX;=n6t0%(a%qxkNtemRL^#^UEMQ@Kui=LyQ|K#`mo9geQ3O^j$dFJ=T%9nC=&o9nh(qp92 zY^1Td#!YgHBO02y)EZp~q@vL;fGrgb{VPm;^LKe~=(#Y(ce?L#RDOqYBv+)r4EtX3 zw8nHs@;~hPW4~hw$iw{Y(-M%(`07-4Ek>(en_B_pyJeW#6MJp8Gw` zd;i)0KDPdJ`mIOJJ1cMRGd;wAWBy*Qb1^rK?-;$|vi`vrowk38R$zjNiRJnnx%(bQ z`!1%|EI$3iZTiPvy~onA$IN&2@b(FRuUq literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/snark.css b/installer/resources/themes/console/snark.css index 4b6fbb2c3..a5551156f 100644 --- a/installer/resources/themes/console/snark.css +++ b/installer/resources/themes/console/snark.css @@ -56,8 +56,8 @@ body { font-size: 9pt; font-weight: bold; text-align: left; - margin: 0 0 15px 0; - padding: 0px; + margin: 0 0px 10px 0px; + padding: 0; border-spacing: 0px; -moz-border-radius: 4px 0 0 0; -khtml-border-radius: 4px; @@ -68,7 +68,7 @@ body { background: #f40 url('../console/images/orangetile.png'); color: #531; height: 64px; - width: 100%; + width: auto; } pre { @@ -95,7 +95,7 @@ th { border-top: 1px outset #001; border-bottom: 1px inset #001; background: #f60 url('/themes/console/images/tabletitleorange.png') repeat-x; - text-align: left; + text-align: right; whitespace: nowrap; } @@ -107,7 +107,7 @@ th { td { padding: 5px; - text-align: left; + text-align: right; } .snarkTorrentEven { background-color: #fb1; @@ -176,7 +176,7 @@ hr { } a:link{ - color: #830; + color: #930; text-decoration: none; font-weight: bold; word-wrap: break-word; @@ -189,7 +189,7 @@ a:visited{ } a:hover{ - color: #f40; + color: #900; font-weight: bold; } From 69fdfb06358aedc3c1ff7e419523fd6c13ccbb8e Mon Sep 17 00:00:00 2001 From: zzz Date: Fri, 7 Aug 2009 18:36:09 +0000 Subject: [PATCH 23/23] -8 --- history.txt | 38 +++++++++++++++++++ .../src/net/i2p/router/RouterVersion.java | 2 +- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/history.txt b/history.txt index 890f0cd80..8fbb6eebd 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,41 @@ +2009-08-07 zzz + * build.xml: + - Try to automate the release process + - Take jetty back out of the updater after 4 releases + * Console: + - Add a custom error page + - Don't count ourselves in known peers + - Hide update button when shutting down + - Increase skew warning threshold to 3s (was 100ms) + - Remove UTC time from summary bar + - Truncate long dest names + - Try to reduce servlet problems on index page + * Core: + - Catch unzip fd leaks on error + - Move 2 test classes out of the lib + * Eepsite: + - Quote the jetty.xml path in clients.config, + and adjust the migration function, to fix the + eepsite-won't-start bug on windows + * HTTP Proxy: + - Restore the localhost error message + - Catch 127.0.0.1:xxxx addresses too + * I2PTunnel: + - Move the privkey files from the app dir to the + config dir, in preparation for splitting the two + dirs by default + * Ministreaming: + - Make getInt() static + - Move the big TestSwarm class out of the lib + * NetDb stats: Post-release cleanup + * PersistentKeyRing: Fix broken storage of keys in config file + * Router: Move the WorkingDir class from i2p.jar to router.jar + * Streaming: New option i2p.streaming.answerPings (default true) + * Timestamper: Don't start thread if not enabled + * Wrapper: + - Extend timeout to 20s (was 5s) + - Shorten ping interval to 5m (was 10m) + 2009-08-03 dr|z3d * Extensive update to the Classic theme; custom css hacks for IE. diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 0226e038b..0116da736 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 07; + public final static long BUILD = 8; /** for example "-test" */ public final static String EXTRA = ""; public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA;