diff options
Diffstat (limited to 'AndroidAsync')
-rw-r--r-- | AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java | 1 | ||||
-rw-r--r-- | AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java | 46 |
2 files changed, 47 insertions, 0 deletions
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java index 56dcae5..cfc6a10 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java @@ -278,6 +278,7 @@ public class AsyncHttpClient { newReq.LOGTAG = request.LOGTAG; newReq.proxyHost = request.proxyHost; newReq.proxyPort = request.proxyPort; + newReq.useAndroidProxy = request.useAndroidProxy; copyHeader(request, newReq, "User-Agent"); copyHeader(request, newReq, "Range"); request.logi("Redirecting"); diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java index 35d9902..dc1ef13 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java @@ -1,6 +1,8 @@ package com.koushikdutta.async.http; +import android.annotation.SuppressLint; import android.net.Uri; +import android.os.Build; import android.util.Log; import com.koushikdutta.async.AsyncSSLException; @@ -16,6 +18,10 @@ import org.apache.http.RequestLine; import org.apache.http.message.BasicHeader; import org.apache.http.params.HttpParams; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.net.ProxySelector; import java.net.URI; import java.util.List; import java.util.Map; @@ -318,21 +324,61 @@ public class AsyncHttpRequest { String proxyHost; int proxyPort = -1; + boolean useAndroidProxy = true; public void enableProxy(String host, int port) { proxyHost = host; proxyPort = port; + useAndroidProxy = proxyPort == 0; + } + + public void enableSystemProxy(boolean enable) { + useAndroidProxy = enable; } public void disableProxy() { proxyHost = null; proxyPort = -1; + useAndroidProxy = false; + } + + @SuppressLint("NewApi") + private void setupAndroidProxy() { + List<Proxy> proxies = ProxySelector.getDefault().select(URI.create(getUri().toString())); + if (proxies.isEmpty()) { + disableProxy(); + } else { + Proxy proxy = proxies.get(0); + if (proxy.type() == Proxy.Type.DIRECT) { + disableProxy(); + } else if (proxy.type() == Proxy.Type.HTTP && proxy.address() instanceof InetSocketAddress) { + InetSocketAddress proxyAddress = (InetSocketAddress) proxy.address(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) + proxyHost = proxyAddress.getHostString(); + else { + InetAddress address = proxyAddress.getAddress(); + if (address!=null) + proxyHost = address.getHostAddress(); + else + proxyHost = proxyAddress.getHostName(); + } + proxyPort = proxyAddress.getPort(); + } + } } public String getProxyHost() { + if (useAndroidProxy) { + setupAndroidProxy(); + useAndroidProxy = false; + } return proxyHost; } public int getProxyPort() { + if (useAndroidProxy) { + setupAndroidProxy(); + useAndroidProxy = false; + } return proxyPort; } |