aboutsummaryrefslogtreecommitdiffstats
path: root/AndroidAsync
diff options
context:
space:
mode:
authorKoushik Dutta <koushd@gmail.com>2014-08-07 21:15:59 -0700
committerKoushik Dutta <koushd@gmail.com>2014-08-07 21:15:59 -0700
commite3e2faea978636cf5938a886a09f9578885d0f09 (patch)
tree4c6bdb76c994e307eeec17acae76eeb90ad30976 /AndroidAsync
parent5e8d4b4d74cb1cb2c6bf2f3e79b229b309c0359d (diff)
downloadAndroidAsync-e3e2faea978636cf5938a886a09f9578885d0f09.tar.gz
AndroidAsync-e3e2faea978636cf5938a886a09f9578885d0f09.tar.bz2
AndroidAsync-e3e2faea978636cf5938a886a09f9578885d0f09.zip
proxy help
Diffstat (limited to 'AndroidAsync')
-rw-r--r--AndroidAsync/AndroidAsync-AndroidAsync.iml20
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/Headers.java8
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java2
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponse.java5
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java23
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/server/AsyncProxyServer.java11
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);
}
});
}