diff options
author | Koushik Dutta <koushd@gmail.com> | 2014-08-07 21:15:59 -0700 |
---|---|---|
committer | Koushik Dutta <koushd@gmail.com> | 2014-08-07 21:15:59 -0700 |
commit | e3e2faea978636cf5938a886a09f9578885d0f09 (patch) | |
tree | 4c6bdb76c994e307eeec17acae76eeb90ad30976 /AndroidAsync | |
parent | 5e8d4b4d74cb1cb2c6bf2f3e79b229b309c0359d (diff) | |
download | AndroidAsync-e3e2faea978636cf5938a886a09f9578885d0f09.tar.gz AndroidAsync-e3e2faea978636cf5938a886a09f9578885d0f09.tar.bz2 AndroidAsync-e3e2faea978636cf5938a886a09f9578885d0f09.zip |
proxy help
Diffstat (limited to 'AndroidAsync')
6 files changed, 56 insertions, 13 deletions
diff --git a/AndroidAsync/AndroidAsync-AndroidAsync.iml b/AndroidAsync/AndroidAsync-AndroidAsync.iml index 1cdbd09..bf5ba2c 100644 --- a/AndroidAsync/AndroidAsync-AndroidAsync.iml +++ b/AndroidAsync/AndroidAsync-AndroidAsync.iml @@ -56,7 +56,25 @@ <sourceFolder url="file://$MODULE_DIR$/test/src" isTestSource="true" /> <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/intermediates/assets" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> + <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> <excludeFolder url="file://$MODULE_DIR$/build/outputs" /> <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> diff --git a/AndroidAsync/src/com/koushikdutta/async/http/Headers.java b/AndroidAsync/src/com/koushikdutta/async/http/Headers.java index 1b4cdc2..9724ce9 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/Headers.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/Headers.java @@ -9,6 +9,7 @@ import org.apache.http.Header; import org.apache.http.message.BasicHeader; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -91,6 +92,13 @@ public class Headers { return r.get(0); } + public Headers removeAll(Collection<String> headers) { + for (String header: headers) { + remove(header); + } + return this; + } + public Header[] toHeaderArray() { ArrayList<Header> ret = new ArrayList<Header>(); for (String key: map.keySet()) { diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java index c18c5d5..d5db48b 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java @@ -482,7 +482,7 @@ public class AsyncHttpServer { } }); } - + private static Hashtable<Integer, String> mCodes = new Hashtable<Integer, String>(); static { mCodes.put(200, "OK"); diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponse.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponse.java index bc6e332..58b8fbc 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponse.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponse.java @@ -3,6 +3,7 @@ package com.koushikdutta.async.http.server; import com.koushikdutta.async.AsyncSocket; import com.koushikdutta.async.DataSink; import com.koushikdutta.async.callback.CompletedCallback; +import com.koushikdutta.async.http.AsyncHttpResponse; import com.koushikdutta.async.http.Headers; import org.json.JSONObject; @@ -23,6 +24,10 @@ public interface AsyncHttpServerResponse extends DataSink, CompletedCallback { public void writeHead(); public void setContentType(String contentType); public void redirect(String location); + + // NOT FINAL + public void proxy(AsyncHttpResponse response); + /** * Alias for end. Used with CompletedEmitters */ diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java index 41c20ce..639ac77 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java @@ -9,6 +9,7 @@ import com.koushikdutta.async.ByteBufferList; import com.koushikdutta.async.DataSink; import com.koushikdutta.async.Util; import com.koushikdutta.async.callback.CompletedCallback; +import com.koushikdutta.async.callback.DataCallback; import com.koushikdutta.async.callback.WritableCallback; import com.koushikdutta.async.http.AsyncHttpHead; import com.koushikdutta.async.http.AsyncHttpResponse; @@ -145,7 +146,8 @@ public class AsyncHttpServerResponseImpl implements AsyncHttpServerResponse { @Override public void end() { - if ("Chunked".equalsIgnoreCase(mRawHeaders.get("Transfer-Encoding"))) { + if ("Chunked".equalsIgnoreCase(mRawHeaders.get("Transfer-Encoding")) && mSink == null + || mSink instanceof ChunkedOutputFilter) { initFirstWrite(); ((ChunkedOutputFilter)mSink).setMaxBuffer(Integer.MAX_VALUE); mSink.write(new ByteBufferList()); @@ -291,6 +293,25 @@ public class AsyncHttpServerResponseImpl implements AsyncHttpServerResponse { } } + @Override + public void proxy(final AsyncHttpResponse remoteResponse) { + code(remoteResponse.code()); + remoteResponse.headers().removeAll("Transfer-Encoding"); + remoteResponse.headers().removeAll("Content-Encoding"); + remoteResponse.headers().removeAll("Connection"); + getHeaders().addAll(remoteResponse.headers()); + // TODO: remove? + remoteResponse.headers().set("Connection", "close"); + Util.pump(remoteResponse, this, new CompletedCallback() { + @Override + public void onCompleted(Exception ex) { + remoteResponse.setEndCallback(new NullCompletedCallback()); + remoteResponse.setDataCallback(new DataCallback.NullDataCallback()); + end(); + } + }); + } + int code = 200; @Override public AsyncHttpServerResponse code(int code) { diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncProxyServer.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncProxyServer.java index 8a16c09..077cead 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncProxyServer.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncProxyServer.java @@ -55,16 +55,7 @@ public class AsyncProxyServer extends AsyncHttpServer { response.send(ex.getMessage()); return; } - response.code(remoteResponse.code()); - response.getHeaders().addAll(remoteResponse.headers()); - response.getHeaders().removeAll("Transfer-Encoding"); - response.getHeaders().removeAll("Content-Encoding"); - Util.pump(remoteResponse, response, new CompletedCallback() { - @Override - public void onCompleted(Exception ex) { - response.end(); - } - }); + response.proxy(remoteResponse); } }); } |