aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKoushik Dutta <koushd@gmail.com>2013-08-25 19:47:27 -0700
committerKoushik Dutta <koushd@gmail.com>2013-08-25 19:48:40 -0700
commita40a87bead5706ec47d047a43ec85e4fdf595d72 (patch)
tree53a5f02eb7406d35a3af53362aeda17d07b35500
parent04f2040603fe0e5398e267f27c5c74ccb4c5cee1 (diff)
downloadAndroidAsync-a40a87bead5706ec47d047a43ec85e4fdf595d72.tar.gz
AndroidAsync-a40a87bead5706ec47d047a43ec85e4fdf595d72.tar.bz2
AndroidAsync-a40a87bead5706ec47d047a43ec85e4fdf595d72.zip
HEAD request bug:
Fix bug where HEAD requests would erroneously expect a content body. HEAD requests will return the same headers as a GET request, including Content-Length. Sans the body. Change-Id: I49f873a95486ee3a136b6652d85734d45871bf44
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpHead.java14
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponseImpl.java19
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/HttpUtil.java2
-rw-r--r--AndroidAsyncTest/src/com/koushikdutta/async/test/HttpClientTests.java7
4 files changed, 39 insertions, 3 deletions
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpHead.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpHead.java
new file mode 100644
index 0000000..52fb349
--- /dev/null
+++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpHead.java
@@ -0,0 +1,14 @@
+package com.koushikdutta.async.http;
+
+import java.net.URI;
+
+/**
+ * Created by koush on 8/25/13.
+ */
+public class AsyncHttpHead extends AsyncHttpRequest {
+ public AsyncHttpHead(URI uri) {
+ super(uri, METHOD);
+ }
+
+ public static final String METHOD = "HEAD";
+}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponseImpl.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponseImpl.java
index 24ca849..21515ee 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponseImpl.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponseImpl.java
@@ -1,7 +1,14 @@
package com.koushikdutta.async.http;
-import com.koushikdutta.async.*;
+import com.koushikdutta.async.AsyncServer;
+import com.koushikdutta.async.AsyncSocket;
+import com.koushikdutta.async.ByteBufferList;
+import com.koushikdutta.async.DataEmitter;
+import com.koushikdutta.async.DataSink;
+import com.koushikdutta.async.FilteredDataEmitter;
+import com.koushikdutta.async.LineEmitter;
import com.koushikdutta.async.LineEmitter.StringCallback;
+import com.koushikdutta.async.NullDataCallback;
import com.koushikdutta.async.callback.CompletedCallback;
import com.koushikdutta.async.callback.WritableCallback;
import com.koushikdutta.async.http.filter.ChunkedOutputFilter;
@@ -110,7 +117,15 @@ abstract class AsyncHttpResponseImpl extends FilteredDataEmitter implements Asyn
// socket may get detached after headers (websocket)
if (mSocket == null)
return;
- DataEmitter emitter = HttpUtil.getBodyDecoder(mSocket, mRawHeaders, false);
+ DataEmitter emitter;
+ // HEAD requests must not return any data. They still may
+ // return content length, etc, which will confuse the body decoder
+ if (AsyncHttpHead.METHOD.equalsIgnoreCase(mRequest.getMethod())) {
+ emitter = HttpUtil.EndEmitter.create(getServer(), null);
+ }
+ else {
+ emitter = HttpUtil.getBodyDecoder(mSocket, mRawHeaders, false);
+ }
setDataEmitter(emitter);
}
}
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/HttpUtil.java b/AndroidAsync/src/com/koushikdutta/async/http/HttpUtil.java
index a11bbc3..a9e79ff 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/HttpUtil.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/HttpUtil.java
@@ -38,7 +38,7 @@ public class HttpUtil {
return new UnknownRequestBody(contentType);
}
- private static class EndEmitter extends FilteredDataEmitter {
+ static class EndEmitter extends FilteredDataEmitter {
private EndEmitter() {
}
diff --git a/AndroidAsyncTest/src/com/koushikdutta/async/test/HttpClientTests.java b/AndroidAsyncTest/src/com/koushikdutta/async/test/HttpClientTests.java
index f39246a..8c969d1 100644
--- a/AndroidAsyncTest/src/com/koushikdutta/async/test/HttpClientTests.java
+++ b/AndroidAsyncTest/src/com/koushikdutta/async/test/HttpClientTests.java
@@ -1,6 +1,7 @@
package com.koushikdutta.async.test;
import android.os.Environment;
+import android.text.TextUtils;
import android.util.Log;
import com.koushikdutta.async.AsyncServer;
@@ -334,4 +335,10 @@ public class HttpClientTests extends TestCase {
String requestLine = request.getRequestLine().toString();
assertEquals("GET /ds/ds2/Course%20lecture/chapter%2010.pdf HTTP/1.1", requestLine);
}
+
+ public void testHEAD() throws Exception {
+ AsyncHttpHead req = new AsyncHttpHead(URI.create("http://31.media.tumblr.com/9606dcaa33b6877b7c485040393b9392/tumblr_mrtnysMonE1r4vl1yo1_500.jpg"));
+ Future<String> str = AsyncHttpClient.getDefaultInstance().execute(req, (StringCallback)null);
+ assertTrue(TextUtils.isEmpty(str.get(TIMEOUT, TimeUnit.MILLISECONDS)));
+ }
}