Use same logic for -bindAddress in CodeServer and DevMode Specifically wrt wildcard addresses, where DevMode used localhost's host address while CodeServer used localhost's host name. Bug: #8467, #8910 Bug-Link: https://github.com/gwtproject/gwt/issues/8467 Bug-Link: https://github.com/gwtproject/gwt/issues/8910 Change-Id: Ie265d9885aa0ec4a7ab26d32417a0c5539cfa80a
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 0ba0f06..984c5bb 100644 --- a/dev/codeserver/java/com/google/gwt/dev/codeserver/Options.java +++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/Options.java
@@ -20,6 +20,7 @@ import com.google.gwt.dev.ArgProcessorBase; import com.google.gwt.dev.cfg.ModuleDef; import com.google.gwt.dev.jjs.JsOutputOption; +import com.google.gwt.dev.util.arg.ArgHandlerBindAddress; import com.google.gwt.dev.util.arg.ArgHandlerClosureFormattedOutput; import com.google.gwt.dev.util.arg.ArgHandlerGenerateJsInteropExports; import com.google.gwt.dev.util.arg.ArgHandlerIncrementalCompile; @@ -28,6 +29,7 @@ import com.google.gwt.dev.util.arg.ArgHandlerScriptStyle; import com.google.gwt.dev.util.arg.ArgHandlerSetProperties; import com.google.gwt.dev.util.arg.ArgHandlerSourceLevel; +import com.google.gwt.dev.util.arg.OptionBindAddress; import com.google.gwt.dev.util.arg.OptionClosureFormattedOutput; import com.google.gwt.dev.util.arg.OptionGenerateJsInteropExports; import com.google.gwt.dev.util.arg.OptionIncrementalCompile; @@ -46,11 +48,8 @@ import com.google.gwt.util.tools.ArgHandlerExtra; import com.google.gwt.util.tools.ArgHandlerFlag; 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.Arrays; import java.util.LinkedHashSet; @@ -74,8 +73,8 @@ private final List<String> moduleNames = new ArrayList<String>(); private boolean allowMissingSourceDir = false; private final List<File> sourcePath = new ArrayList<File>(); - private String bindAddress = "127.0.0.1"; - private String preferredHost = "localhost"; + private String bindAddress = ArgHandlerBindAddress.DEFAULT_BIND_ADDRESS; + private String preferredHost = ArgHandlerBindAddress.DEFAULT_BIND_ADDRESS; private int port = 9876; private RecompileListener recompileListener = RecompileListener.NONE; @@ -325,7 +324,6 @@ public ArgProcessor() { registerHandler(new AllowMissingSourceDirFlag()); - registerHandler(new BindAddressFlag()); registerHandler(new CompileTestFlag()); registerHandler(new CompileTestRecompilesFlag()); registerHandler(new FailOnErrorFlag()); @@ -335,6 +333,27 @@ registerHandler(new SourceFlag()); registerHandler(new WorkDirFlag()); registerHandler(new LauncherDir()); + registerHandler(new ArgHandlerBindAddress(new OptionBindAddress() { + @Override + public String getBindAddress() { + return Options.this.bindAddress; + } + + @Override + public String getConnectAddress() { + return Options.this.preferredHost; + } + + @Override + public void setBindAddress(String bindAddress) { + Options.this.bindAddress = bindAddress; + } + + @Override + public void setConnectAddress(String connectAddress) { + Options.this.preferredHost = connectAddress; + } + })); registerHandler(new ArgHandlerScriptStyle(new OptionScriptStyle() { @Override public JsOutputOption getOutput() { @@ -504,43 +523,6 @@ } } - 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 newBindAddress = InetAddress.getByName(newValue); - if (newBindAddress.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/core/src/com/google/gwt/dev/DevModeBase.java b/dev/core/src/com/google/gwt/dev/DevModeBase.java index 47f8f22..3618977 100644 --- a/dev/core/src/com/google/gwt/dev/DevModeBase.java +++ b/dev/core/src/com/google/gwt/dev/DevModeBase.java
@@ -34,9 +34,11 @@ import com.google.gwt.dev.ui.DoneCallback; import com.google.gwt.dev.ui.DoneEvent; import com.google.gwt.dev.util.BrowserInfo; +import com.google.gwt.dev.util.arg.ArgHandlerBindAddress; import com.google.gwt.dev.util.arg.ArgHandlerEnableGeneratorResultCaching; import com.google.gwt.dev.util.arg.ArgHandlerGenDir; import com.google.gwt.dev.util.arg.ArgHandlerLogLevel; +import com.google.gwt.dev.util.arg.OptionBindAddress; import com.google.gwt.dev.util.log.speedtracer.DevModeEventType; import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger; import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.Event; @@ -44,9 +46,7 @@ import com.google.gwt.util.tools.ArgHandlerString; import java.io.File; -import java.net.InetAddress; import java.net.URL; -import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -110,62 +110,6 @@ } /** - * Handles the -bindAddress command line flag. - */ - protected static class ArgHandlerBindAddress extends ArgHandlerString { - - private static final String BIND_ADDRESS_TAG = "-bindAddress"; - private static final String DEFAULT_BIND_ADDRESS = "127.0.0.1"; - - private final OptionBindAddress options; - - public ArgHandlerBindAddress(OptionBindAddress options) { - this.options = options; - } - - @Override - public String[] getDefaultArgs() { - return new String[]{BIND_ADDRESS_TAG, DEFAULT_BIND_ADDRESS}; - } - - @Override - public String getPurpose() { - return "Specifies the bind address for the code server and web server " + "(defaults to " - + DEFAULT_BIND_ADDRESS + ")"; - } - - @Override - public String getTag() { - return BIND_ADDRESS_TAG; - } - - @Override - public String[] getTagArgs() { - return new String[]{"host-name-or-address"}; - } - - @Override - public boolean setString(String value) { - try { - InetAddress address = InetAddress.getByName(value); - options.setBindAddress(value); - if (address.isAnyLocalAddress()) { - // replace a wildcard address with our machine's local address - // this isn't fully accurate, as there is no guarantee we will get - // the right one on a multihomed host - options.setConnectAddress(InetAddress.getLocalHost().getHostAddress()); - } else { - options.setConnectAddress(value); - } - return true; - } catch (UnknownHostException e) { - System.err.println("-bindAddress host \"" + value + "\" unknown"); - return false; - } - } - } - - /** * Handles the -codeServerPort command line flag. */ protected static class ArgHandlerCodeServerPort extends ArgHandlerString { @@ -539,19 +483,6 @@ } /** - * Controls what local address to bind to. - */ - protected interface OptionBindAddress { - String getBindAddress(); - - String getConnectAddress(); - - void setBindAddress(String bindAddress); - - void setConnectAddress(String connectAddress); - } - - /** * Controls what port the code server listens on. */ protected interface OptionCodeServerPort {
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerBindAddress.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerBindAddress.java new file mode 100644 index 0000000..5282b4f --- /dev/null +++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerBindAddress.java
@@ -0,0 +1,77 @@ +/* + * Copyright 2016 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.gwt.dev.util.arg; + +import com.google.gwt.util.tools.ArgHandlerString; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** + * Handles the -bindAddress command line flag. + */ +public class ArgHandlerBindAddress extends ArgHandlerString { + + private static final String BIND_ADDRESS_TAG = "-bindAddress"; + public static final String DEFAULT_BIND_ADDRESS = "127.0.0.1"; + + private final OptionBindAddress options; + + public ArgHandlerBindAddress(OptionBindAddress options) { + this.options = options; + } + + @Override + public String[] getDefaultArgs() { + return new String[]{BIND_ADDRESS_TAG, DEFAULT_BIND_ADDRESS}; + } + + @Override + public String getPurpose() { + return "Specifies the bind address for the code server and web server " + "(defaults to " + + DEFAULT_BIND_ADDRESS + ")"; + } + + @Override + public String getTag() { + return BIND_ADDRESS_TAG; + } + + @Override + public String[] getTagArgs() { + return new String[]{"host-name-or-address"}; + } + + @Override + public boolean setString(String value) { + try { + InetAddress address = InetAddress.getByName(value); + options.setBindAddress(value); + if (address.isAnyLocalAddress()) { + // replace a wildcard address with our machine's local address + // this isn't fully accurate, as there is no guarantee we will get + // the right one on a multihomed host + options.setConnectAddress(InetAddress.getLocalHost().getHostAddress()); + } else { + options.setConnectAddress(value); + } + return true; + } catch (UnknownHostException e) { + System.err.println("-bindAddress host \"" + value + "\" unknown"); + return false; + } + } +}
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/OptionBindAddress.java b/dev/core/src/com/google/gwt/dev/util/arg/OptionBindAddress.java new file mode 100644 index 0000000..66cf07e --- /dev/null +++ b/dev/core/src/com/google/gwt/dev/util/arg/OptionBindAddress.java
@@ -0,0 +1,30 @@ +/* + * Copyright 2016 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.gwt.dev.util.arg; + +/** + * Controls what local address to bind to. + */ +public interface OptionBindAddress { + + String getBindAddress(); + + String getConnectAddress(); + + void setBindAddress(String bindAddress); + + void setConnectAddress(String connectAddress); +}