< prev index next >

src/java.base/share/classes/sun/net/spi/DefaultProxySelector.java

Print this page
rev 16207 : 8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome
Contributed-by: arno.zeller@sap.com

*** 1,7 **** /* ! * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 28,47 **** import java.net.InetSocketAddress; import java.net.Proxy; import java.net.ProxySelector; import java.net.SocketAddress; import java.net.URI; ! import java.util.ArrayList; import java.util.List; import java.io.IOException; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.StringJoiner; import java.util.regex.Pattern; import sun.net.NetProperties; import sun.net.SocksProxy; import static java.util.regex.Pattern.quote; /** * Supports proxy settings using system properties This proxy selector * provides backward compatibility with the old http protocol handler * as far as how proxy is set --- 28,50 ---- 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.io.IOException; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.StringJoiner; import java.util.regex.Pattern; + import java.util.stream.Stream; import sun.net.NetProperties; import sun.net.SocksProxy; import static java.util.regex.Pattern.quote; + import static java.util.stream.Collectors.collectingAndThen; + import static java.util.stream.Collectors.toList; /** * Supports proxy settings using system properties This proxy selector * provides backward compatibility with the old http protocol handler * as far as how proxy is set
*** 85,94 **** --- 88,99 ---- private static final String SOCKS_PROXY_VERSION = "socksProxyVersion"; private static boolean hasSystemProxies = false; + private static final List<Proxy> NO_PROXY_LIST = List.of(Proxy.NO_PROXY); + static { final String key = "java.net.useSystemProxies"; Boolean b = AccessController.doPrivileged( new PrivilegedAction<Boolean>() { public Boolean run() {
*** 147,158 **** /** * select() method. Where all the hard work is done. * Build a list of proxies depending on URI. * Since we're only providing compatibility with the system properties ! * from previous releases (see list above), that list will always ! * contain 1 single proxy, default being NO_PROXY. */ public java.util.List<Proxy> select(URI uri) { if (uri == null) { throw new IllegalArgumentException("URI can't be null."); } --- 152,164 ---- /** * select() method. Where all the hard work is done. * Build a list of proxies depending on URI. * Since we're only providing compatibility with the system properties ! * from previous releases (see list above), that list will typically ! * contain one single proxy, default being NO_PROXY. ! * If we can get a system proxy it might contain more entries. */ public java.util.List<Proxy> select(URI uri) { if (uri == null) { throw new IllegalArgumentException("URI can't be null."); }
*** 183,193 **** } if (protocol == null || host == null) { throw new IllegalArgumentException("protocol = "+protocol+" host = "+host); } - List<Proxy> proxyl = new ArrayList<Proxy>(1); NonProxyInfo pinfo = null; if ("http".equalsIgnoreCase(protocol)) { pinfo = NonProxyInfo.httpNonProxyInfo; --- 189,198 ----
*** 212,224 **** * This is one big doPrivileged call, but we're trying to optimize * the code as much as possible. Since we're checking quite a few * System properties it does help having only 1 call to doPrivileged. * Be mindful what you do in here though! */ ! Proxy p = AccessController.doPrivileged( ! new PrivilegedAction<Proxy>() { ! public Proxy run() { int i, j; String phost = null; int pport = 0; String nphosts = null; InetSocketAddress saddr = null; --- 217,229 ---- * This is one big doPrivileged call, but we're trying to optimize * the code as much as possible. Since we're checking quite a few * System properties it does help having only 1 call to doPrivileged. * Be mindful what you do in here though! */ ! Proxy[] proxyArray = AccessController.doPrivileged( ! new PrivilegedAction<Proxy[]>() { ! public Proxy[] run() { int i, j; String phost = null; int pport = 0; String nphosts = null; InetSocketAddress saddr = null;
*** 237,261 **** } if (phost == null || phost.length() == 0) { /** * No system property defined for that * protocol. Let's check System Proxy ! * settings (Gnome & Windows) if we were ! * instructed to. */ if (hasSystemProxies) { String sproto; if (proto.equalsIgnoreCase("socket")) sproto = "socks"; else sproto = proto; ! Proxy sproxy = getSystemProxy(sproto, urlhost); ! if (sproxy != null) { ! return sproxy; ! } } ! return Proxy.NO_PROXY; } // If a Proxy Host is defined for that protocol // Let's get the NonProxyHosts property if (nprop != null) { nphosts = NetProperties.get(nprop.property); --- 242,263 ---- } if (phost == null || phost.length() == 0) { /** * No system property defined for that * protocol. Let's check System Proxy ! * settings (Gnome, MacOsX & Windows) if ! * we were instructed to. */ if (hasSystemProxies) { String sproto; if (proto.equalsIgnoreCase("socket")) sproto = "socks"; else sproto = proto; ! return getSystemProxies(sproto, urlhost); } ! return null; } // If a Proxy Host is defined for that protocol // Let's get the NonProxyHosts property if (nprop != null) { nphosts = NetProperties.get(nprop.property);
*** 279,289 **** nprop.pattern = toPattern(nphosts); nprop.hostsSource = nphosts; } } if (shouldNotUseProxyFor(nprop.pattern, urlhost)) { ! return Proxy.NO_PROXY; } } } // We got a host, let's check for port --- 281,291 ---- nprop.pattern = toPattern(nphosts); nprop.hostsSource = nphosts; } } if (shouldNotUseProxyFor(nprop.pattern, urlhost)) { ! return null; } } } // We got a host, let's check for port
*** 309,334 **** // Let's create the address, but don't resolve it // as this will be done at connection time saddr = InetSocketAddress.createUnresolved(phost, pport); // Socks is *always* the last on the list. if (j == (props[i].length - 1)) { ! return SocksProxy.create(saddr, socksProxyVersion()); ! } else { ! return new Proxy(Proxy.Type.HTTP, saddr); } } } ! return Proxy.NO_PROXY; }}); - proxyl.add(p); ! /* ! * If no specific property was set for that URI, we should be ! * returning an iterator to an empty List. ! */ ! return proxyl; } public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { if (uri == null || sa == null || ioe == null) { throw new IllegalArgumentException("Arguments can't be null."); --- 311,338 ---- // Let's create the address, but don't resolve it // as this will be done at connection time saddr = InetSocketAddress.createUnresolved(phost, pport); // Socks is *always* the last on the list. if (j == (props[i].length - 1)) { ! return new Proxy[] {SocksProxy.create(saddr, socksProxyVersion())}; } + return new Proxy[] {new Proxy(Proxy.Type.HTTP, saddr)}; } } ! return null; }}); ! if (proxyArray != null) { ! // Remove duplicate entries, while preserving order. ! return Stream.of(proxyArray).distinct().collect( ! collectingAndThen(toList(), Collections::unmodifiableList)); ! } ! ! // If no specific proxy was found, return a standard list containing ! // only one NO_PROXY entry. ! return NO_PROXY_LIST; } public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { if (uri == null || sa == null || ioe == null) { throw new IllegalArgumentException("Arguments can't be null.");
*** 352,362 **** return -1; } } private static native boolean init(); ! private synchronized native Proxy getSystemProxy(String protocol, String host); /** * @return {@code true} if given this pattern for non-proxy hosts and this * urlhost the proxy should NOT be used to access this urlhost */ --- 356,366 ---- return -1; } } private static native boolean init(); ! private synchronized native Proxy[] getSystemProxies(String protocol, String host); /** * @return {@code true} if given this pattern for non-proxy hosts and this * urlhost the proxy should NOT be used to access this urlhost */
< prev index next >