diff --git a/apps/routerconsole/java/build.xml b/apps/routerconsole/java/build.xml
index cb7f48468..f1b25fa09 100644
--- a/apps/routerconsole/java/build.xml
+++ b/apps/routerconsole/java/build.xml
@@ -123,7 +123,7 @@
-
+
@@ -169,7 +169,7 @@
-
+
@@ -312,6 +312,7 @@
+
@@ -387,8 +388,7 @@
-
-
+
@@ -427,8 +427,7 @@
-
-
+
diff --git a/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateRunner.java b/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateRunner.java
index d7fc8d09f..5084c4860 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateRunner.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateRunner.java
@@ -16,11 +16,10 @@ import net.i2p.data.DataFormatException;
import net.i2p.data.DataHelper;
import net.i2p.data.SigningPublicKey;
import net.i2p.router.RouterContext;
-import net.i2p.router.web.ConfigClientsHelper;
import net.i2p.router.web.ConfigUpdateHandler;
-import net.i2p.router.web.LogsHelper;
import net.i2p.router.web.Messages;
import net.i2p.router.web.PluginStarter;
+import net.i2p.router.web.RouterConsoleRunner;
import net.i2p.update.*;
import net.i2p.util.EepGet;
import net.i2p.util.FileUtil;
@@ -387,7 +386,7 @@ class PluginUpdateRunner extends UpdateRunner {
_appName = appName;
_newVersion = version;
- String minVersion = ConfigClientsHelper.stripHTML(props, "min-i2p-version");
+ String minVersion = PluginStarter.stripHTML(props, "min-i2p-version");
if (minVersion != null &&
VersionComparator.comp(CoreVersion.VERSION, minVersion) < 0) {
to.delete();
@@ -395,7 +394,7 @@ class PluginUpdateRunner extends UpdateRunner {
return;
}
- minVersion = ConfigClientsHelper.stripHTML(props, "min-java-version");
+ minVersion = PluginStarter.stripHTML(props, "min-java-version");
if (minVersion != null &&
VersionComparator.comp(System.getProperty("java.version"), minVersion) < 0) {
to.delete();
@@ -436,22 +435,22 @@ class PluginUpdateRunner extends UpdateRunner {
statusDone("" + _t("Downloaded plugin version {0} is not newer than installed plugin", version) + "");
return;
}
- minVersion = ConfigClientsHelper.stripHTML(props, "min-installed-version");
+ minVersion = PluginStarter.stripHTML(props, "min-installed-version");
if (minVersion != null &&
VersionComparator.comp(minVersion, oldVersion) > 0) {
to.delete();
statusDone("" + _t("Plugin update requires installed plugin version {0} or higher", minVersion) + "");
return;
}
- String maxVersion = ConfigClientsHelper.stripHTML(props, "max-installed-version");
+ String maxVersion = PluginStarter.stripHTML(props, "max-installed-version");
if (maxVersion != null &&
VersionComparator.comp(maxVersion, oldVersion) < 0) {
to.delete();
statusDone("" + _t("Plugin update requires installed plugin version {0} or lower", maxVersion) + "");
return;
}
- oldVersion = LogsHelper.jettyVersion();
- minVersion = ConfigClientsHelper.stripHTML(props, "min-jetty-version");
+ oldVersion = RouterConsoleRunner.jettyVersion();
+ minVersion = PluginStarter.stripHTML(props, "min-jetty-version");
if (minVersion != null &&
VersionComparator.comp(minVersion, oldVersion) > 0) {
to.delete();
@@ -465,7 +464,7 @@ class PluginUpdateRunner extends UpdateRunner {
statusDone("" + _t("Plugin requires Jetty version {0} or lower", "8.9999") + "");
return;
}
- maxVersion = ConfigClientsHelper.stripHTML(props, "max-jetty-version");
+ maxVersion = PluginStarter.stripHTML(props, "max-jetty-version");
if (maxVersion != null &&
VersionComparator.comp(maxVersion, oldVersion) < 0) {
to.delete();
@@ -536,10 +535,10 @@ class PluginUpdateRunner extends UpdateRunner {
// start everything unless it was disabled and not running before
try {
if (PluginStarter.startPlugin(_context, appName)) {
- String linkName = ConfigClientsHelper.stripHTML(props, "consoleLinkName_" + Messages.getLanguage(_context));
+ String linkName = PluginStarter.stripHTML(props, "consoleLinkName_" + Messages.getLanguage(_context));
if (linkName == null)
- linkName = ConfigClientsHelper.stripHTML(props, "consoleLinkName");
- String linkURL = ConfigClientsHelper.stripHTML(props, "consoleLinkURL");
+ linkName = PluginStarter.stripHTML(props, "consoleLinkName");
+ String linkURL = PluginStarter.stripHTML(props, "consoleLinkURL");
String link;
if (linkName != null && linkURL != null)
link = "" + linkName + ' ' + version + "";
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/App.java b/apps/routerconsole/java/src/net/i2p/router/web/App.java
new file mode 100644
index 000000000..ab46849f1
--- /dev/null
+++ b/apps/routerconsole/java/src/net/i2p/router/web/App.java
@@ -0,0 +1,19 @@
+package net.i2p.router.web;
+
+/**
+ * @since 0.9.33 moved from HomeHelper
+ */
+public class App {
+ public final String name;
+ public final String desc;
+ public final String url;
+ public final String icon;
+
+ public App(String name, String desc, String url, String icon) {
+ this.name = name;
+ this.desc = desc;
+ this.url = url;
+ this.icon = icon;
+ }
+}
+
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java
index 74ad861e1..87bdc9b2f 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java
@@ -18,6 +18,8 @@ public class CSSHelper extends HelperBase {
public static final String PROP_UNIVERSAL_THEMING = "routerconsole.universal.theme";
public static final String PROP_THEME_NAME = "routerconsole.theme";
+ /** @since 0.9.33 moved from ConfigUIHelper */
+ public static final String PROP_THEME_PFX = PROP_THEME_NAME + '.';
public static final String DEFAULT_THEME = "light";
public static final String BASE_THEME_PATH = "/themes/console/";
private static final String FORCE = "classic";
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java
index bd3705b98..7bfc470fe 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java
@@ -5,6 +5,7 @@ import java.io.IOException;
import java.util.List;
import java.util.Properties;
+import net.i2p.I2PAppContext;
import net.i2p.app.ClientApp;
import net.i2p.app.ClientAppManager;
import net.i2p.app.ClientAppState;
@@ -29,6 +30,7 @@ public class ConfigServiceHandler extends FormHandler {
private static final String LISTENER_AVAILABLE = "3.2.0";
private static final String PROPERTIES_AVAILABLE = "3.2.0";
+ private static final String LOCATION_AVAILABLE = "3.3.7";
/**
* Register two shutdown hooks, one to rekey and/or tell the wrapper we are stopping,
@@ -264,7 +266,7 @@ public class ConfigServiceHandler extends FormHandler {
} catch (Throwable t) {
addFormError("Warning: unable to contact the service manager - " + t.getMessage());
}
- File wlog = LogsHelper.wrapperLogFile(_context);
+ File wlog = wrapperLogFile(_context);
addFormNotice(_t("Threads dumped to {0}", wlog.getAbsolutePath()));
} else if (_t("View console on startup").equals(_action)) {
browseOnStartup(true);
@@ -284,6 +286,37 @@ public class ConfigServiceHandler extends FormHandler {
}
}
+ /**
+ * Does not necessarily exist.
+ *
+ * @return non-null, doesn't necessarily exist
+ * @since 0.9.1, public since 0.9.27, moved from LogsHelper in 0.9.33
+ */
+ public static File wrapperLogFile(I2PAppContext ctx) {
+ File f = null;
+ if (ctx.hasWrapper()) {
+ String wv = System.getProperty("wrapper.version");
+ if (wv != null && VersionComparator.comp(wv, LOCATION_AVAILABLE) >= 0) {
+ try {
+ f = WrapperManager.getWrapperLogFile();
+ } catch (Throwable t) {}
+ }
+ }
+ if (f == null || !f.exists()) {
+ // RouterLaunch puts the location here if no wrapper
+ String path = System.getProperty("wrapper.logfile");
+ if (path != null) {
+ f = new File(path);
+ } else {
+ // look in new and old places
+ f = new File(System.getProperty("java.io.tmpdir"), "wrapper.log");
+ if (!f.exists())
+ f = new File(ctx.getBaseDir(), "wrapper.log");
+ }
+ }
+ return f;
+ }
+
private void installService() {
try {
Runtime.getRuntime().exec("install_i2p_service_winnt.bat");
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ContextHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ContextHelper.java
index f6f036bc2..a6a220024 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ContextHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ContextHelper.java
@@ -5,7 +5,7 @@ import java.util.List;
import net.i2p.data.Hash;
import net.i2p.router.RouterContext;
-class ContextHelper {
+public class ContextHelper {
/** @throws IllegalStateException if no context available */
public static RouterContext getContext(String contextId) {
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/GraphConstants.java b/apps/routerconsole/java/src/net/i2p/router/web/GraphConstants.java
new file mode 100644
index 000000000..6cb6e3ff5
--- /dev/null
+++ b/apps/routerconsole/java/src/net/i2p/router/web/GraphConstants.java
@@ -0,0 +1,16 @@
+package net.i2p.router.web;
+
+/**
+ * Basic graph defaults
+ *
+ * @since 0.9.33 pulled out of GraphHelper
+ */
+public class GraphConstants {
+
+ private GraphConstants() {}
+
+ public static final int DEFAULT_X = 400;
+ public static final int DEFAULT_Y = 100;
+ public static final int MAX_X = 2048;
+ public static final int MAX_Y = 1024;
+}
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 b6e710544..8515e4df1 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/HelperBase.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/HelperBase.java
@@ -11,8 +11,10 @@ public abstract class HelperBase {
protected RouterContext _context;
protected Writer _out;
- static final String PROP_ADVANCED = "routerconsole.advanced";
- static final String CHECKED = " checked=\"checked\" ";
+ /** @since public since 0.9.33, was package private */
+ public static final String PROP_ADVANCED = "routerconsole.advanced";
+ /** @since public since 0.9.33, was package private */
+ public static final String CHECKED = " checked=\"checked\" ";
/**
* Configure this bean to query a particular router context
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/Messages.java b/apps/routerconsole/java/src/net/i2p/router/web/Messages.java
index 196bc6ab8..e08eb41d7 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/Messages.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/Messages.java
@@ -9,7 +9,8 @@ import net.i2p.util.Translate;
public class Messages extends Translate {
private static final String BUNDLE_NAME = "net.i2p.router.web.messages";
- static final String COUNTRY_BUNDLE_NAME = "net.i2p.router.countries.messages";
+ /** @since public since 0.9.33, was package private */
+ public static final String COUNTRY_BUNDLE_NAME = "net.i2p.router.countries.messages";
/** lang in routerconsole.lang property, else current locale */
public static String getString(String key, I2PAppContext ctx) {
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NavHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/NavHelper.java
index 9e1393c23..6d71d888f 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/NavHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/NavHelper.java
@@ -7,7 +7,7 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import net.i2p.I2PAppContext;
-import net.i2p.router.web.HomeHelper.App;
+import net.i2p.router.web.App;
public class NavHelper {
private static final Map _apps = new ConcurrentHashMap(4);
@@ -91,12 +91,12 @@ public class NavHelper {
* For HomeHelper
* @param ctx unused
* @return non-null, possibly empty
- * @since 0.9
+ * @since 0.9, public since 0.9.33, was package private
*/
- static List getClientApps(I2PAppContext ctx) {
+ public static List getClientApps(I2PAppContext ctx) {
if (_apps.isEmpty())
return Collections.emptyList();
- List rv = new ArrayList(_apps.size());
+ List rv = new ArrayList(_apps.size());
for (Map.Entry e : _apps.entrySet()) {
String name = e.getKey();
String path = e.getValue();
@@ -113,7 +113,7 @@ public class NavHelper {
icon = "/themes/console/images/email.png";
else
icon = "/themes/console/images/plugin.png";
- HomeHelper.App app = new HomeHelper.App(name, tip, path, icon);
+ App app = new App(name, tip, path, icon);
rv.add(app);
}
return rv;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java
index c33f0e926..3fa2adece 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java
@@ -87,7 +87,10 @@ public class PluginStarter implements Runnable {
_context = ctx;
}
- static boolean pluginsEnabled(I2PAppContext ctx) {
+ /**
+ * @since public since 0.9.33, was package private
+ */
+ public static boolean pluginsEnabled(I2PAppContext ctx) {
return ctx.getBooleanPropertyDefaultTrue("router.enablePlugins");
}
@@ -106,9 +109,9 @@ public class PluginStarter implements Runnable {
/**
* threaded
- * @since 0.8.13
+ * @since 0.8.13, public since 0.9.33, was package private
*/
- static void updateAll(RouterContext ctx) {
+ public static void updateAll(RouterContext ctx) {
Thread t = new I2PAppThread(new PluginUpdater(ctx), "PluginUpdater", true);
t.start();
}
@@ -316,7 +319,7 @@ public class PluginStarter implements Runnable {
// For the following, we use the exact same translated strings as in PluginUpdateRunner
// to avoid duplication
- String minVersion = ConfigClientsHelper.stripHTML(props, "min-i2p-version");
+ String minVersion = stripHTML(props, "min-i2p-version");
if (minVersion != null &&
VersionComparator.comp(CoreVersion.VERSION, minVersion) < 0) {
String foo = "Plugin " + appName + " requires I2P version " + minVersion + " or higher";
@@ -326,7 +329,7 @@ public class PluginStarter implements Runnable {
throw new Exception(foo);
}
- minVersion = ConfigClientsHelper.stripHTML(props, "min-java-version");
+ minVersion = stripHTML(props, "min-java-version");
if (minVersion != null &&
VersionComparator.comp(System.getProperty("java.version"), minVersion) < 0) {
String foo = "Plugin " + appName + " requires Java version " + minVersion + " or higher";
@@ -336,8 +339,8 @@ public class PluginStarter implements Runnable {
throw new Exception(foo);
}
- String jVersion = LogsHelper.jettyVersion();
- minVersion = ConfigClientsHelper.stripHTML(props, "min-jetty-version");
+ String jVersion = RouterConsoleRunner.jettyVersion();
+ minVersion = stripHTML(props, "min-jetty-version");
if (minVersion != null &&
VersionComparator.comp(minVersion, jVersion) > 0) {
String foo = "Plugin " + appName + " requires Jetty version " + minVersion + " or higher";
@@ -348,7 +351,7 @@ public class PluginStarter implements Runnable {
}
String blacklistVersion = jetty9Blacklist.get(appName);
- String curVersion = ConfigClientsHelper.stripHTML(props, "version");
+ String curVersion = stripHTML(props, "version");
if (blacklistVersion != null &&
VersionComparator.comp(curVersion, blacklistVersion) <= 0) {
String foo = "Plugin " + appName + " requires Jetty version 8.9999 or lower";
@@ -358,7 +361,7 @@ public class PluginStarter implements Runnable {
throw new Exception(foo);
}
- String maxVersion = ConfigClientsHelper.stripHTML(props, "max-jetty-version");
+ String maxVersion = stripHTML(props, "max-jetty-version");
if (maxVersion != null &&
VersionComparator.comp(maxVersion, jVersion) < 0) {
String foo = "Plugin " + appName + " requires Jetty version " + maxVersion + " or lower";
@@ -379,7 +382,7 @@ public class PluginStarter implements Runnable {
String name = tfiles[i].getName();
if (tfiles[i].isDirectory() && (!Arrays.asList(STANDARD_THEMES).contains(tfiles[i]))) {
// deprecated
- ctx.router().setConfigSetting(ConfigUIHelper.PROP_THEME_PFX + name, tfiles[i].getAbsolutePath());
+ ctx.router().setConfigSetting(CSSHelper.PROP_THEME_PFX + name, tfiles[i].getAbsolutePath());
// we don't need to save
}
}
@@ -438,7 +441,7 @@ public class PluginStarter implements Runnable {
}
}
// Check for iconfile in plugin.properties
- String icfile = ConfigClientsHelper.stripHTML(props, "console-icon");
+ String icfile = stripHTML(props, "console-icon");
if (icfile != null && !icfile.contains("..")) {
StringBuilder buf = new StringBuilder(32);
buf.append('/').append(appName);
@@ -481,14 +484,14 @@ public class PluginStarter implements Runnable {
}
}
// add summary bar link
- String name = ConfigClientsHelper.stripHTML(props, "consoleLinkName_" + Messages.getLanguage(ctx));
+ String name = stripHTML(props, "consoleLinkName_" + Messages.getLanguage(ctx));
if (name == null)
- name = ConfigClientsHelper.stripHTML(props, "consoleLinkName");
- String url = ConfigClientsHelper.stripHTML(props, "consoleLinkURL");
+ name = stripHTML(props, "consoleLinkName");
+ String url = stripHTML(props, "consoleLinkURL");
if (name != null && url != null && name.length() > 0 && url.length() > 0) {
- String tip = ConfigClientsHelper.stripHTML(props, "consoleLinkTooltip_" + Messages.getLanguage(ctx));
+ String tip = stripHTML(props, "consoleLinkTooltip_" + Messages.getLanguage(ctx));
if (tip == null)
- tip = ConfigClientsHelper.stripHTML(props, "consoleLinkTooltip");
+ tip = stripHTML(props, "consoleLinkTooltip");
NavHelper.registerApp(name, url, tip, iconfile);
}
@@ -546,9 +549,9 @@ public class PluginStarter implements Runnable {
// remove summary bar link
Properties props = pluginProperties(ctx, appName);
- String name = ConfigClientsHelper.stripHTML(props, "consoleLinkName_" + Messages.getLanguage(ctx));
+ String name = stripHTML(props, "consoleLinkName_" + Messages.getLanguage(ctx));
if (name == null)
- name = ConfigClientsHelper.stripHTML(props, "consoleLinkName");
+ name = stripHTML(props, "consoleLinkName");
if (name != null && name.length() > 0)
NavHelper.unregisterApp(name);
@@ -557,8 +560,11 @@ public class PluginStarter implements Runnable {
return true;
}
- /** @return true on success - caller should call stopPlugin() first */
- static boolean deletePlugin(RouterContext ctx, String appName) throws Exception {
+ /**
+ * @return true on success - caller should call stopPlugin() first
+ * @since public since 0.9.33, was package private
+ */
+ public static boolean deletePlugin(RouterContext ctx, String appName) throws Exception {
Log log = ctx.logManager().getLog(PluginStarter.class);
File pluginDir = new File(ctx.getConfigDir(), PLUGIN_DIR + '/' + appName);
if ((!pluginDir.exists()) || (!pluginDir.isDirectory())) {
@@ -584,7 +590,7 @@ public class PluginStarter implements Runnable {
for (int i = 0; i < tfiles.length; i++) {
String name = tfiles[i].getName();
if (tfiles[i].isDirectory() && (!Arrays.asList(STANDARD_THEMES).contains(tfiles[i]))) {
- removes.add(ConfigUIHelper.PROP_THEME_PFX + name);
+ removes.add(CSSHelper.PROP_THEME_PFX + name);
if (name.equals(current))
changes.put(CSSHelper.PROP_THEME_NAME, CSSHelper.DEFAULT_THEME);
}
@@ -1033,6 +1039,19 @@ public class PluginStarter implements Runnable {
method.invoke(urlClassLoader, new Object[]{u});
}
+ /**
+ * Like in DataHelper but doesn't convert null to ""
+ * There's a lot worse things a plugin could do but...
+ * @since moved from ConfigClientsHelper in 0.9.33
+ */
+ public static String stripHTML(Properties props, String key) {
+ String orig = props.getProperty(key);
+ if (orig == null) return null;
+ String t1 = orig.replace('<', ' ');
+ String rv = t1.replace('>', ' ');
+ return rv;
+ }
+
/**
* translate a string
* @since 0.9.30
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 777edac87..62bc71c19 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java
@@ -288,6 +288,11 @@ public class RouterConsoleRunner implements RouterApp {
return _server;
}
+ /** @since 0.8.13, moved from LogsHelper in 0.9.33 */
+ public static String jettyVersion() {
+ return Server.getVersion();
+ }
+
private void startTrayApp() {
// if no permissions, don't even try
// isLaunchedAsService() always returns true on Linux
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java b/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java
index 4d5a0c979..275d237f0 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java
@@ -13,6 +13,7 @@ import java.util.concurrent.Semaphore;
import net.i2p.data.DataHelper;
import net.i2p.router.RouterContext;
+import static net.i2p.router.web.GraphConstants.*;
import net.i2p.stat.Rate;
import net.i2p.stat.RateStat;
import net.i2p.util.FileUtil;
@@ -79,8 +80,8 @@ public class StatSummarizer implements Runnable {
}
}
- /** @since 0.8.7 */
- static boolean isDisabled() {
+ /** @since 0.8.7, public since 0.9.33, was package private */
+ public static boolean isDisabled() {
return _instance == null || _instance._isDisabled;
}
@@ -96,10 +97,14 @@ public class StatSummarizer implements Runnable {
}
}
- /** list of SummaryListener instances */
- List getListeners() { return _listeners; }
+ /**
+ * List of SummaryListener instances
+ * @since public since 0.9.33, was package private
+ */
+ public List getListeners() { return _listeners; }
- static final String DEFAULT_DATABASES = "bw.sendRate.60000" +
+ /** @since public since 0.9.33, was package private */
+ public static final String DEFAULT_DATABASES = "bw.sendRate.60000" +
",bw.recvRate.60000" +
// ",tunnel.testSuccessTime.60000" +
// ",udp.outboundActiveCount.60000" +
@@ -174,7 +179,7 @@ public class StatSummarizer implements Runnable {
}
public boolean renderPng(Rate rate, OutputStream out) throws IOException {
- return renderPng(rate, out, GraphHelper.DEFAULT_X, GraphHelper.DEFAULT_Y,
+ return renderPng(rate, out, DEFAULT_X, DEFAULT_Y,
false, false, false, false, -1, 0, true);
}
@@ -220,14 +225,14 @@ public class StatSummarizer implements Runnable {
private boolean locked_renderPng(Rate rate, OutputStream out, int width, int height, boolean hideLegend,
boolean hideGrid, boolean hideTitle, boolean showEvents, int periodCount,
int end, boolean showCredit) throws IOException {
- if (width > GraphHelper.MAX_X)
- width = GraphHelper.MAX_X;
+ if (width > MAX_X)
+ width = MAX_X;
else if (width <= 0)
- width = GraphHelper.DEFAULT_X;
- if (height > GraphHelper.MAX_Y)
- height = GraphHelper.MAX_Y;
+ width = DEFAULT_X;
+ if (height > MAX_Y)
+ height = MAX_Y;
else if (height <= 0)
- height = GraphHelper.DEFAULT_Y;
+ height = DEFAULT_Y;
if (end < 0)
end = 0;
for (SummaryListener lsnr : _listeners) {
@@ -321,14 +326,14 @@ public class StatSummarizer implements Runnable {
if (txLsnr == null || rxLsnr == null)
throw new IOException("no rates for combined graph");
- if (width > GraphHelper.MAX_X)
- width = GraphHelper.MAX_X;
+ if (width > MAX_X)
+ width = MAX_X;
else if (width <= 0)
- width = GraphHelper.DEFAULT_X;
- if (height > GraphHelper.MAX_Y)
- height = GraphHelper.MAX_Y;
+ width = DEFAULT_X;
+ if (height > MAX_Y)
+ height = MAX_Y;
else if (height <= 0)
- height = GraphHelper.DEFAULT_Y;
+ height = DEFAULT_Y;
txLsnr.renderPng(out, width, height, hideLegend, hideGrid, hideTitle, showEvents, periodCount,
end, showCredit, rxLsnr, _t("Bandwidth usage"));
return true;
@@ -337,8 +342,9 @@ public class StatSummarizer implements Runnable {
/**
* @param specs statName.period,statName.period,statName.period
* @return list of Rate objects
+ * @since public since 0.9.33, was package private
*/
- Set parseSpecs(String specs) {
+ public Set parseSpecs(String specs) {
if (specs == null)
return Collections.emptySet();
StringTokenizer tok = new StringTokenizer(specs, ",");
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryListener.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryListener.java
index 269488389..26d5d18de 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryListener.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryListener.java
@@ -28,8 +28,9 @@ import org.jrobin.core.Sample;
*
* @since 0.6.1.13
*/
-class SummaryListener implements RateSummaryListener {
- static final String PROP_PERSISTENT = "routerconsole.graphPersistent";
+public class SummaryListener implements RateSummaryListener {
+ /** @since public since 0.9.33, was package private */
+ public static final String PROP_PERSISTENT = "routerconsole.graphPersistent";
/** note that .jrb files are NOT compatible with .rrd files */
static final String RRD_DIR = "rrd";
private static final String RRD_PREFIX = "rrd-";
@@ -51,7 +52,8 @@ class SummaryListener implements RateSummaryListener {
static final int PERIODS = 60 * 24; // 1440
private static final int MIN_ROWS = PERIODS;
- static final int MAX_ROWS = 91 * MIN_ROWS;
+ /** @since public since 0.9.33, was package private */
+ public static final int MAX_ROWS = 91 * MIN_ROWS;
private static final long THREE_MONTHS = 91l * 24 * 60 * 60 * 1000;
public SummaryListener(Rate r) {
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java
index 1c52b64d4..03f7e5435 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java
@@ -18,6 +18,7 @@ import net.i2p.I2PAppContext;
import net.i2p.data.DataHelper;
import net.i2p.router.RouterContext;
import net.i2p.router.util.EventLog;
+import static net.i2p.router.web.GraphConstants.*;
import net.i2p.util.Log;
import net.i2p.util.SystemVersion;
@@ -74,8 +75,8 @@ class SummaryRenderer {
RrdGraphDef def = template.getRrdGraphDef();
def.setTimeSpan(start/1000, end/1000); // ignore the periods in the template
// FIXME not clear how to get the height and width from the template
- int width = GraphHelper.DEFAULT_X;
- int height = GraphHelper.DEFAULT_Y;
+ int width = DEFAULT_X;
+ int height = DEFAULT_Y;
def.setWidth(width);
def.setHeight(height);
@@ -97,7 +98,7 @@ class SummaryRenderer {
*****/
}
- public void render(OutputStream out) throws IOException { render(out, GraphHelper.DEFAULT_X, GraphHelper.DEFAULT_Y,
+ public void render(OutputStream out) throws IOException { render(out, DEFAULT_X, DEFAULT_Y,
false, false, false, false, -1, 0, false); }
/**
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/WebAppStarter.java b/apps/routerconsole/java/src/net/i2p/router/web/WebAppStarter.java
index 884a88cbc..f4042b253 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/WebAppStarter.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/WebAppStarter.java
@@ -52,8 +52,9 @@ public class WebAppStarter {
* Prior to 0.9.28, was not guaranteed to throw on failure.
*
* @throws Exception just about anything, caller would be wise to catch Throwable
+ * @since public since 0.9.33, was package private
*/
- static void startWebApp(RouterContext ctx, ContextHandlerCollection server,
+ public static void startWebApp(RouterContext ctx, ContextHandlerCollection server,
String appName, String warPath) throws Exception {
File tmpdir = new SecureDirectory(ctx.getTempDir(), "jetty-work-" + appName + ctx.random().nextInt());
WebAppContext wac = addWebApp(ctx, server, appName, warPath, tmpdir);
@@ -138,8 +139,9 @@ public class WebAppStarter {
/**
* Stop it and remove the context.
* Throws just about anything, caller would be wise to catch Throwable
+ * @since public since 0.9.33, was package private
*/
- static void stopWebApp(String appName) {
+ public static void stopWebApp(String appName) {
ContextHandler wac = getWebApp(appName);
if (wac == null)
return;
@@ -156,7 +158,8 @@ public class WebAppStarter {
} catch (IllegalStateException ise) {}
}
- static boolean isWebAppRunning(String appName) {
+ /** @since public since 0.9.33; was package private */
+ public static boolean isWebAppRunning(String appName) {
ContextHandler wac = getWebApp(appName);
if (wac == null)
return false;
@@ -182,8 +185,11 @@ public class WebAppStarter {
return null;
}
- /** see comments in ConfigClientsHandler */
- static ContextHandlerCollection getConsoleServer() {
+ /**
+ * See comments in ConfigClientsHandler
+ * @since public since 0.9.33, was package private
+ */
+ public static ContextHandlerCollection getConsoleServer() {
Server s = RouterConsoleRunner.getConsoleServer();
if (s == null)
return null;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/BanlistRenderer.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/BanlistRenderer.java
index a137aff57..64a530a8c 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/BanlistRenderer.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
/*
* free (adj.): unencumbered; not under the control of others
* Written by jrandom in 2003 and released into the public domain
@@ -20,6 +20,7 @@ import net.i2p.data.DataHelper;
import net.i2p.data.Hash;
import net.i2p.router.RouterContext;
import net.i2p.router.Banlist;
+import net.i2p.router.web.Messages;
/**
* Moved from Banlist.java
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/CertHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/CertHelper.java
similarity index 97%
rename from apps/routerconsole/java/src/net/i2p/router/web/CertHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/CertHelper.java
index 444188c49..4860a3d73 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/CertHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/CertHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.File;
import java.io.IOException;
@@ -6,6 +6,7 @@ import java.io.IOException;
import net.i2p.data.DataHelper;
import net.i2p.util.FileUtil;
import net.i2p.router.crypto.FamilyKeyCrypto;
+import net.i2p.router.web.HelperBase;
/**
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/CodedIconRendererServlet.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/CodedIconRendererServlet.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/CodedIconRendererServlet.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/CodedIconRendererServlet.java
index f85c3d488..de9d56282 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/CodedIconRendererServlet.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/CodedIconRendererServlet.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.File;
import java.io.IOException;
@@ -15,6 +15,7 @@ import javax.servlet.ServletResponse;
import net.i2p.I2PAppContext;
import net.i2p.data.Base64;
+import net.i2p.router.web.NavHelper;
import net.i2p.util.FileUtil;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigAdvancedHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigAdvancedHandler.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigAdvancedHandler.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigAdvancedHandler.java
index c66436216..c5c7cc921 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigAdvancedHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigAdvancedHandler.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -10,6 +10,7 @@ import java.util.Set;
import net.i2p.data.DataHelper;
import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade;
+import net.i2p.router.web.FormHandler;
/**
* Handler to deal with form submissions from the advanced config form and act
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigAdvancedHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigAdvancedHelper.java
similarity index 94%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigAdvancedHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigAdvancedHelper.java
index fd258828c..e8bf299e3 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigAdvancedHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigAdvancedHelper.java
@@ -1,9 +1,10 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.util.Map;
import java.util.TreeMap;
import net.i2p.data.DataHelper;
+import net.i2p.router.web.HelperBase;
public class ConfigAdvancedHelper extends HelperBase {
static final String PROP_FLOODFILL_PARTICIPANT = "router.floodfillParticipant";
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHandler.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHandler.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHandler.java
index a40c64531..8ee551541 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHandler.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.BufferedOutputStream;
import java.io.File;
@@ -24,6 +24,15 @@ import net.i2p.router.startup.ClientAppConfig;
import net.i2p.router.startup.LoadClientAppsJob;
import net.i2p.router.update.ConsoleUpdateManager;
import static net.i2p.update.UpdateType.*;
+import net.i2p.router.web.ConfigUpdateHandler;
+import net.i2p.router.web.ConsolePasswordManager;
+import net.i2p.router.web.FormHandler;
+import net.i2p.router.web.Messages;
+import net.i2p.router.web.NewsHelper;
+import net.i2p.router.web.PluginStarter;
+import net.i2p.router.web.RouterConsoleRunner;
+import net.i2p.router.web.UpdateHandler;
+import net.i2p.router.web.WebAppStarter;
import net.i2p.util.SecureFileOutputStream;
import net.i2p.util.PortMapper;
@@ -529,7 +538,7 @@ public class ConfigClientsHandler extends FormHandler {
}
// So that update() will post a status to the summary bar before we reload
try {
- Thread.sleep(1000);
+ Thread.sleep(5000);
} catch (InterruptedException ie) {}
}
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHelper.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHelper.java
index 8602ac319..a6792e946 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.text.Collator;
import java.text.SimpleDateFormat;
@@ -18,6 +18,11 @@ import net.i2p.data.DataHelper;
import net.i2p.router.client.ClientManagerFacadeImpl;
import net.i2p.router.startup.ClientAppConfig;
import net.i2p.router.startup.LoadClientAppsJob;
+import net.i2p.router.web.HelperBase;
+import net.i2p.router.web.Messages;
+import net.i2p.router.web.PluginStarter;
+import net.i2p.router.web.RouterConsoleRunner;
+import net.i2p.router.web.WebAppStarter;
import net.i2p.util.Addresses;
public class ConfigClientsHelper extends HelperBase {
@@ -389,10 +394,6 @@ public class ConfigClientsHelper extends HelperBase {
* There's a lot worse things a plugin could do but...
*/
public static String stripHTML(Properties props, String key) {
- String orig = props.getProperty(key);
- if (orig == null) return null;
- String t1 = orig.replace('<', ' ');
- String rv = t1.replace('>', ' ');
- return rv;
+ return PluginStarter.stripHTML(props, key);
}
}
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigFamilyHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigFamilyHandler.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigFamilyHandler.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigFamilyHandler.java
index 7efca8b74..755aedb64 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigFamilyHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigFamilyHandler.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.File;
import java.io.InputStream;
@@ -14,6 +14,7 @@ import java.util.Map;
import net.i2p.crypto.CertUtil;
import net.i2p.crypto.KeyStoreUtil;
import net.i2p.router.crypto.FamilyKeyCrypto;
+import net.i2p.router.web.FormHandler;
import net.i2p.util.SecureDirectory;
/**
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigFamilyHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigFamilyHelper.java
similarity index 82%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigFamilyHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigFamilyHelper.java
index ede566ec6..1536d0ef9 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigFamilyHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigFamilyHelper.java
@@ -1,6 +1,7 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import net.i2p.router.crypto.FamilyKeyCrypto;
+import net.i2p.router.web.HelperBase;
/**
* @since 0.9.25
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigHomeHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigHomeHandler.java
similarity index 87%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigHomeHandler.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigHomeHandler.java
index f26b182a0..a653f057b 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigHomeHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigHomeHandler.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.util.Collection;
import java.util.HashSet;
@@ -6,6 +6,8 @@ import java.util.Iterator;
import java.util.Set;
import net.i2p.data.DataHelper;
+import net.i2p.router.web.App;
+import net.i2p.router.web.FormHandler;
/**
* Simple home page configuration.
@@ -52,7 +54,7 @@ public class ConfigHomeHandler extends FormHandler {
return;
}
String config = _context.getProperty(prop, dflt);
- Collection apps;
+ Collection apps;
if ("3".equals(group))
apps = HomeHelper.buildSearchApps(config);
else
@@ -73,13 +75,13 @@ public class ConfigHomeHandler extends FormHandler {
//url = DataHelper.escapeHTML(url).replace(",", ",");
name = name.replace(",", ".");
url = url.replace(",", "."); // fail
- HomeHelper.App app = null;
+ App app = null;
if ("1".equals(group))
- app = new HomeHelper.App(name, "", url, "/themes/console/images/eepsite.png");
+ app = new App(name, "", url, "/themes/console/images/eepsite.png");
else if ("2".equals(group))
- app = new HomeHelper.App(name, "", url, "/themes/console/images/title_window.png");
+ app = new App(name, "", url, "/themes/console/images/title_window.png");
else
- app = new HomeHelper.App(name, "", url, "/themes/console/images/question.png");
+ app = new App(name, "", url, "/themes/console/images/question.png");
apps.add(app);
addFormNotice(_t("Added") + ": " + app.name);
} else {
@@ -94,8 +96,8 @@ public class ConfigHomeHandler extends FormHandler {
k = k.substring(7);
toDelete.add(k);
}
- for (Iterator iter = apps.iterator(); iter.hasNext(); ) {
- HomeHelper.App app = iter.next();
+ for (Iterator iter = apps.iterator(); iter.hasNext(); ) {
+ App app = iter.next();
if (toDelete.contains(app.name)) {
iter.remove();
addFormNotice(_t("Removed") + ": " + app.name);
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigKeyringHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigKeyringHandler.java
similarity index 96%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigKeyringHandler.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigKeyringHandler.java
index b5930895b..f29b107b9 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigKeyringHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigKeyringHandler.java
@@ -1,8 +1,9 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import net.i2p.data.DataFormatException;
import net.i2p.data.Hash;
import net.i2p.data.SessionKey;
+import net.i2p.router.web.FormHandler;
import net.i2p.util.ConvertToHash;
/**
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigKeyringHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigKeyringHelper.java
similarity index 85%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigKeyringHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigKeyringHelper.java
index cf0a5be4b..869a36f2e 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigKeyringHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigKeyringHelper.java
@@ -1,8 +1,10 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import java.io.StringWriter;
+import net.i2p.router.web.HelperBase;
+
public class ConfigKeyringHelper extends HelperBase {
public ConfigKeyringHelper() {}
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigLoggingHandler.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHandler.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigLoggingHandler.java
index f574ab85a..5543883af 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigLoggingHandler.java
@@ -1,10 +1,11 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Properties;
import net.i2p.data.DataHelper;
+import net.i2p.router.web.FormHandler;
import net.i2p.util.LogManager;
/**
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigLoggingHelper.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigLoggingHelper.java
index 30bf9553a..3a78adc4c 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigLoggingHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.File;
import java.util.List;
@@ -7,6 +7,7 @@ import java.util.Set;
import java.util.TreeSet;
import net.i2p.data.DataHelper;
+import net.i2p.router.web.HelperBase;
import net.i2p.util.Log;
public class ConfigLoggingHelper extends HelperBase {
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNavHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigNavHelper.java
similarity index 95%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigNavHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigNavHelper.java
index 769c75f36..6c26d7af6 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNavHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigNavHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import java.text.Collator;
@@ -8,6 +8,10 @@ import java.util.Comparator;
import java.util.List;
import java.util.Locale;
+import net.i2p.router.web.HelperBase;
+import net.i2p.router.web.Messages;
+import net.i2p.router.web.PluginStarter;
+
/**
* Render the configuration menu at the top of all the config pages.
* refactored from confignav.jsp to reduce size and make translation easier
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigNetHandler.java
similarity index 99%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigNetHandler.java
index 4ea02a815..bcac4198f 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigNetHandler.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.util.ArrayList;
import java.util.Collections;
@@ -15,6 +15,7 @@ import net.i2p.router.transport.TransportManager;
import net.i2p.router.transport.TransportUtil;
import net.i2p.router.transport.udp.UDPTransport;
import net.i2p.router.web.ConfigServiceHandler;
+import net.i2p.router.web.FormHandler;
import net.i2p.util.Addresses;
/**
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigNetHelper.java
similarity index 99%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigNetHelper.java
index 7127584c4..f1593d488 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigNetHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.util.Collections;
import java.util.HashSet;
@@ -12,6 +12,7 @@ import net.i2p.router.Router;
import net.i2p.router.transport.TransportManager;
import net.i2p.router.transport.TransportUtil;
import net.i2p.router.transport.udp.UDPTransport;
+import net.i2p.router.web.HelperBase;
import net.i2p.util.Addresses;
/**
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigPeerHandler.java
similarity index 97%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHandler.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigPeerHandler.java
index 47f9e3f1b..1b29feb4d 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigPeerHandler.java
@@ -1,8 +1,9 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import net.i2p.data.Hash;
import net.i2p.data.Base64;
import net.i2p.router.peermanager.PeerProfile;
+import net.i2p.router.web.FormHandler;
/**
*
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigPeerHelper.java
similarity index 85%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigPeerHelper.java
index fe532d470..49dce3f32 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigPeerHelper.java
@@ -1,8 +1,10 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import java.io.StringWriter;
+import net.i2p.router.web.HelperBase;
+
public class ConfigPeerHelper extends HelperBase {
public ConfigPeerHelper() {}
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigReseedHandler.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHandler.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigReseedHandler.java
index faa007552..bf88bd37d 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigReseedHandler.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.InputStream;
import java.io.IOException;
@@ -11,6 +11,8 @@ import java.util.Map;
import net.i2p.router.networkdb.reseed.ReseedChecker;
import net.i2p.router.networkdb.reseed.Reseeder;
+import net.i2p.router.web.FormHandler;
+import net.i2p.router.web.Messages;
/**
* @since 0.8.3
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigReseedHelper.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigReseedHelper.java
index 4cf8e3321..da124e20f 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigReseedHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.util.ArrayList;
import java.util.Collections;
@@ -6,6 +6,7 @@ import java.util.List;
import java.util.StringTokenizer;
import net.i2p.router.networkdb.reseed.Reseeder;
+import net.i2p.router.web.HelperBase;
/**
* @since 0.8.3
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigRestartBean.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigRestartBean.java
similarity index 97%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigRestartBean.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigRestartBean.java
index 5b067a914..6c8218a29 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigRestartBean.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigRestartBean.java
@@ -1,8 +1,11 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import net.i2p.data.DataHelper;
import net.i2p.router.Router;
import net.i2p.router.RouterContext;
+import net.i2p.router.web.ConfigServiceHandler;
+import net.i2p.router.web.ContextHelper;
+import net.i2p.router.web.Messages;
import net.i2p.util.RandomSource;
/**
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigStatsHandler.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigStatsHandler.java
index b218a18f2..61cdd6e03 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigStatsHandler.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.util.ArrayList;
import java.util.HashMap;
@@ -6,6 +6,7 @@ import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
+import net.i2p.router.web.FormHandler;
import net.i2p.stat.StatManager;
/**
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigStatsHelper.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigStatsHelper.java
index 1f155442a..8e7ba3faf 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigStatsHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.text.Collator;
import java.util.ArrayList;
@@ -11,6 +11,8 @@ import java.util.SortedSet;
import java.util.StringTokenizer;
import java.util.TreeMap;
+import net.i2p.router.web.HelperBase;
+import net.i2p.router.web.StatSummarizer;
import net.i2p.stat.FrequencyStat;
import net.i2p.stat.Rate;
import net.i2p.stat.RateStat;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigSummaryHandler.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigSummaryHandler.java
index 4dc34fb9f..fdffba420 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigSummaryHandler.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.util.HashSet;
import java.util.Iterator;
@@ -7,6 +7,9 @@ import java.util.Set;
import java.util.TreeMap;
import net.i2p.data.DataHelper;
+import net.i2p.router.web.CSSHelper;
+import net.i2p.router.web.FormHandler;
+
/**
* Simple summary bar configuration.
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigTunnelsHandler.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHandler.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigTunnelsHandler.java
index bbc93dab2..b15d9f48d 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigTunnelsHandler.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.util.HashMap;
import java.util.Map;
@@ -6,6 +6,7 @@ import java.util.Map;
import net.i2p.data.DataFormatException;
import net.i2p.data.Hash;
import net.i2p.router.TunnelPoolSettings;
+import net.i2p.router.web.FormHandler;
import net.i2p.util.Log;
/**
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigTunnelsHelper.java
similarity index 99%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigTunnelsHelper.java
index 2a0e6b054..2bce1cb59 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigTunnelsHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.util.Properties;
import java.util.Set;
@@ -6,6 +6,7 @@ import java.util.Set;
import net.i2p.data.DataHelper;
import net.i2p.data.Destination;
import net.i2p.router.TunnelPoolSettings;
+import net.i2p.router.web.HelperBase;
public class ConfigTunnelsHelper extends HelperBase {
private static final String HOP = "hop";
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigUIHandler.java
similarity index 96%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigUIHandler.java
index 7b319237f..c1d0505aa 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigUIHandler.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.util.ArrayList;
import java.util.HashMap;
@@ -6,6 +6,11 @@ import java.util.List;
import java.util.Map;
import net.i2p.data.DataHelper;
+import net.i2p.router.web.CSSHelper;
+import net.i2p.router.web.ConsolePasswordManager;
+import net.i2p.router.web.RouterConsoleRunner;
+import net.i2p.router.web.FormHandler;
+
/** set the theme */
public class ConfigUIHandler extends FormHandler {
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigUIHelper.java
similarity index 95%
rename from apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigUIHelper.java
index 9c847664a..da73d70d5 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigUIHelper.java
@@ -1,10 +1,16 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.File;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
+import net.i2p.router.web.CSSHelper;
+import net.i2p.router.web.ConsolePasswordManager;
+import net.i2p.router.web.HelperBase;
+import net.i2p.router.web.Messages;
+import net.i2p.router.web.RouterConsoleRunner;
+
public class ConfigUIHelper extends HelperBase {
public String getSettings() {
@@ -56,8 +62,6 @@ public class ConfigUIHelper extends HelperBase {
return buf.toString();
}
- static final String PROP_THEME_PFX = "routerconsole.theme.";
-
/** @return standard and user-installed themes, sorted (untranslated) */
private Set themeSet() {
Set rv = new TreeSet();
@@ -75,8 +79,8 @@ public class ConfigUIHelper extends HelperBase {
// user themes
Set props = _context.getPropertyNames();
for (String prop : props) {
- if (prop.startsWith(PROP_THEME_PFX) && prop.length() > PROP_THEME_PFX.length())
- rv.add(prop.substring(PROP_THEME_PFX.length()));
+ if (prop.startsWith(CSSHelper.PROP_THEME_PFX) && prop.length() > CSSHelper.PROP_THEME_PFX.length())
+ rv.add(prop.substring(CSSHelper.PROP_THEME_PFX.length()));
}
return rv;
}
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/EventLogHelper.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/EventLogHelper.java
index 02d88de9a..e7c0e4312 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/EventLogHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import java.io.Writer;
@@ -16,6 +16,8 @@ import java.util.TreeMap;
import net.i2p.data.DataHelper;
import net.i2p.router.util.EventLog;
+import net.i2p.router.web.CSSHelper;
+import net.i2p.router.web.FormHandler;
import net.i2p.util.SystemVersion;
/**
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/FileDumpHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/FileDumpHelper.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/FileDumpHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/FileDumpHelper.java
index 3d3a10034..be44d4c2f 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/FileDumpHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/FileDumpHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.File;
import java.io.FileInputStream;
@@ -18,6 +18,8 @@ import java.util.jar.Manifest;
import net.i2p.crypto.SHA256Generator;
import net.i2p.data.DataHelper;
+import net.i2p.router.web.HelperBase;
+import net.i2p.router.web.PluginStarter;
import net.i2p.util.FileUtil;
import net.i2p.util.SystemVersion;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/GraphHelper.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/GraphHelper.java
index 9dde3f8a1..30fd9678e 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/GraphHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import java.io.Serializable;
@@ -11,6 +11,13 @@ import java.util.Set;
import java.util.TreeSet;
import net.i2p.data.DataHelper;
+import net.i2p.router.web.CSSHelper;
+import net.i2p.router.web.FormHandler;
+import static net.i2p.router.web.GraphConstants.*;
+import net.i2p.router.web.HelperBase;
+import net.i2p.router.web.NavHelper;
+import net.i2p.router.web.StatSummarizer;
+import net.i2p.router.web.SummaryListener;
import net.i2p.stat.Rate;
/**
@@ -34,13 +41,9 @@ public class GraphHelper extends FormHandler {
private static final String PROP_PERIODS = "routerconsole.graphPeriods";
private static final String PROP_EVENTS = "routerconsole.graphEvents";
private static final String PROP_LEGEND = "routerconsole.graphHideLegend";
- public static final int DEFAULT_X = 400;
- public static final int DEFAULT_Y = 100;
private static final int DEFAULT_REFRESH = 5*60;
private static final int DEFAULT_PERIODS = 60;
private static final boolean DEFAULT_LEGEND = false;
- static final int MAX_X = 2048;
- static final int MAX_Y = 1024;
private static final int MIN_X = 200;
private static final int MIN_Y = 60;
private static final int MIN_C = 20;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/HomeHelper.java
similarity index 97%
rename from apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/HomeHelper.java
index 3e017e2ee..b9f191838 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/HomeHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.Serializable;
import java.util.Collection;
@@ -9,6 +9,11 @@ import java.util.TreeSet;
import net.i2p.data.DataHelper;
import net.i2p.router.RouterContext;
+import net.i2p.router.web.App;
+import net.i2p.router.web.ConfigUpdateHandler;
+import net.i2p.router.web.HelperBase;
+import net.i2p.router.web.Messages;
+import net.i2p.router.web.NavHelper;
import net.i2p.util.PortMapper;
/**
@@ -250,20 +255,6 @@ public class HomeHelper extends HelperBase {
return buf.toString();
}
- static class App {
- public final String name;
- public final String desc;
- public final String url;
- public final String icon;
-
- public App(String name, String desc, String url, String icon) {
- this.name = name;
- this.desc = desc;
- this.url = url;
- this.icon = icon;
- }
- }
-
/** ignore case, current locale */
private static class AppComparator implements Comparator, Serializable {
public int compare(App l, App r) {
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/JobQueueHelper.java
similarity index 99%
rename from apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/JobQueueHelper.java
index 2dcd3eeff..a9e25cfe6 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/JobQueueHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import java.io.StringWriter;
@@ -12,6 +12,7 @@ import java.util.List;
import net.i2p.data.DataHelper;
import net.i2p.router.Job;
import net.i2p.router.JobStats;
+import net.i2p.router.web.HelperBase;
import net.i2p.util.ObjectCounter;
public class JobQueueHelper extends HelperBase {
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/LogsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/LogsHelper.java
similarity index 83%
rename from apps/routerconsole/java/src/net/i2p/router/web/LogsHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/LogsHelper.java
index f79910b0a..48a0f5183 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/LogsHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/LogsHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.BufferedReader;
import java.io.File;
@@ -11,25 +11,18 @@ import java.util.List;
import net.i2p.I2PAppContext;
import net.i2p.crypto.SigType;
+import net.i2p.router.web.ConfigServiceHandler;
+import net.i2p.router.web.HelperBase;
+import net.i2p.router.web.RouterConsoleRunner;
import net.i2p.util.FileUtil;
-import net.i2p.util.VersionComparator;
-
-import org.eclipse.jetty.server.Server;
-import org.tanukisoftware.wrapper.WrapperManager;
public class LogsHelper extends HelperBase {
- private static final String LOCATION_AVAILABLE = "3.3.7";
private static final String _jstlVersion = jstlVersion();
/** @since 0.8.12 */
public String getJettyVersion() {
- return Server.getVersion();
- }
-
- /** @since 0.8.13 */
- public static String jettyVersion() {
- return Server.getVersion();
+ return RouterConsoleRunner.jettyVersion();
}
/** @since 0.9.15 */
@@ -85,40 +78,9 @@ public class LogsHelper extends HelperBase {
_context.logManager().flush();
return formatMessages(_context.logManager().getBuffer().getMostRecentCriticalMessages());
}
-
- /**
- * Does not necessarily exist.
- *
- * @return non-null, doesn't necessarily exist
- * @since 0.9.1, public since 0.9.27
- */
- public static File wrapperLogFile(I2PAppContext ctx) {
- File f = null;
- if (ctx.hasWrapper()) {
- String wv = System.getProperty("wrapper.version");
- if (wv != null && VersionComparator.comp(wv, LOCATION_AVAILABLE) >= 0) {
- try {
- f = WrapperManager.getWrapperLogFile();
- } catch (Throwable t) {}
- }
- }
- if (f == null || !f.exists()) {
- // RouterLaunch puts the location here if no wrapper
- String path = System.getProperty("wrapper.logfile");
- if (path != null) {
- f = new File(path);
- } else {
- // look in new and old places
- f = new File(System.getProperty("java.io.tmpdir"), "wrapper.log");
- if (!f.exists())
- f = new File(ctx.getBaseDir(), "wrapper.log");
- }
- }
- return f;
- }
public String getServiceLogs() {
- File f = wrapperLogFile(_context);
+ File f = ConfigServiceHandler.wrapperLogFile(_context);
String str;
if (_context.hasWrapper()) {
// platform encoding
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbHelper.java
similarity index 99%
rename from apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbHelper.java
index 31961b11c..802e68ba1 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbHelper.java
@@ -1,8 +1,9 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import net.i2p.crypto.SigType;
import net.i2p.data.DataHelper;
+import net.i2p.router.web.HelperBase;
public class NetDbHelper extends HelperBase {
private String _routerPrefix;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java
similarity index 99%
rename from apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java
index 0cb6035eb..b8576c0b9 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/NetDbRenderer.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
/*
* free (adj.): unencumbered; not under the control of others
* Written by jrandom in 2003 and released into the public domain
@@ -36,6 +36,7 @@ import net.i2p.router.RouterContext;
import net.i2p.router.TunnelPoolSettings;
import net.i2p.router.util.HashDistance; // debug
import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade;
+import net.i2p.router.web.Messages;
import net.i2p.util.Log;
import net.i2p.util.ObjectCounter;
import net.i2p.util.Translate;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/OldConsoleHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/OldConsoleHelper.java
similarity index 97%
rename from apps/routerconsole/java/src/net/i2p/router/web/OldConsoleHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/OldConsoleHelper.java
index 8ddf7b261..17ba10c91 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/OldConsoleHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/OldConsoleHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -10,6 +10,7 @@ import net.i2p.CoreVersion;
import net.i2p.data.DataHelper;
import net.i2p.data.Hash;
import net.i2p.router.RouterVersion;
+import net.i2p.router.web.HelperBase;
public class OldConsoleHelper extends HelperBase {
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/PeerHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java
similarity index 99%
rename from apps/routerconsole/java/src/net/i2p/router/web/PeerHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java
index 80b7a7ac9..d447757ce 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/PeerHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/PeerHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import java.io.Serializable;
@@ -20,7 +20,8 @@ import net.i2p.router.transport.ntcp.NTCPConnection;
import net.i2p.router.transport.ntcp.NTCPTransport;
import net.i2p.router.transport.udp.PeerState;
import net.i2p.router.transport.udp.UDPTransport;
-import static net.i2p.router.web.UDPSorters.*;
+import net.i2p.router.web.HelperBase;
+import static net.i2p.router.web.helpers.UDPSorters.*;
import net.i2p.util.SystemVersion;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ProfileOrganizerRenderer.java
similarity index 99%
rename from apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ProfileOrganizerRenderer.java
index aca298c2f..33cfc05bb 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ProfileOrganizerRenderer.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import java.io.Serializable;
@@ -15,6 +15,8 @@ import net.i2p.router.RouterContext;
import net.i2p.router.peermanager.DBHistory;
import net.i2p.router.peermanager.PeerProfile;
import net.i2p.router.peermanager.ProfileOrganizer;
+import net.i2p.router.web.HelperBase;
+import net.i2p.router.web.Messages;
import net.i2p.stat.Rate;
import net.i2p.stat.RateAverages;
import net.i2p.stat.RateStat;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ProfilesHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ProfilesHelper.java
similarity index 98%
rename from apps/routerconsole/java/src/net/i2p/router/web/ProfilesHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ProfilesHelper.java
index e9a3eb531..b2a72dfaa 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ProfilesHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ProfilesHelper.java
@@ -1,7 +1,9 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
+import net.i2p.router.web.HelperBase;
+
public class ProfilesHelper extends HelperBase {
private int _full;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ProofHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ProofHelper.java
similarity index 94%
rename from apps/routerconsole/java/src/net/i2p/router/web/ProofHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ProofHelper.java
index 01ed5836a..47d3f55cc 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ProofHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ProofHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.util.Date;
@@ -6,6 +6,7 @@ import net.i2p.data.DataHelper;
import net.i2p.data.router.RouterAddress;
import net.i2p.data.router.RouterInfo;
import net.i2p.data.Signature;
+import net.i2p.router.web.HelperBase;
/**
* Sign a statement about this router.
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ReseedBundler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ReseedBundler.java
similarity index 99%
rename from apps/routerconsole/java/src/net/i2p/router/web/ReseedBundler.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ReseedBundler.java
index de94af720..7e5ab857d 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ReseedBundler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ReseedBundler.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
/*
* free (adj.): unencumbered; not under the control of others
* Written by jrandom in 2003 and released into the public domain
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ReseedGenerator.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ReseedGenerator.java
similarity index 80%
rename from apps/routerconsole/java/src/net/i2p/router/web/ReseedGenerator.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ReseedGenerator.java
index 377f6276f..70d993aa5 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ReseedGenerator.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ReseedGenerator.java
@@ -1,8 +1,10 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.File;
import java.io.IOException;
+import net.i2p.router.web.HelperBase;
+
/**
* Handler to create a i2preseed.zip file
* @since 0.9.19
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ReseedHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ReseedHandler.java
similarity index 86%
rename from apps/routerconsole/java/src/net/i2p/router/web/ReseedHandler.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/ReseedHandler.java
index 5d850355e..42b56cc78 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ReseedHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ReseedHandler.java
@@ -1,6 +1,8 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import net.i2p.router.RouterContext;
+import net.i2p.router.web.ContextHelper;
+import net.i2p.router.web.HelperBase;
/**
* Handler to deal with reseed requests.
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SearchHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/SearchHelper.java
similarity index 97%
rename from apps/routerconsole/java/src/net/i2p/router/web/SearchHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/SearchHelper.java
index 4227e002c..63a80d096 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SearchHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/SearchHelper.java
@@ -1,9 +1,10 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.util.Map;
import java.util.TreeMap;
import net.i2p.data.DataHelper;
+import net.i2p.router.web.HelperBase;
/**
* Helper for searches.
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/StatHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/StatHelper.java
similarity index 96%
rename from apps/routerconsole/java/src/net/i2p/router/web/StatHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/StatHelper.java
index 6cfc7bdcf..7a0bf9ed4 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/StatHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/StatHelper.java
@@ -1,10 +1,11 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import java.util.Set;
import net.i2p.data.DataFormatException;
import net.i2p.data.Hash;
+import net.i2p.router.web.HelperBase;
/**
* Dump the peer profile data if given a full B64 peer string or prefix.
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/StatsGenerator.java
similarity index 99%
rename from apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/StatsGenerator.java
index 271a96d55..97f15800f 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/StatsGenerator.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import java.io.Writer;
@@ -13,6 +13,7 @@ import java.util.TreeMap;
import net.i2p.data.DataHelper;
import net.i2p.router.RouterContext;
+import net.i2p.router.web.Messages;
import net.i2p.stat.Frequency;
import net.i2p.stat.FrequencyStat;
import net.i2p.stat.Rate;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/SummaryBarRenderer.java
similarity index 99%
rename from apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/SummaryBarRenderer.java
index 99a650fea..05936e89a 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/SummaryBarRenderer.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.File;
import java.io.IOException;
@@ -16,6 +16,11 @@ import net.i2p.data.DataHelper;
import net.i2p.router.RouterContext;
import net.i2p.router.news.NewsEntry;
import net.i2p.router.news.NewsManager;
+import net.i2p.router.web.CSSHelper;
+import net.i2p.router.web.Messages;
+import net.i2p.router.web.NavHelper;
+import net.i2p.router.web.NewsHelper;
+import net.i2p.router.web.StatSummarizer;
import net.i2p.util.PortMapper;
import net.i2p.util.SystemVersion;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/SummaryHelper.java
similarity index 99%
rename from apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/SummaryHelper.java
index 128e5760e..4596249aa 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/SummaryHelper.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import java.text.Collator;
@@ -25,6 +25,9 @@ import net.i2p.router.TunnelPoolSettings;
import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade;
import net.i2p.router.networkdb.reseed.ReseedChecker;
import net.i2p.router.transport.TransportUtil;
+import net.i2p.router.web.CSSHelper;
+import net.i2p.router.web.HelperBase;
+import net.i2p.router.web.NewsHelper;
import net.i2p.stat.Rate;
import net.i2p.stat.RateStat;
import net.i2p.util.PortMapper;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/SybilRenderer.java
similarity index 99%
rename from apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/SybilRenderer.java
index 3d1e6db0f..1617db76c 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SybilRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/SybilRenderer.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import java.io.Serializable;
@@ -31,6 +31,7 @@ import net.i2p.router.peermanager.DBHistory;
import net.i2p.router.peermanager.PeerProfile;
import net.i2p.router.tunnel.pool.TunnelPool;
import net.i2p.router.util.HashDistance;
+import net.i2p.router.web.Messages;
import net.i2p.stat.Rate;
import net.i2p.stat.RateAverages;
import net.i2p.stat.RateStat;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/TunnelHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/TunnelHelper.java
similarity index 89%
rename from apps/routerconsole/java/src/net/i2p/router/web/TunnelHelper.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/TunnelHelper.java
index c462c75d3..3e31942ce 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/TunnelHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/TunnelHelper.java
@@ -1,8 +1,10 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import java.io.StringWriter;
+import net.i2p.router.web.HelperBase;
+
public class TunnelHelper extends HelperBase {
public TunnelHelper() {}
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/TunnelRenderer.java
similarity index 99%
rename from apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/TunnelRenderer.java
index 91c6404ef..5bf360dd9 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/TunnelRenderer.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import java.io.Serializable;
@@ -18,6 +18,8 @@ import net.i2p.router.RouterContext;
import net.i2p.router.TunnelInfo;
import net.i2p.router.tunnel.HopConfig;
import net.i2p.router.tunnel.pool.TunnelPool;
+import net.i2p.router.web.HelperBase;
+import net.i2p.router.web.Messages;
import net.i2p.stat.RateStat;
/**
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/UDPSorters.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/UDPSorters.java
similarity index 99%
rename from apps/routerconsole/java/src/net/i2p/router/web/UDPSorters.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/UDPSorters.java
index 0a287282d..a7f376e06 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/UDPSorters.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/UDPSorters.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.Serializable;
import java.util.Collections;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/WriterOutputStream.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/WriterOutputStream.java
similarity index 93%
rename from apps/routerconsole/java/src/net/i2p/router/web/WriterOutputStream.java
rename to apps/routerconsole/java/src/net/i2p/router/web/helpers/WriterOutputStream.java
index 0bc2baa66..5973e98ea 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/WriterOutputStream.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/WriterOutputStream.java
@@ -1,4 +1,4 @@
-package net.i2p.router.web;
+package net.i2p.router.web.helpers;
import java.io.IOException;
import java.io.OutputStream;
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/package.html b/apps/routerconsole/java/src/net/i2p/router/web/helpers/package.html
new file mode 100644
index 000000000..4d993801b
--- /dev/null
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/package.html
@@ -0,0 +1,24 @@
+
+
+
+Helpers and handlers for the router console user interface,
+with these classes supporting the webapp in routerconsole.war.
+All of these classes are packaged in routerconsole.war.
+These classes are only accessible from the jsp files.
+
+Most jsp pages in the console use a "Helper" or a "Renderer" class to
+assist in generating the HTML.
+For configuration pages that accept changes via POST, there
+is additionally a "Handler" class to process the POST data.
+Helpers usually extend HelperBase, and Handlers usually extend FormHandler.
+
+This package was created in release 0.9.33 by moving
+these classes from net.i2p.router.web to here,
+and moving them from routerconsole.war to routerconsole.jar.
+
+No classes contained here are part of a public API.
+Subject to change.
+Not for public use.
+
+
+
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/package.html b/apps/routerconsole/java/src/net/i2p/router/web/package.html
index 1926aa394..fcbec937f 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/package.html
+++ b/apps/routerconsole/java/src/net/i2p/router/web/package.html
@@ -4,6 +4,23 @@
The router console user interface, implemented in routerconsole.jar, with these classes
supporting the webapp in routerconsole.war.
Entry point is RouterConsoleRunner, started from clients.config.
+
+Most jsp pages in the console use a "Helper" or a "Renderer" class to
+assist in generating the HTML.
+For configuration pages that accept changes via POST, there
+is additionally a "Handler" class to process the POST data.
+Helpers usually extend HelperBase,
+and Handlers usually extend FormHandler.
+The base classes are in this package, but most Helpers, Handlers, and Renderers are in
+the helpers package.
+
+This package was split in release 0.9.33, with most of the helpers and handlers
+moved to net.i2p.router.web.console,
+and moving them from routerconsole.war to routerconsole.jar.
+
+No classes contained here are part of a public API.
+Subject to change.
+Not for public use.