fix isOnBuiltInWebServerByAuthority for external IP
authorVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Thu, 28 Apr 2016 11:23:26 +0000 (13:23 +0200)
committerVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Thu, 28 Apr 2016 11:23:26 +0000 (13:23 +0200)
platform/built-in-server/src/org/jetbrains/ide/BuiltInServerManagerImpl.java
platform/platform-impl/src/com/intellij/openapi/vfs/impl/http/DefaultRemoteContentProvider.java

index 941a0cb6566bee15362ec7d842f169c413274728..15d4a4cdf137f79e931b0f82c4bbb423a77adf81 100644 (file)
@@ -22,9 +22,10 @@ import org.jetbrains.builtInWebServer.BuiltInWebServerKt;
 import org.jetbrains.io.BuiltInServer;
 import org.jetbrains.io.SubServer;
 
+import java.io.IOException;
 import java.net.InetAddress;
+import java.net.NetworkInterface;
 import java.net.URLConnection;
-import java.net.UnknownHostException;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -148,22 +149,15 @@ public class BuiltInServerManagerImpl extends BuiltInServerManager {
       }
     }
   }
-  
+
   public static boolean isOnBuiltInWebServerByAuthority(@NotNull String authority) {
     int portIndex = authority.indexOf(':');
     if (portIndex < 0 || portIndex == authority.length() - 1) {
       return false;
     }
 
-    int port;
-    try {
-      port = Integer.parseInt(authority.substring(portIndex + 1));
-    }
-    catch (NumberFormatException ignored) {
-      return false;
-    }
-
-    if (BuiltInServerOptions.getInstance().builtInServerPort != port && BuiltInServerManager.getInstance().getPort() != port) {
+    int port = StringUtil.parseInt(authority.substring(portIndex + 1), -1);
+    if (port == -1 || (BuiltInServerOptions.getInstance().builtInServerPort != port && BuiltInServerManager.getInstance().getPort() != port)) {
       return false;
     }
 
@@ -172,17 +166,12 @@ public class BuiltInServerManagerImpl extends BuiltInServerManager {
       return true;
     }
 
-    InetAddress inetAddress;
     try {
-      inetAddress = InetAddress.getByName(host);
-    }
-    catch (UnknownHostException ignored) {
-      return false;
+      InetAddress inetAddress = InetAddress.getByName(host);
+      return inetAddress.isLoopbackAddress() || inetAddress.isAnyLocalAddress() || NetworkInterface.getByInetAddress(inetAddress) != null;
     }
-
-    if (inetAddress == null) {
+    catch (IOException e) {
       return false;
     }
-    return inetAddress.isLoopbackAddress() || inetAddress.isAnyLocalAddress();
   }
 }
\ No newline at end of file
index 4f0baf1bd92f6182c05511153b46ab14dccb2d7b..c3b81522c35b1d936973aba2f1c98c700b932a3a 100644 (file)
@@ -27,6 +27,7 @@ import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.util.PathUtilRt;
 import com.intellij.util.Url;
 import com.intellij.util.io.HttpRequests;
+import com.intellij.util.io.RequestBuilder;
 import com.intellij.util.net.ssl.CertificateManager;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.ide.BuiltInServerManager;
@@ -37,6 +38,15 @@ import java.io.IOException;
 public class DefaultRemoteContentProvider extends RemoteContentProvider {
   private static final Logger LOG = Logger.getInstance(DefaultRemoteContentProvider.class);
 
+  @NotNull
+  public static RequestBuilder addRequestTuner(@NotNull Url url, @NotNull RequestBuilder requestBuilder) {
+    BuiltInServerManager builtInServerManager = BuiltInServerManager.getInstance();
+    if (builtInServerManager.isOnBuiltInWebServer(url)) {
+      requestBuilder.tuner(builtInServerManager::configureRequestToWebServer);
+    }
+    return requestBuilder;
+  }
+
   @Override
   public boolean canProvideContent(@NotNull Url url) {
     return true;
@@ -57,16 +67,10 @@ public class DefaultRemoteContentProvider extends RemoteContentProvider {
     final String presentableUrl = StringUtil.trimMiddle(url.trimParameters().toDecodedForm(), 40);
     callback.setProgressText(VfsBundle.message("download.progress.connecting", presentableUrl), true);
     try {
-      HttpRequests.request(url.toExternalForm())
+      addRequestTuner(url, HttpRequests.request(url.toExternalForm()))
         .connectTimeout(60 * 1000)
         .productNameAsUserAgent()
         .hostNameVerifier(CertificateManager.HOSTNAME_VERIFIER)
-        .tuner(connection -> {
-          BuiltInServerManager builtInServerManager = BuiltInServerManager.getInstance();
-          if (builtInServerManager.isOnBuiltInWebServer(url)) {
-            builtInServerManager.configureRequestToWebServer(connection);
-          }
-        })
         .connect(new HttpRequests.RequestProcessor<Object>() {
           @Override
           public Object process(@NotNull HttpRequests.Request request) throws IOException {