summaryrefslogtreecommitdiffstats
path: root/core/java/android/net
diff options
context:
space:
mode:
authorJason Monk <jmonk@google.com>2014-08-18 13:32:34 -0400
committerJason Monk <jmonk@google.com>2014-08-20 12:21:56 -0400
commit4385af32eff1b99802e6ce233a2b10d002bf4eb1 (patch)
tree509ae77c6d143858beb2e9c5ea0719c7474c9f50 /core/java/android/net
parent03374ccc4c29117c8b672b740a0cede2fd8afb52 (diff)
downloadframeworks_base-4385af32eff1b99802e6ce233a2b10d002bf4eb1.zip
frameworks_base-4385af32eff1b99802e6ce233a2b10d002bf4eb1.tar.gz
frameworks_base-4385af32eff1b99802e6ce233a2b10d002bf4eb1.tar.bz2
Fix SOCKS proxies from being dropped from PAC
It seems that SOCKS isn't being handled explicitly by the PacProxySelector, which results in them just being dropped from the return list. This will sometimes end up switching from SOCKS to DIRECT, which could be bad. Bug: 17104885 Change-Id: Ic8a28230d3ae18c0abb000811a9100787c10c5e0
Diffstat (limited to 'core/java/android/net')
-rw-r--r--core/java/android/net/PacProxySelector.java33
1 files changed, 24 insertions, 9 deletions
diff --git a/core/java/android/net/PacProxySelector.java b/core/java/android/net/PacProxySelector.java
index 8a2c2b6..8626d08 100644
--- a/core/java/android/net/PacProxySelector.java
+++ b/core/java/android/net/PacProxySelector.java
@@ -39,6 +39,9 @@ import java.util.List;
public class PacProxySelector extends ProxySelector {
private static final String TAG = "PacProxySelector";
public static final String PROXY_SERVICE = "com.android.net.IProxyService";
+ private static final String SOCKS = "SOCKS ";
+ private static final String PROXY = "PROXY ";
+
private IProxyService mProxyService;
private final List<Proxy> mDefaultList;
@@ -88,16 +91,16 @@ public class PacProxySelector extends ProxySelector {
String trimmed = s.trim();
if (trimmed.equals("DIRECT")) {
ret.add(java.net.Proxy.NO_PROXY);
- } else if (trimmed.startsWith("PROXY ")) {
- String[] hostPort = trimmed.substring(6).split(":");
- String host = hostPort[0];
- int port;
- try {
- port = Integer.parseInt(hostPort[1]);
- } catch (Exception e) {
- port = 8080;
+ } else if (trimmed.startsWith(PROXY)) {
+ Proxy proxy = proxyFromHostPort(Type.HTTP, trimmed.substring(PROXY.length()));
+ if (proxy != null) {
+ ret.add(proxy);
+ }
+ } else if (trimmed.startsWith(SOCKS)) {
+ Proxy proxy = proxyFromHostPort(Type.SOCKS, trimmed.substring(SOCKS.length()));
+ if (proxy != null) {
+ ret.add(proxy);
}
- ret.add(new Proxy(Type.HTTP, InetSocketAddress.createUnresolved(host, port)));
}
}
if (ret.size() == 0) {
@@ -106,6 +109,18 @@ public class PacProxySelector extends ProxySelector {
return ret;
}
+ private static Proxy proxyFromHostPort(Proxy.Type type, String hostPortString) {
+ try {
+ String[] hostPort = hostPortString.split(":");
+ String host = hostPort[0];
+ int port = Integer.parseInt(hostPort[1]);
+ return new Proxy(type, InetSocketAddress.createUnresolved(host, port));
+ } catch (NumberFormatException|ArrayIndexOutOfBoundsException e) {
+ Log.d(TAG, "Unable to parse proxy " + hostPortString + " " + e);
+ return null;
+ }
+ }
+
@Override
public void connectFailed(URI uri, SocketAddress address, IOException failure) {