diff options
author | Koushik Dutta <koushd@gmail.com> | 2014-07-13 11:49:05 -0700 |
---|---|---|
committer | Koushik Dutta <koushd@gmail.com> | 2014-07-13 11:49:05 -0700 |
commit | eb633ea9125ec9ddfbe99d04301b61cbbac3a507 (patch) | |
tree | 068f94cc7b08e9b71ba1902028079bbc7ebc96bb /AndroidAsync | |
parent | 0d7c7b86a7257b98d091c493052194cff0be1aed (diff) | |
download | AndroidAsync-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.iml | 42 | ||||
-rw-r--r-- | AndroidAsync/build.gradle | 11 | ||||
-rw-r--r-- | AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java | 42 | ||||
-rw-r--r-- | AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java | 47 |
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; } |