diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java index 3af4ffafb5f9c0e519c3f99c01371b3b8672d801..a583c3ed4243c65f7ff6aeda8872656535f2b85d 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java @@ -35,16 +35,13 @@ public class ConfigStatsHelper extends HelperBase { /** * Configure this bean to query a particular router context * - * @param contextId begging few characters of the routerHash, or null to pick + * @param contextId beginning few characters of the routerHash, or null to pick * the first one we come across. */ + @Override public void setContextId(String contextId) { - try { - _context = ContextHelper.getContext(contextId); - _log = _context.logManager().getLog(ConfigStatsHelper.class); - } catch (Throwable t) { - t.printStackTrace(); - } + super.setContextId(contextId); + _log = _context.logManager().getLog(ConfigStatsHelper.class); _stats = new ArrayList(); Map groups = _context.statManager().getStatsByGroup(); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/HelperBase.java b/apps/routerconsole/java/src/net/i2p/router/web/HelperBase.java index db5aa9ba249f9f7f35a3ac62ae53c214f0797732..848e48d50dfb38540ce0ab973953418e0f9a299b 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/HelperBase.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/HelperBase.java @@ -14,7 +14,7 @@ public abstract class HelperBase { /** * Configure this bean to query a particular router context * - * @param contextId begging few characters of the routerHash, or null to pick + * @param contextId beginning few characters of the routerHash, or null to pick * the first one we come across. */ public void setContextId(String contextId) { @@ -25,5 +25,8 @@ public abstract class HelperBase { } } + /** might be useful in the jsp's */ + //public RouterContext getContext() { return _context; } + public void setWriter(Writer out) { _out = out; } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java index bbf9852c3905fd908a3585b36eb5be71a7ce3241..22ee8a38b456e927a15f2a24bd1ccfd1f228aa26 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java @@ -205,6 +205,7 @@ public class RouterConsoleRunner { } } +/******* public void stopConsole() { try { _server.stop(); @@ -212,6 +213,7 @@ public class RouterConsoleRunner { ie.printStackTrace(); } } +********/ public static Properties webAppProperties() { Properties rv = new Properties(); diff --git a/router/java/src/net/i2p/router/CommSystemFacade.java b/router/java/src/net/i2p/router/CommSystemFacade.java index e8a45724e0a12af3179c821395d4e5fe9f0624e2..407cb28b21347cfb2c6f04499c8fbfa5f300f655 100644 --- a/router/java/src/net/i2p/router/CommSystemFacade.java +++ b/router/java/src/net/i2p/router/CommSystemFacade.java @@ -64,7 +64,9 @@ public abstract class CommSystemFacade implements Service { public void queueLookup(byte[] ip) {} public String getCountry(Hash peer) { return null; } public String getCountryName(String code) { return code; } - public String renderPeerHTML(Hash peer) { return null; } + public String renderPeerHTML(Hash peer) { + return peer.toBase64().substring(0, 4); + } /** * Tell other transports our address changed diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java index 621ec27369be33f7aea63ead8a378a4d5fdd337a..644dcbb39c4fa44649f6a64ec53928b9c3b29bee 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java @@ -481,6 +481,8 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { private static final long PUBLISH_DELAY = 3*1000; public void publish(LeaseSet localLeaseSet) { if (!_initialized) return; + if (_context.router().gracefulShutdownInProgress()) + return; Hash h = localLeaseSet.getDestination().calculateHash(); try { store(h, localLeaseSet); @@ -517,6 +519,8 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { */ public void publish(RouterInfo localRouterInfo) throws IllegalArgumentException { if (!_initialized) return; + if (_context.router().gracefulShutdownInProgress()) + return; // This isn't really used for anything // writeMyInfo(localRouterInfo); if (_context.router().isHidden()) return; // DE-nied! @@ -1072,6 +1076,10 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { out.flush(); } + /** + * Be careful to use stripHTML for any displayed routerInfo data + * to prevent vulnerabilities + */ private void renderRouterInfo(StringBuilder buf, RouterInfo info, boolean isUs, boolean full) { String hash = info.getIdentity().getHash().toBase64(); buf.append("<a name=\"").append(hash.substring(0, 6)).append("\" ></a>"); @@ -1096,7 +1104,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { } for (Iterator iter = info.getAddresses().iterator(); iter.hasNext(); ) { RouterAddress addr = (RouterAddress)iter.next(); - buf.append(addr.getTransportStyle()).append(": "); + buf.append(DataHelper.stripHTML(addr.getTransportStyle())).append(": "); for (Iterator optIter = addr.getOptions().keySet().iterator(); optIter.hasNext(); ) { String name = (String)optIter.next(); String val = addr.getOptions().getProperty(name); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/StartExplorersJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/StartExplorersJob.java index 25b82e6976448338fa18f743269508077e31de57..bb09e6e2d270c8b14e07b4c643cd12d3b9185e57 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/StartExplorersJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/StartExplorersJob.java @@ -42,7 +42,8 @@ class StartExplorersJob extends JobImpl { public String getName() { return "Start Explorers Job"; } public void runJob() { - if (! ((FloodfillNetworkDatabaseFacade)_facade).floodfillEnabled()) { + if (! (((FloodfillNetworkDatabaseFacade)_facade).floodfillEnabled() || + getContext().router().gracefulShutdownInProgress())) { Set toExplore = selectKeysToExplore(); if (_log.shouldLog(Log.DEBUG)) _log.debug("Keys to explore during this run: " + toExplore); diff --git a/router/java/src/net/i2p/router/transport/VMCommSystem.java b/router/java/src/net/i2p/router/transport/VMCommSystem.java index ab16b8c797741be8af18705488fa8ee96cf4d69b..bbaefc3c3bd3f89859950e76e461fd3b001aa942 100644 --- a/router/java/src/net/i2p/router/transport/VMCommSystem.java +++ b/router/java/src/net/i2p/router/transport/VMCommSystem.java @@ -1,7 +1,9 @@ package net.i2p.router.transport; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.io.OutputStream; +import java.io.Writer; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -150,5 +152,7 @@ public class VMCommSystem extends CommSystemFacade { _commSystemFacades.put(_context.routerHash(), this); } - public void renderStatusHTML(OutputStream out) {} + public void renderStatusHTML(Writer out, String urlBase, int sortFlags) throws IOException { + out.write("Dummy! i2p.vmCommSystem=true!"); + } } diff --git a/router/java/src/net/i2p/router/tunnel/pool/ExploratoryPeerSelector.java b/router/java/src/net/i2p/router/tunnel/pool/ExploratoryPeerSelector.java index 8971b8ba3efabcbd8eeecc5b55184ab65cde047f..073088fb304f566687adce31106d3e7f1c7ef76d 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/ExploratoryPeerSelector.java +++ b/router/java/src/net/i2p/router/tunnel/pool/ExploratoryPeerSelector.java @@ -73,6 +73,9 @@ class ExploratoryPeerSelector extends TunnelPeerSelector { // no need to explore too wildly at first if (ctx.router().getUptime() <= 5*60*1000) return true; + // or at the end + if (ctx.router().gracefulShutdownInProgress()) + return true; // ok, if we aren't explicitly asking for it, we should try to pick peers // randomly from the 'not failing' pool. However, if we are having a // hard time building exploratory tunnels, lets fall back again on the