From 2de36ee343ccb6b77f5891d02a924db19b926db0 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Thu, 11 Oct 2018 13:10:33 +0000 Subject: [PATCH] Console: Remove static Server ref, hang off RCR --- .../src/net/i2p/router/web/PluginStarter.java | 4 ++-- .../i2p/router/web/RouterConsoleRunner.java | 23 +++++++++++++++---- .../src/net/i2p/router/web/WebAppStarter.java | 17 +++++++------- .../web/helpers/ConfigClientsHandler.java | 2 +- .../web/helpers/ConfigClientsHelper.java | 2 +- 5 files changed, 31 insertions(+), 17 deletions(-) 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 cf354d6820..026fa1895e 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java @@ -440,7 +440,7 @@ public class PluginStarter implements Runnable { } // start console webapps in console/webapps - ContextHandlerCollection server = WebAppStarter.getConsoleServer(); + ContextHandlerCollection server = WebAppStarter.getConsoleServer(ctx); if (server != null) { File consoleDir = new File(pluginDir, "console"); Properties wprops = RouterConsoleRunner.webAppProperties(consoleDir.getAbsolutePath()); @@ -951,7 +951,7 @@ public class PluginStarter implements Runnable { Iterator <String> it = pluginWars.get(pluginName).iterator(); while(it.hasNext() && !isWarRunning) { String warName = it.next(); - if(WebAppStarter.isWebAppRunning(warName)) { + if(WebAppStarter.isWebAppRunning(ctx, warName)) { isWarRunning = true; } } 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 46da0de60b..7410e7140d 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java @@ -24,6 +24,7 @@ import java.util.StringTokenizer; import java.util.concurrent.LinkedBlockingQueue; import net.i2p.I2PAppContext; +import net.i2p.app.ClientApp; import net.i2p.app.ClientAppManager; import net.i2p.app.ClientAppState; import static net.i2p.app.ClientAppState.*; @@ -100,7 +101,7 @@ public class RouterConsoleRunner implements RouterApp { private final RouterContext _context; private final ClientAppManager _mgr; private volatile ClientAppState _state = UNINITIALIZED; - private static Server _server; + private Server _server; private static ScheduledExecutorScheduler _jettyTimer; private String _listenPort; private String _listenHost; @@ -116,6 +117,7 @@ public class RouterConsoleRunner implements RouterApp { // default changed from 0 (forever) in Jetty 6 to 60*1000 ms in Jetty 7 authenticator.setMaxNonceAge(7*24*60*60*1000L); } + private static final String NAME = "console"; public static final String JETTY_REALM = "i2prouter"; private static final String JETTY_ROLE = "routerAdmin"; public static final String PROP_CONSOLE_PW = "routerconsole.auth." + JETTY_REALM; @@ -264,7 +266,7 @@ public class RouterConsoleRunner implements RouterApp { /** @since 0.9.4 */ public String getName() { - return "console"; + return NAME; } /** @since 0.9.4 */ @@ -281,14 +283,25 @@ public class RouterConsoleRunner implements RouterApp { } /** - * SInce _server is now static + * To get to Jetty * @return may be null or stopped perhaps * @since Jetty 6 since it doesn't have Server.getServers() */ - static Server getConsoleServer() { + synchronized Server getConsoleServer() { return _server; } + /** + * To get to Jetty + * @return may be null or stopped perhaps + * @since 0.9.38 + */ + static Server getConsoleServer(I2PAppContext ctx) { + ClientApp app = ctx.clientAppManager().getRegisteredApp(NAME); + return (app != null) ? ((RouterConsoleRunner)app).getConsoleServer() : null; + } + + /** @since 0.8.13, moved from LogsHelper in 0.9.33 */ public static String jettyVersion() { return Server.getVersion(); @@ -1113,7 +1126,7 @@ public class RouterConsoleRunner implements RouterApp { String app = name.substring(PREFIX.length(), name.lastIndexOf(ENABLED)); if (ROUTERCONSOLE.equals(app)) continue; - if (WebAppStarter.isWebAppRunning(app)) { + if (WebAppStarter.isWebAppRunning(_context, app)) { try { WebAppStarter.stopWebApp(_context, app); } catch (Throwable t) { t.printStackTrace(); } 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 bfaf9495f4..94ac58d97d 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/WebAppStarter.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/WebAppStarter.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import net.i2p.I2PAppContext; import net.i2p.router.RouterContext; import net.i2p.util.FileUtil; import net.i2p.util.PortMapper; @@ -150,7 +151,7 @@ public class WebAppStarter { * @since public since 0.9.33, was package private */ public static void stopWebApp(RouterContext ctx, String appName) { - ContextHandler wac = getWebApp(appName); + ContextHandler wac = getWebApp(ctx, appName); if (wac == null) return; ctx.portMapper().unregister(appName); @@ -158,7 +159,7 @@ public class WebAppStarter { // not graceful is default in Jetty 6? wac.stop(); } catch (Exception ie) {} - ContextHandlerCollection server = getConsoleServer(); + ContextHandlerCollection server = getConsoleServer(ctx); if (server == null) return; try { @@ -173,16 +174,16 @@ public class WebAppStarter { * * @since public since 0.9.33; was package private */ - public static boolean isWebAppRunning(String appName) { - ContextHandler wac = getWebApp(appName); + public static boolean isWebAppRunning(I2PAppContext ctx, String appName) { + ContextHandler wac = getWebApp(ctx, appName); if (wac == null) return false; return wac.isStarted(); } /** @since Jetty 6 */ - static ContextHandler getWebApp(String appName) { - ContextHandlerCollection server = getConsoleServer(); + static ContextHandler getWebApp(I2PAppContext ctx, String appName) { + ContextHandlerCollection server = getConsoleServer(ctx); if (server == null) return null; Handler handlers[] = server.getHandlers(); @@ -203,8 +204,8 @@ public class WebAppStarter { * See comments in ConfigClientsHandler * @since public since 0.9.33, was package private */ - public static ContextHandlerCollection getConsoleServer() { - Server s = RouterConsoleRunner.getConsoleServer(); + public static ContextHandlerCollection getConsoleServer(I2PAppContext ctx) { + Server s = RouterConsoleRunner.getConsoleServer(ctx); if (s == null) return null; Handler h = s.getChildHandlerByClass(ContextHandlerCollection.class); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHandler.java index 798c96066d..35cbc9ec4e 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHandler.java @@ -387,7 +387,7 @@ public class ConfigClientsHandler extends FormHandler { * requested and add the .war to that one */ private void startWebApp(String app) { - ContextHandlerCollection s = WebAppStarter.getConsoleServer(); + ContextHandlerCollection s = WebAppStarter.getConsoleServer(_context); if (s != null) { try { File path = new File(_context.getBaseDir(), "webapps"); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHelper.java index 7be834986f..0b44f55e0b 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigClientsHelper.java @@ -215,7 +215,7 @@ public class ConfigClientsHelper extends HelperBase { if (name.startsWith(RouterConsoleRunner.PREFIX) && name.endsWith(RouterConsoleRunner.ENABLED)) { String app = name.substring(RouterConsoleRunner.PREFIX.length(), name.lastIndexOf(RouterConsoleRunner.ENABLED)); String val = props.getProperty(name); - boolean isRunning = WebAppStarter.isWebAppRunning(app); + boolean isRunning = WebAppStarter.isWebAppRunning(_context, app); String desc; // use descriptions already tagged elsewhere if (app.equals("routerconsole")) -- GitLab