aboutsummaryrefslogtreecommitdiffstats
path: root/AndroidAsync
diff options
context:
space:
mode:
authorSteve Lhomme <robux4@gmail.com>2014-07-08 15:51:27 +0200
committerSteve Lhomme <robux4@gmail.com>2014-07-08 15:51:27 +0200
commitc78a345516c8c89e4c42910a581f5f6e84994a1e (patch)
tree355e9bdab42b6f2ae9b6e1050eca6818105ac8d6 /AndroidAsync
parentb1364693f91ab664af6e26414d3bdc64e01aed50 (diff)
downloadAndroidAsync-c78a345516c8c89e4c42910a581f5f6e84994a1e.tar.gz
AndroidAsync-c78a345516c8c89e4c42910a581f5f6e84994a1e.tar.bz2
AndroidAsync-c78a345516c8c89e4c42910a581f5f6e84994a1e.zip
Use the system proxy when it's defined.
The default HttpUrlConnection does that, as well as okhttp. This should only work on API v12 and above. Before that the system proxy had to be caught manually by the UrlConnection user.
Diffstat (limited to 'AndroidAsync')
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java1
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java46
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;
}