Console: Split net.i2p.router.web into two packages, and move the new .helper package to the war

This commit is contained in:
zzz
2017-12-01 14:07:29 +00:00
parent 6c56d679ab
commit 9b2a85df38
118 changed files with 478 additions and 281 deletions

View File

@ -123,7 +123,7 @@
<target name="jar1" depends="compile, bundle-news, bundle-countries, jarUpToDate, listChangedFiles" unless="jar.uptodate" >
<!-- set if unset -->
<property name="workspace.changes.j.tr" value="" />
<jar destfile="./build/routerconsole.jar" basedir="./build/obj" includes="**/*.class">
<jar destfile="./build/routerconsole.jar" basedir="./build/obj" excludes="net/i2p/router/web/helpers/*">
<manifest>
<!-- DTG added in 0.8.4, not in the classpath for very old installs, before we changed wrapper.config to specify * -->
<!-- very old installs don't have i2psnark,jstl,standard in the classpath... not added in WebAppConfiguration any more -->
@ -169,7 +169,7 @@
<compilerarg line="${javac.compilerargs}" />
</javac>
<!-- jar again to get the latest messages_*.class files -->
<jar destfile="./build/routerconsole.jar" basedir="./build/obj" includes="**/*.class" update="true" />
<jar destfile="./build/routerconsole.jar" basedir="./build/obj" includes="**/messages_*.class" update="true" />
</target>
<target name="jarUpToDate">
@ -312,6 +312,7 @@
<attribute name="X-Compile-Source-JDK" value="${javac.version}" />
<attribute name="X-Compile-Target-JDK" value="${javac.version}" />
</manifest>
<classes dir="./build/obj" includes="net/i2p/router/web/helpers/*" />
</war>
</target>
@ -387,8 +388,7 @@
<pathelement location="../../systray/java/build/obj" />
<pathelement location="../../desktopgui/dist/desktopgui.jar" />
<pathelement location="../../../installer/lib/wrapper/all/wrapper.jar" />
<pathelement location="build/routerconsole.jar" />
<pathelement location="build/" />
<pathelement location="build/obj/" />
<pathelement location="../../../router/java/build/router.jar" />
<pathelement location="../../../core/java/build/i2p.jar" />
</classpath>
@ -427,8 +427,7 @@
<pathelement location="../../systray/java/build/obj" />
<pathelement location="../../desktopgui/dist/desktopgui.jar" />
<pathelement location="../../../installer/lib/wrapper/all/wrapper.jar" />
<pathelement location="build/routerconsole.jar" />
<pathelement location="build" />
<pathelement location="build/obj/" />
<pathelement location="../../../router/java/build/router.jar" />
<pathelement location="../../../core/java/build/i2p.jar" />
</classpath>

View File

@ -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("<b>" + _t("Downloaded plugin version {0} is not newer than installed plugin", version) + "</b>");
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("<b>" + _t("Plugin update requires installed plugin version {0} or higher", minVersion) + "</b>");
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("<b>" + _t("Plugin update requires installed plugin version {0} or lower", maxVersion) + "</b>");
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("<b>" + _t("Plugin requires Jetty version {0} or lower", "8.9999") + "</b>");
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 = "<a target=\"_blank\" href=\"" + linkURL + "\"/>" + linkName + ' ' + version + "</a>";

View File

@ -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;
}
}

View File

@ -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";

View File

@ -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");

View File

@ -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) {

View File

@ -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;
}

View File

@ -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

View File

@ -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) {

View File

@ -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<String, String> _apps = new ConcurrentHashMap<String, String>(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<HomeHelper.App> getClientApps(I2PAppContext ctx) {
public static List<App> getClientApps(I2PAppContext ctx) {
if (_apps.isEmpty())
return Collections.emptyList();
List<HomeHelper.App> rv = new ArrayList<App>(_apps.size());
List<App> rv = new ArrayList<App>(_apps.size());
for (Map.Entry<String, String> 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;

View File

@ -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

View File

@ -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

View File

@ -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<SummaryListener> getListeners() { return _listeners; }
/**
* List of SummaryListener instances
* @since public since 0.9.33, was package private
*/
public List<SummaryListener> 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<Rate> parseSpecs(String specs) {
public Set<Rate> parseSpecs(String specs) {
if (specs == null)
return Collections.emptySet();
StringTokenizer tok = new StringTokenizer(specs, ",");

View File

@ -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) {

View File

@ -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); }
/**

View File

@ -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;

View File

@ -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

View File

@ -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;
/**

View File

@ -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;

View File

@ -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

View File

@ -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";

View File

@ -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) {}
}

View File

@ -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);
}
}

View File

@ -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;
/**

View File

@ -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

View File

@ -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<HomeHelper.App> apps;
Collection<App> apps;
if ("3".equals(group))
apps = HomeHelper.buildSearchApps(config);
else
@ -73,13 +75,13 @@ public class ConfigHomeHandler extends FormHandler {
//url = DataHelper.escapeHTML(url).replace(",", "&#44;");
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<HomeHelper.App> iter = apps.iterator(); iter.hasNext(); ) {
HomeHelper.App app = iter.next();
for (Iterator<App> iter = apps.iterator(); iter.hasNext(); ) {
App app = iter.next();
if (toDelete.contains(app.name)) {
iter.remove();
addFormNotice(_t("Removed") + ": " + app.name);

View File

@ -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;
/**

View File

@ -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() {}

View File

@ -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;
/**

View File

@ -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 {

View File

@ -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

View File

@ -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;
/**

View File

@ -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;
/**

View File

@ -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;
/**
*

View File

@ -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() {}

View File

@ -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

View File

@ -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

View File

@ -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;
/**

View File

@ -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;
/**

View File

@ -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;

View File

@ -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.

View File

@ -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;
/**

View File

@ -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";

View File

@ -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 {

View File

@ -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<String> themeSet() {
Set<String> rv = new TreeSet<String>();
@ -75,8 +79,8 @@ public class ConfigUIHelper extends HelperBase {
// user themes
Set<String> 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;
}

View File

@ -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;
/**

View File

@ -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;

View File

@ -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;

View File

@ -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<App>, Serializable {
public int compare(App l, App r) {

View File

@ -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 {

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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 {

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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() {}

View File

@ -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;
/**

View File

@ -1,4 +1,4 @@
package net.i2p.router.web;
package net.i2p.router.web.helpers;
import java.io.Serializable;
import java.util.Collections;

View File

@ -1,4 +1,4 @@
package net.i2p.router.web;
package net.i2p.router.web.helpers;
import java.io.IOException;
import java.io.OutputStream;

View File

@ -0,0 +1,24 @@
<html>
<body>
<p>
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.
</p><p>
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.
</p><p>
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.
</p><p>
No classes contained here are part of a public API.
Subject to change.
Not for public use.
</p>
</body>
</html>

View File

@ -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.
</p><p>
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 <a href="HelperBase.html">HelperBase</a>,
and Handlers usually extend <a href="FormHandler.html">FormHandler</a>.
The base classes are in this package, but most Helpers, Handlers, and Renderers are in
<a href="helpers/package-summary.html">the helpers package</a>.
</p><p>
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.
</p><p>
No classes contained here are part of a public API.
Subject to change.
Not for public use.
</p>
</body>
</html>