aboutsummaryrefslogtreecommitdiffstats
path: root/AndroidAsync
diff options
context:
space:
mode:
authorKoushik Dutta <koushd@gmail.com>2014-07-13 11:49:05 -0700
committerKoushik Dutta <koushd@gmail.com>2014-07-13 11:49:05 -0700
commiteb633ea9125ec9ddfbe99d04301b61cbbac3a507 (patch)
tree068f94cc7b08e9b71ba1902028079bbc7ebc96bb /AndroidAsync
parent0d7c7b86a7257b98d091c493052194cff0be1aed (diff)
downloadAndroidAsync-eb633ea9125ec9ddfbe99d04301b61cbbac3a507.tar.gz
AndroidAsync-eb633ea9125ec9ddfbe99d04301b61cbbac3a507.tar.bz2
AndroidAsync-eb633ea9125ec9ddfbe99d04301b61cbbac3a507.zip
Refactor proxy implementation. Maybe this should go into ion?
Though HttpUrlConnection behaves the same way, uses proxy automatically.
Diffstat (limited to 'AndroidAsync')
-rw-r--r--AndroidAsync/AndroidAsync-AndroidAsync.iml42
-rw-r--r--AndroidAsync/build.gradle11
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java42
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java47
4 files changed, 64 insertions, 78 deletions
diff --git a/AndroidAsync/AndroidAsync-AndroidAsync.iml b/AndroidAsync/AndroidAsync-AndroidAsync.iml
index 1db451d..1cdbd09 100644
--- a/AndroidAsync/AndroidAsync-AndroidAsync.iml
+++ b/AndroidAsync/AndroidAsync-AndroidAsync.iml
@@ -8,10 +8,11 @@
</facet>
<facet type="android" name="Android">
<configuration>
- <option name="SELECTED_BUILD_VARIANT" value="release" />
- <option name="ASSEMBLE_TASK_NAME" value="assembleRelease" />
- <option name="COMPILE_JAVA_TASK_NAME" value="compileReleaseJava" />
- <option name="SOURCE_GEN_TASK_NAME" value="generateReleaseSources" />
+ <option name="SELECTED_BUILD_VARIANT" value="debug" />
+ <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
+ <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugJava" />
+ <option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugTest" />
+ <option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" />
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="" />
@@ -21,21 +22,26 @@
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="false">
- <output url="file://$MODULE_DIR$/build/intermediates/classes/release" />
+ <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
<exclude-output />
<content url="file://$MODULE_DIR$">
- <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/release" isTestSource="false" generated="true" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/release" isTestSource="false" generated="true" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/release" isTestSource="false" generated="true" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/release" isTestSource="false" generated="true" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/release" type="java-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/release/res" type="java-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/release/resources" type="java-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/release/aidl" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/release/assets" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/release/java" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/release/jni" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/release/rs" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/test/debug" isTestSource="true" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/test/debug" isTestSource="true" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/test/debug" isTestSource="true" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/test/debug" isTestSource="true" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/test/debug" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
@@ -51,9 +57,7 @@
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates" />
- <excludeFolder url="file://$MODULE_DIR$/build/libs" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
- <excludeFolder url="file://$MODULE_DIR$/build/poms" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>
<orderEntry type="jdk" jdkName="Android API 19 Platform" jdkType="Android SDK" />
diff --git a/AndroidAsync/build.gradle b/AndroidAsync/build.gradle
index 34e2ebc..1f19ca7 100644
--- a/AndroidAsync/build.gradle
+++ b/AndroidAsync/build.gradle
@@ -8,9 +8,6 @@ buildscript {
}
apply plugin: 'com.android.library'
-dependencies {
-}
-
android {
sourceSets {
main {
@@ -25,14 +22,6 @@ android {
compileSdkVersion 19
buildToolsVersion "20.0.0"
-
- android {
- lintOptions {
- abortOnError false
- }
- }
-
- publishNonDefault true
}
// upload to maven task
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java
index cfc6a10..504d5c6 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java
@@ -1,6 +1,8 @@
package com.koushikdutta.async.http;
+import android.annotation.SuppressLint;
import android.net.Uri;
+import android.os.Build;
import android.text.TextUtils;
import com.koushikdutta.async.AsyncSSLException;
@@ -36,9 +38,14 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+import java.net.ProxySelector;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.TimeoutException;
public class AsyncHttpClient {
@@ -67,6 +74,36 @@ public class AsyncHttpClient {
insertMiddleware(sslSocketMiddleware = new AsyncSSLSocketMiddleware(this));
}
+
+ @SuppressLint("NewApi")
+ private static void setupAndroidProxy(AsyncHttpRequest request) {
+ // using a explicit proxy?
+ if (request.proxyHost != null)
+ return;
+
+ List<Proxy> proxies = ProxySelector.getDefault().select(URI.create(request.getUri().toString()));
+ if (proxies.isEmpty())
+ return;
+ Proxy proxy = proxies.get(0);
+ if (proxy.type() != Proxy.Type.HTTP)
+ return;
+ if (!(proxy.address() instanceof InetSocketAddress))
+ return;
+ InetSocketAddress proxyAddress = (InetSocketAddress) proxy.address();
+ String proxyHost;
+ 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();
+ }
+ request.enableProxy(proxyHost, proxyAddress.getPort());
+ }
+
public AsyncSocketMiddleware getSocketMiddleware() {
return socketMiddleware;
}
@@ -278,7 +315,7 @@ public class AsyncHttpClient {
newReq.LOGTAG = request.LOGTAG;
newReq.proxyHost = request.proxyHost;
newReq.proxyPort = request.proxyPort;
- newReq.useAndroidProxy = request.useAndroidProxy;
+ setupAndroidProxy(newReq);
copyHeader(request, newReq, "User-Agent");
copyHeader(request, newReq, "Range");
request.logi("Redirecting");
@@ -373,6 +410,9 @@ public class AsyncHttpClient {
}
};
+ // set up the system default proxy and connect
+ setupAndroidProxy(request);
+
synchronized (mMiddleware) {
for (AsyncHttpClientMiddleware middleware: mMiddleware) {
Cancellable socketCancellable = middleware.getSocket(data);
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java
index dc1ef13..22316b5 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java
@@ -1,8 +1,6 @@
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;
@@ -18,11 +16,6 @@ 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;
@@ -324,61 +317,21 @@ 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;
}