diff -r e12ef8061554 o.n.core/arch.xml
--- a/o.n.core/arch.xml Fri Mar 09 23:54:05 2012 +0100
+++ b/o.n.core/arch.xml Mon Mar 12 15:45:13 2012 +0100
@@ -482,6 +482,16 @@
org.netbeans.core.Bundle
to say USE_Authentication=false
+
+ Some applications may want to proxy connections to
+ localhost (which by default uses direct connection in NetBeans Platform).
+ One can change the default by branding
+ org.netbeans.core.Bundle
+ specify something else than StaticNonProxyHosts=localhost|127.0.0.1
.
+
diff -r e12ef8061554 o.n.core/src/org/netbeans/core/Bundle.properties
--- a/o.n.core/src/org/netbeans/core/Bundle.properties Fri Mar 09 23:54:05 2012 +0100
+++ b/o.n.core/src/org/netbeans/core/Bundle.properties Mon Mar 12 15:45:13 2012 +0100
@@ -185,3 +185,6 @@
# NOI18N
TimableEventQueue.install=true
+
+# NOI18N
+StaticNonProxyHosts=localhost|127.0.0.1
diff -r e12ef8061554 o.n.core/src/org/netbeans/core/GuiRunLevel.java
--- a/o.n.core/src/org/netbeans/core/GuiRunLevel.java Fri Mar 09 23:54:05 2012 +0100
+++ b/o.n.core/src/org/netbeans/core/GuiRunLevel.java Mon Mar 12 15:45:13 2012 +0100
@@ -92,7 +92,7 @@
Splash.getInstance().increment(10);
// install java.net.ProxySelector
- java.net.ProxySelector.setDefault (new NbProxySelector ());
+ NbProxySelector.register();
if (CLIOptions.isGui()) {
//---------------------------------------------------------------------------------------------------------
diff -r e12ef8061554 o.n.core/src/org/netbeans/core/NbProxySelector.java
--- a/o.n.core/src/org/netbeans/core/NbProxySelector.java Fri Mar 09 23:54:05 2012 +0100
+++ b/o.n.core/src/org/netbeans/core/NbProxySelector.java Mon Mar 12 15:45:13 2012 +0100
@@ -71,18 +71,13 @@
*/
public final class NbProxySelector extends ProxySelector {
- private ProxySelector original = null;
+ private final ProxySelector original;
private static final Logger LOG = Logger.getLogger (NbProxySelector.class.getName ());
private static Object useSystemProxies;
/** Creates a new instance of NbProxySelector */
- public NbProxySelector () {
- original = ProxySelector.getDefault ();
- if (original == null) {
- LOG.warning ("No default system ProxySelector was found thus NetBeans ProxySelector won't delegate on it");
- } else {
- LOG.fine ("Override the original ProxySelector: " + original);
- }
+ private NbProxySelector (ProxySelector delegate) {
+ original = delegate;
LOG.fine ("java.net.useSystemProxies has been set to " + useSystemProxies ());
LOG.fine ("In launcher was detected netbeans.system_http_proxy: " + System.getProperty ("netbeans.system_http_proxy", "N/A"));
LOG.fine ("In launcher was detected netbeans.system_socks_proxy: " + System.getProperty ("netbeans.system_socks_proxy", "N/A"));
@@ -90,6 +85,20 @@
copySettingsToSystem ();
}
+ static ProxySelector create(ProxySelector delegate) {
+ return new NbProxySelector(delegate);
+ }
+
+ static void register() {
+ ProxySelector prev = ProxySelector.getDefault();
+ if (prev == null) {
+ LOG.warning("No default system ProxySelector was found thus NetBeans ProxySelector won't delegate on it");
+ } else {
+ LOG.log(Level.FINE, "Override the original ProxySelector: {0}", prev);
+ }
+ ProxySelector.setDefault(create(prev));
+ }
+
@Override
public List select(URI uri) {
List res = new ArrayList ();
diff -r e12ef8061554 o.n.core/src/org/netbeans/core/ProxySettings.java
--- a/o.n.core/src/org/netbeans/core/ProxySettings.java Fri Mar 09 23:54:05 2012 +0100
+++ b/o.n.core/src/org/netbeans/core/ProxySettings.java Mon Mar 12 15:45:13 2012 +0100
@@ -352,13 +352,35 @@
return getModifiedNonProxyHosts (getSystemNonProxyHosts ());
}
+
+ private static String concatProxies(String... proxies) {
+ StringBuilder sb = new StringBuilder();
+ for (String n : proxies) {
+ if (n == null) {
+ continue;
+ }
+ n = n.trim();
+ if (n.isEmpty()) {
+ continue;
+ }
+ if (sb.length() > 0 && sb.charAt(sb.length() - 1) != '|') {
+ if (!n.startsWith("|")) {
+ sb.append('|');
+ }
+ }
+ sb.append(n);
+ }
+ return sb.toString();
+ }
+
private static String getModifiedNonProxyHosts (String systemPreset) {
String fromSystem = systemPreset.replaceAll (";", "|").replaceAll (",", "|"); //NOI18N
String fromUser = getPresetNonProxyHosts () == null ? "" : getPresetNonProxyHosts ().replaceAll (";", "|").replaceAll (",", "|"); //NOI18N
if (Utilities.isWindows ()) {
fromSystem = addReguralToNonProxyHosts (fromSystem);
}
- String nonProxy = fromUser + (fromUser.length () == 0 ? "" : "|") + fromSystem + (fromSystem.length () == 0 ? "" : "|") + "localhost|127.0.0.1"; // NOI18N
+ final String staticNonProxyHosts = NbBundle.getMessage(ProxySettings.class, "StaticNonProxyHosts"); // NOI18N
+ String nonProxy = concatProxies(fromUser, fromSystem, staticNonProxyHosts); // NOI18N
String localhost = ""; // NOI18N
try {
localhost = InetAddress.getLocalHost().getHostName();
diff -r e12ef8061554 o.n.core/test/unit/src/org/netbeans/core/Bundle_te_ST.properties
--- a/o.n.core/test/unit/src/org/netbeans/core/Bundle_te_ST.properties Fri Mar 09 23:54:05 2012 +0100
+++ b/o.n.core/test/unit/src/org/netbeans/core/Bundle_te_ST.properties Mon Mar 12 15:45:13 2012 +0100
@@ -40,3 +40,4 @@
# NOI18N
TimableEventQueue.install=false
+StaticNonProxyHosts=
diff -r e12ef8061554 o.n.core/test/unit/src/org/netbeans/core/CanProxyToLocalhostTest.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/o.n.core/test/unit/src/org/netbeans/core/CanProxyToLocalhostTest.java Mon Mar 12 15:45:13 2012 +0100
@@ -0,0 +1,113 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+ * Other names may be trademarks of their respective owners.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common
+ * Development and Distribution License("CDDL") (collectively, the
+ * "License"). You may not use this file except in compliance with the
+ * License. You can obtain a copy of the License at
+ * http://www.netbeans.org/cddl-gplv2.html
+ * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+ * specific language governing permissions and limitations under the
+ * License. When distributing the software, include this License Header
+ * Notice in each file and include the License file at
+ * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the GPL Version 2 section of the License file that
+ * accompanied this code. If applicable, add the following below the
+ * License Header, with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * The Original Software is NetBeans. The Initial Developer of the Original
+ * Software is Sun Microsystems, Inc. Portions Copyright 1997-2008 Sun
+ * Microsystems, Inc. All Rights Reserved.
+ *
+ * If you wish your version of this file to be governed by only the CDDL
+ * or only the GPL Version 2, indicate your decision by adding
+ * "[Contributor] elects to include this software in this distribution
+ * under the [CDDL or GPL Version 2] license." If you do not indicate a
+ * single choice of license, a recipient has the option to distribute
+ * your version of this file under either the CDDL, the GPL Version 2 or
+ * to extend the choice of license to its licensees as provided above.
+ * However, if you add GPL Version 2 code and therefore, elected the GPL
+ * Version 2 license, then the option applies only if the new code is
+ * made subject to such option by the copyright holder.
+ */
+
+package org.netbeans.core;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+import java.net.ProxySelector;
+import java.net.SocketAddress;
+import java.net.URI;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Locale;
+import org.netbeans.junit.NbTestCase;
+import org.openide.util.NetworkSettings;
+import org.openide.util.lookup.ServiceProvider;
+
+/** Check whether we can proxy to localhost.
+ */
+public class CanProxyToLocalhostTest extends NbTestCase {
+ private static String USER_PROXY_HOST = "my.webcache";
+ private static int USER_PROXY_PORT = 8080;
+
+ private ProxySelector selector;
+ private static URI TO_LOCALHOST;
+ private static URI TO_NB;
+ private MyPS myPS;
+
+ public CanProxyToLocalhostTest (String name) {
+ super (name);
+ }
+
+ @Override
+ protected void setUp () throws Exception {
+ myPS = new MyPS();
+ selector = NbProxySelector.create(myPS);
+ TO_LOCALHOST = new URI ("http://localhost");
+ TO_NB = new URI ("http://netbeans.org");
+ }
+
+ public void testNoProxyForLocalhost() {
+ Locale.setDefault(Locale.US);
+ assertEquals ("Connect TO_LOCALHOST DIRECT.", "DIRECT", selector.select (TO_LOCALHOST).get(0).toString());
+ }
+ public void testProxyForLocalhost() {
+ Locale.setDefault(new Locale("te", "ST"));
+ assertEquals ("Connect TO_LOCALHOST provided by MyPS", "HTTP @ my.webcache:8080", selector.select (TO_LOCALHOST).get(0).toString());
+ assertEquals("One call to my ps", 1, myPS.called);
+ }
+ public void testAlwaysProxyForNonLocalhost() {
+ Locale.setDefault(Locale.US);
+ assertEquals ("Connect TO_LOCALHOST DIRECT.", "HTTP @ my.webcache:8080", selector.select (TO_NB).get(0).toString());
+ assertEquals("One call to my ps", 1, myPS.called);
+ }
+
+ private static class MyPS extends ProxySelector {
+ int called;
+
+ @Override
+ public List select(URI uri) {
+ called++;
+ return Collections.singletonList(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(USER_PROXY_HOST, USER_PROXY_PORT)));
+ }
+
+ @Override
+ public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
+ }
+ }
+}
diff -r e12ef8061554 o.n.core/test/unit/src/org/netbeans/core/HttpSettingsTest.java
--- a/o.n.core/test/unit/src/org/netbeans/core/HttpSettingsTest.java Fri Mar 09 23:54:05 2012 +0100
+++ b/o.n.core/test/unit/src/org/netbeans/core/HttpSettingsTest.java Mon Mar 12 15:45:13 2012 +0100
@@ -98,7 +98,7 @@
protected void setUp () throws Exception {
super.setUp ();
System.setProperty ("http.nonProxyHosts", NETBEANS_ORG + ',' + NETBEANS_ORG);
- ProxySelector.setDefault (new NbProxySelector ());
+ NbProxySelector.register();
proxyPreferences = NbPreferences.root ().node ("/org/netbeans/core");
proxyPreferences.addPreferenceChangeListener (new PreferenceChangeListener() {
public void preferenceChange(PreferenceChangeEvent arg0) {
diff -r e12ef8061554 o.n.core/test/unit/src/org/netbeans/core/NonProxyHostsTest.java
--- a/o.n.core/test/unit/src/org/netbeans/core/NonProxyHostsTest.java Fri Mar 09 23:54:05 2012 +0100
+++ b/o.n.core/test/unit/src/org/netbeans/core/NonProxyHostsTest.java Mon Mar 12 15:45:13 2012 +0100
@@ -90,7 +90,7 @@
System.setProperty ("netbeans.system_socks_proxy", SYSTEM_PROXY_HOST + ":" + SYSTEM_PROXY_PORT);
System.setProperty ("netbeans.system_http_non_proxy_hosts", "*.other.org");
System.setProperty ("http.nonProxyHosts", "*.netbeans.org");
- ProxySelector.setDefault (new NbProxySelector ());
+ NbProxySelector.register();
selector = ProxySelector.getDefault ();
proxyPreferences = NbPreferences.root ().node ("/org/netbeans/core");
proxyPreferences.addPreferenceChangeListener (new PreferenceChangeListener () {