diff options
| author | Narayan Kamath <narayan@google.com> | 2014-10-29 19:34:10 +0000 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2014-10-29 19:34:10 +0000 |
| commit | 78b3f5ab70300548776e3b98ee6d8fb6b1f5318f (patch) | |
| tree | ff3cef10247601cd7ace55021b4ec04bdf1b7c7b /core/java/android/net | |
| parent | b5ce284aa8e738de051572ab37a01d52fa7b1dac (diff) | |
| parent | fa945c105b4f7bb3e3844e8ce467ca701d5f3a9f (diff) | |
| download | frameworks_base-78b3f5ab70300548776e3b98ee6d8fb6b1f5318f.zip frameworks_base-78b3f5ab70300548776e3b98ee6d8fb6b1f5318f.tar.gz frameworks_base-78b3f5ab70300548776e3b98ee6d8fb6b1f5318f.tar.bz2 | |
am fa945c10: am e87d36f8: Merge "Revert "Remove unused apache related API.""
* commit 'fa945c105b4f7bb3e3844e8ce467ca701d5f3a9f':
Revert "Remove unused apache related API."
Diffstat (limited to 'core/java/android/net')
| -rw-r--r-- | core/java/android/net/Proxy.java | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/core/java/android/net/Proxy.java b/core/java/android/net/Proxy.java index b2c8cbd..037f7df 100644 --- a/core/java/android/net/Proxy.java +++ b/core/java/android/net/Proxy.java @@ -22,9 +22,18 @@ import android.content.Context; import android.text.TextUtils; import android.util.Log; + +import org.apache.http.HttpHost; +import org.apache.http.HttpRequest; +import org.apache.http.conn.routing.HttpRoute; +import org.apache.http.conn.routing.HttpRoutePlanner; +import org.apache.http.conn.scheme.SchemeRegistry; +import org.apache.http.protocol.HttpContext; + import java.net.InetSocketAddress; import java.net.ProxySelector; import java.net.URI; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -34,6 +43,8 @@ import java.util.regex.Pattern; */ public final class Proxy { + // Set to true to enable extra debugging. + private static final boolean DEBUG = false; private static final String TAG = "Proxy"; private static final ProxySelector sDefaultProxySelector; @@ -187,6 +198,30 @@ public final class Proxy { } } + /** + * Returns the preferred proxy to be used by clients. This is a wrapper + * around {@link android.net.Proxy#getHost()}. + * + * @param context the context which will be passed to + * {@link android.net.Proxy#getHost()} + * @param url the target URL for the request + * @note Calling this method requires permission + * android.permission.ACCESS_NETWORK_STATE + * @return The preferred proxy to be used by clients, or null if there + * is no proxy. + * {@hide} + */ + public static final HttpHost getPreferredHttpHost(Context context, + String url) { + java.net.Proxy prefProxy = getProxy(context, url); + if (prefProxy.equals(java.net.Proxy.NO_PROXY)) { + return null; + } else { + InetSocketAddress sa = (InetSocketAddress)prefProxy.address(); + return new HttpHost(sa.getHostName(), sa.getPort(), "http"); + } + } + private static final boolean isLocalHost(String host) { if (host == null) { return false; @@ -232,6 +267,48 @@ public final class Proxy { return PROXY_VALID; } + static class AndroidProxySelectorRoutePlanner + extends org.apache.http.impl.conn.ProxySelectorRoutePlanner { + + private Context mContext; + + public AndroidProxySelectorRoutePlanner(SchemeRegistry schreg, ProxySelector prosel, + Context context) { + super(schreg, prosel); + mContext = context; + } + + @Override + protected java.net.Proxy chooseProxy(List<java.net.Proxy> proxies, HttpHost target, + HttpRequest request, HttpContext context) { + return getProxy(mContext, target.getHostName()); + } + + @Override + protected HttpHost determineProxy(HttpHost target, HttpRequest request, + HttpContext context) { + return getPreferredHttpHost(mContext, target.getHostName()); + } + + @Override + public HttpRoute determineRoute(HttpHost target, HttpRequest request, + HttpContext context) { + HttpHost proxy = getPreferredHttpHost(mContext, target.getHostName()); + if (proxy == null) { + return new HttpRoute(target); + } else { + return new HttpRoute(target, null, proxy, false); + } + } + } + + /** @hide */ + public static final HttpRoutePlanner getAndroidProxySelectorRoutePlanner(Context context) { + AndroidProxySelectorRoutePlanner ret = new AndroidProxySelectorRoutePlanner( + new SchemeRegistry(), ProxySelector.getDefault(), context); + return ret; + } + /** @hide */ public static final void setHttpProxySystemProperty(ProxyInfo p) { String host = null; |
