package net.i2p.desktopgui.router; import java.io.IOException; import net.i2p.I2PAppContext; import net.i2p.router.Router; import net.i2p.router.RouterContext; //import net.i2p.router.web.ConfigServiceHandler; import net.i2p.util.Log; /** * Handle communications with the router instance. * * See ConfigServiceHandler for best practices on stopping the router. * We don't bother notifying any Wrapper instance here. * * @author mathias * */ public class RouterManager { /** @return non-null */ private static I2PAppContext getAppContext() { return I2PAppContext.getGlobalContext(); } /** * Start an I2P router instance. * This method has limited knowledge * (there is no I2P instance running to collect information from). * * It determines the I2P location using the I2PAppContext. */ public static void start() { try { //TODO: set/get PID String separator = System.getProperty("file.separator"); String location = getAppContext().getBaseDir().getAbsolutePath(); String[] args = new String[] { location + separator + "i2psvc", location + separator + "wrapper.config" }; Runtime.getRuntime().exec(args); } catch (IOException e) { Log log = getAppContext().logManager().getLog(RouterManager.class); log.log(Log.WARN, "Failed to start I2P", e); } } /** * Restart the running I2P instance. */ public static void restart(RouterContext ctx) { //if (ctx.hasWrapper()) // ConfigServiceHandler.registerWrapperNotifier(ctx, Router.EXIT_HARD_RESTART, false); ctx.router().shutdownGracefully(Router.EXIT_HARD_RESTART); } /** * Stop the running I2P instance. */ public static void shutDown(RouterContext ctx) { //if (ctx.hasWrapper()) // ConfigServiceHandler.registerWrapperNotifier(ctx, Router.EXIT_HARD, false); ctx.router().shutdownGracefully(Router.EXIT_HARD); } /** * Restart the running I2P instance. * @since 0.9.26 */ public static void restartGracefully(RouterContext ctx) { //if (ctx.hasWrapper()) // ConfigServiceHandler.registerWrapperNotifier(ctx, Router.EXIT_GRACEFUL_RESTART, false); ctx.router().shutdownGracefully(Router.EXIT_GRACEFUL_RESTART); } /** * Stop the running I2P instance. * @since 0.9.26 */ public static void shutDownGracefully(RouterContext ctx) { //if (ctx.hasWrapper()) // ConfigServiceHandler.registerWrapperNotifier(ctx, Router.EXIT_GRACEFUL, false); ctx.router().shutdownGracefully(); } /** * Cancel a graceful shutdown or restart * @since 0.9.26 */ public static void cancelShutdown(RouterContext ctx) { ctx.router().cancelGracefulShutdown(); } /** * Is a graceful shutdown or restart in progress? * @since 0.9.26 */ public static boolean isShutdownInProgress(RouterContext ctx) { return ctx.router().scheduledGracefulExitCode() > 0; } /** * Get time until shutdown * @return -1 if no shutdown in progress. * @since 0.9.26 */ public static long getShutdownTimeRemaining(RouterContext ctx) { return ctx.router().getShutdownTimeRemaining(); } /** * Get network status, untranslated * @since 0.9.26 */ public static String getStatus(RouterContext ctx) { return ctx.commSystem().getStatus().toStatusString(); } }