Fix Super Dev Mode's code server to launch on localhost by default. (There were comments about this but it wasn't actually true.) Add -bindAddress option to override this. In particular, -bindAddress 0.0.0.0 restores previous behavior. Review at http://gwt-code-reviews.appspot.com/1740803 Review by: acleung@google.com git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@11063 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/CodeServer.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/CodeServer.java index aa44ef8..6419d86 100644 --- a/dev/codeserver/java/com/google/gwt/dev/codeserver/CodeServer.java +++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/CodeServer.java
@@ -23,6 +23,7 @@ import java.io.File; import java.io.IOException; +import java.net.InetAddress; /** * <p>This class contains the {@link #main main method} that starts the code server for @@ -49,9 +50,11 @@ try { start(options); + String url = "http://" + options.getPreferredHost() + ":" + options.getPort() + "/"; + System.out.println(); System.out.println("The code server is ready."); - System.out.println("Next, visit: http://localhost:" + options.getPort() + "/"); + System.out.println("Next, visit: " + url); } catch (Throwable t) { t.printStackTrace(); System.exit(1); @@ -88,7 +91,7 @@ SourceHandler sourceHandler = new SourceHandler(modules, logger); WebServer webServer = new WebServer(sourceHandler, modules, - options.getPort(), logger); + options.getBindAddress(), options.getPort(), logger); webServer.start(); return webServer;
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/Options.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/Options.java index f4af813..2924e44 100644 --- a/dev/codeserver/java/com/google/gwt/dev/codeserver/Options.java +++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/Options.java
@@ -21,8 +21,11 @@ import com.google.gwt.util.tools.ArgHandlerDir; import com.google.gwt.util.tools.ArgHandlerExtra; import com.google.gwt.util.tools.ArgHandlerInt; +import com.google.gwt.util.tools.ArgHandlerString; import java.io.File; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; @@ -35,6 +38,8 @@ private File workDir; private List<String> moduleNames = new ArrayList<String>(); private final List<File> sourcePath = new ArrayList<File>(); + private String bindAddress = "127.0.0.1"; + private String preferredHost = "localhost"; private int port = 9876; /** @@ -61,6 +66,20 @@ } /** + * The IP address where the code server should listen. + */ + String getBindAddress() { + return bindAddress; + } + + /** + * The hostname to put in a URL pointing to the code server. + */ + String getPreferredHost() { + return preferredHost; + } + + /** * The port where the code server will listen for HTTP requests. */ int getPort() { @@ -74,6 +93,7 @@ private class ArgProcessor extends ArgProcessorBase { public ArgProcessor() { + registerHandler(new BindAddressFlag()); registerHandler(new PortFlag()); registerHandler(new WorkDirFlag()); registerHandler(new SourceFlag()); @@ -87,6 +107,43 @@ } + private class BindAddressFlag extends ArgHandlerString { + + @Override + public String getTag() { + return "-bindAddress"; + } + + @Override + public String[] getTagArgs() { + return new String[] {"address"}; + } + + @Override + public String getPurpose() { + return "The ip address of the code server. Defaults to 127.0.0.1."; + } + + @Override + public boolean setString(String newValue) { + try { + InetAddress bindAddress = InetAddress.getByName(newValue); + if (bindAddress.isAnyLocalAddress()) { + preferredHost = InetAddress.getLocalHost().getHostName(); + } else { + preferredHost = newValue; + } + } catch (UnknownHostException e) { + System.err.println("Can't resolve bind address: " + newValue); + return false; + } + + // Save the original since there's no way to get it back from an InetAddress. + bindAddress = newValue; + return true; + } + } + private class PortFlag extends ArgHandlerInt { @Override
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/WebServer.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/WebServer.java index a850293..5f85a54 100644 --- a/dev/codeserver/java/com/google/gwt/dev/codeserver/WebServer.java +++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/WebServer.java
@@ -37,6 +37,7 @@ import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.Writer; +import java.net.InetAddress; import java.net.URL; import java.net.URLConnection; import java.util.HashMap; @@ -83,13 +84,16 @@ private final Modules modules; + private final String bindAddress; private final int port; private final TreeLogger logger; private Server server; - public WebServer(SourceHandler handler, Modules modules, int port, TreeLogger logger) { + WebServer(SourceHandler handler, Modules modules, String bindAddress, int port, + TreeLogger logger) { this.handler = handler; this.modules = modules; + this.bindAddress = bindAddress; this.port = port; this.logger = logger; } @@ -97,6 +101,7 @@ public void start() throws UnableToCompleteException { SelectChannelConnector connector = new SelectChannelConnector(); + connector.setHost(bindAddress); connector.setPort(port); connector.setReuseAddress(false); connector.setSoLingerTime(0);