// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.io.remotecontrol; import java.io.File; import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetAddress; import java.net.UnknownHostException; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.data.preferences.BooleanProperty; import org.openstreetmap.josm.io.remotecontrol.handler.RequestHandler; /** * Manager class for remote control operations. * * IMPORTANT! increment the minor version on compatible API extensions * and increment the major version and set minor to 0 on incompatible changes. */ public class RemoteControl { /** * If the remote control feature is enabled or disabled. If disabled, * it should not start the server. */ public static final BooleanProperty PROP_REMOTECONTROL_ENABLED = new BooleanProperty("remotecontrol.enabled", false); /** * If the remote control feature is enabled or disabled for HTTPS. If disabled, * only HTTP access will be available. * @since 7335 */ public static final BooleanProperty PROP_REMOTECONTROL_HTTPS_ENABLED = new BooleanProperty( "remotecontrol.https.enabled", false); /** * RemoteControl HTTP protocol version. Change minor number for compatible * interface extensions. Change major number in case of incompatible * changes. */ static final int protocolMajorVersion = 1; static final int protocolMinorVersion = 7; /** * Starts the remote control server */ public static void start() { RemoteControlHttpServer.restartRemoteControlHttpServer(); RemoteControlHttpsServer.restartRemoteControlHttpsServer(); } /** * Stops the remote control server * @since 5861 */ public static void stop() { RemoteControlHttpServer.stopRemoteControlHttpServer(); RemoteControlHttpsServer.stopRemoteControlHttpsServer(); } /** * Adds external request handler. * Can be used by plugins that want to use remote control. * * @param command The command name. * @param handlerClass The additional request handler. */ public void addRequestHandler(String command, Class<? extends RequestHandler> handlerClass) { RequestProcessor.addRequestHandlerClass(command, handlerClass); } /** * Returns the remote control directory. * @return The remote control directory * @since 7335 */ public static String getRemoteControlDir() { return new File(Main.pref.getUserDataDirectory(), "remotecontrol").getAbsolutePath(); } /** * Returns the IPv6 address used for remote control. * @return the IPv6 address used for remote control * @throws UnknownHostException if the local host name could not be resolved into an address. * @since 8337 */ public static InetAddress getInet6Address() throws UnknownHostException { for (InetAddress a : InetAddress.getAllByName(Main.pref.get("remote.control.host.ipv6", "::1"))) { if (a instanceof Inet6Address) { return a; } } throw new UnknownHostException(); } /** * Returns the IPv4 address used for remote control. * @return the IPv4 address used for remote control * @throws UnknownHostException if the local host name could not be resolved into an address. * @since 8337 */ public static InetAddress getInet4Address() throws UnknownHostException { // Return an address to the loopback interface by default for (InetAddress a : InetAddress.getAllByName(Main.pref.get("remote.control.host.ipv4", "127.0.0.1"))) { if (a instanceof Inet4Address) { return a; } } throw new UnknownHostException(); } }