diff options
author | Koushik Dutta <koushd@gmail.com> | 2014-07-21 20:17:31 -0700 |
---|---|---|
committer | Koushik Dutta <koushd@gmail.com> | 2014-07-21 20:17:31 -0700 |
commit | 54ef12d411c1d251b02fd9deed8d175c8c97679e (patch) | |
tree | 0235fd5f8290c5f70115554f9cc02d48f302e280 /AndroidAsync | |
parent | 5b950f69eda8e7a7c7d611fbe06cc3aed2c0bae7 (diff) | |
download | AndroidAsync-54ef12d411c1d251b02fd9deed8d175c8c97679e.tar.gz AndroidAsync-54ef12d411c1d251b02fd9deed8d175c8c97679e.tar.bz2 AndroidAsync-54ef12d411c1d251b02fd9deed8d175c8c97679e.zip |
Move all cache related stuff into subpackage. Contain libcore.
Diffstat (limited to 'AndroidAsync')
34 files changed, 131 insertions, 245 deletions
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java index 7f66deb..b6654a9 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java @@ -20,7 +20,7 @@ import com.koushikdutta.async.future.SimpleFuture; import com.koushikdutta.async.http.AsyncHttpClientMiddleware.OnRequestCompleteData; import com.koushikdutta.async.http.callback.HttpConnectCallback; import com.koushikdutta.async.http.callback.RequestCallback; -import com.koushikdutta.async.http.libcore.RawHeaders; +import com.koushikdutta.async.http.cache.RawHeaders; import com.koushikdutta.async.parser.AsyncParser; import com.koushikdutta.async.parser.ByteBufferListParser; import com.koushikdutta.async.parser.JSONArrayParser; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClientMiddleware.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClientMiddleware.java index 79deb4c..2404482 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClientMiddleware.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClientMiddleware.java @@ -5,7 +5,7 @@ import com.koushikdutta.async.DataEmitter; import com.koushikdutta.async.callback.CompletedCallback; import com.koushikdutta.async.callback.ConnectCallback; import com.koushikdutta.async.future.Cancellable; -import com.koushikdutta.async.http.libcore.RawHeaders; +import com.koushikdutta.async.http.cache.RawHeaders; import com.koushikdutta.async.util.UntypedHashtable; public interface AsyncHttpClientMiddleware { diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java index b3eb45b..fa50c20 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java @@ -5,8 +5,7 @@ import android.util.Log; import com.koushikdutta.async.AsyncSSLException; import com.koushikdutta.async.http.body.AsyncHttpRequestBody; -import com.koushikdutta.async.http.libcore.RawHeaders; -import com.koushikdutta.async.http.libcore.RequestHeaders; +import com.koushikdutta.async.http.cache.RawHeaders; import org.apache.http.Header; import org.apache.http.HeaderIterator; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponse.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponse.java index 631879c..f44ba8e 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponse.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponse.java @@ -3,7 +3,7 @@ package com.koushikdutta.async.http; import com.koushikdutta.async.AsyncSocket; import com.koushikdutta.async.DataEmitter; import com.koushikdutta.async.callback.CompletedCallback; -import com.koushikdutta.async.http.libcore.RawHeaders; +import com.koushikdutta.async.http.cache.RawHeaders; public interface AsyncHttpResponse extends DataEmitter { public void setEndCallback(CompletedCallback handler); diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponseImpl.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponseImpl.java index a3e4189..e1b2399 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponseImpl.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpResponseImpl.java @@ -13,11 +13,8 @@ import com.koushikdutta.async.callback.CompletedCallback; import com.koushikdutta.async.callback.WritableCallback; import com.koushikdutta.async.http.body.AsyncHttpRequestBody; import com.koushikdutta.async.http.filter.ChunkedOutputFilter; -import com.koushikdutta.async.http.libcore.RawHeaders; -import com.koushikdutta.async.http.libcore.ResponseHeaders; -import com.koushikdutta.async.util.Charsets; +import com.koushikdutta.async.http.cache.RawHeaders; -import java.nio.ByteBuffer; import java.nio.charset.Charset; abstract class AsyncHttpResponseImpl extends FilteredDataEmitter implements AsyncSocket, AsyncHttpResponse { diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncSSLSocketMiddleware.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncSSLSocketMiddleware.java index b339c93..9e03461 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncSSLSocketMiddleware.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncSSLSocketMiddleware.java @@ -10,7 +10,7 @@ import com.koushikdutta.async.LineEmitter; import com.koushikdutta.async.Util; import com.koushikdutta.async.callback.CompletedCallback; import com.koushikdutta.async.callback.ConnectCallback; -import com.koushikdutta.async.http.libcore.RawHeaders; +import com.koushikdutta.async.http.cache.RawHeaders; import java.io.IOException; import java.util.ArrayList; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/libcore/HttpDate.java b/AndroidAsync/src/com/koushikdutta/async/http/HttpDate.java index 3ac9da1..f4e79c3 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/libcore/HttpDate.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/HttpDate.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.koushikdutta.async.http.libcore; +package com.koushikdutta.async.http; import java.text.DateFormat; import java.text.ParseException; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/HttpUtil.java b/AndroidAsync/src/com/koushikdutta/async/http/HttpUtil.java index c30e42b..bbcdf8f 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/HttpUtil.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/HttpUtil.java @@ -9,18 +9,11 @@ import com.koushikdutta.async.http.body.JSONObjectBody; import com.koushikdutta.async.http.body.MultipartFormDataBody; import com.koushikdutta.async.http.body.StringBody; import com.koushikdutta.async.http.body.UrlEncodedFormBody; +import com.koushikdutta.async.http.cache.RawHeaders; import com.koushikdutta.async.http.filter.ChunkedInputFilter; import com.koushikdutta.async.http.filter.ContentLengthFilter; import com.koushikdutta.async.http.filter.GZIPInputFilter; import com.koushikdutta.async.http.filter.InflaterInputFilter; -import com.koushikdutta.async.http.libcore.RawHeaders; -import com.koushikdutta.async.http.libcore.RequestHeaders; -import com.koushikdutta.async.http.libcore.ResponseHeaders; - -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; public class HttpUtil { public static AsyncHttpRequestBody getBody(DataEmitter emitter, CompletedCallback reporter, RawHeaders headers) { @@ -148,24 +141,4 @@ public class HttpUtil { return -1; } } - - public static Set<String> varyFields(RawHeaders headers) { - HashSet<String> ret = new HashSet<String>(); - String value = headers.get("Vary"); - if (value == null) - return ret; - for (String varyField : value.split(",")) { - ret.add(varyField.trim()); - } - return ret; - } - - public static boolean isCacheable(RawHeaders requestHeaders, RawHeaders responseHeaders) { - ResponseHeaders r = new ResponseHeaders(null, responseHeaders); - return r.isCacheable(new RequestHeaders(null, requestHeaders)); - } - - public static boolean isNoCache(RawHeaders headers) { - return new RequestHeaders(null, headers).isNoCache(); - } } diff --git a/AndroidAsync/src/com/koushikdutta/async/http/Multimap.java b/AndroidAsync/src/com/koushikdutta/async/http/Multimap.java index 628bdd0..efc16a8 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/Multimap.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/Multimap.java @@ -1,7 +1,7 @@ package com.koushikdutta.async.http; import android.net.Uri; -import com.koushikdutta.async.http.libcore.RawHeaders; +import com.koushikdutta.async.http.cache.RawHeaders; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/WebSocketImpl.java b/AndroidAsync/src/com/koushikdutta/async/http/WebSocketImpl.java index bfcbab6..4af0b99 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/WebSocketImpl.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/WebSocketImpl.java @@ -1,11 +1,5 @@ package com.koushikdutta.async.http; -import java.nio.ByteBuffer; -import java.nio.LongBuffer; -import java.security.MessageDigest; -import java.util.LinkedList; -import java.util.UUID; - import android.text.TextUtils; import android.util.Base64; @@ -17,10 +11,16 @@ 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.libcore.RawHeaders; +import com.koushikdutta.async.http.cache.RawHeaders; import com.koushikdutta.async.http.server.AsyncHttpServerRequest; import com.koushikdutta.async.http.server.AsyncHttpServerResponse; +import java.nio.ByteBuffer; +import java.nio.LongBuffer; +import java.security.MessageDigest; +import java.util.LinkedList; +import java.util.UUID; + public class WebSocketImpl implements WebSocket { @Override public void end() { @@ -116,13 +116,13 @@ public class WebSocketImpl implements WebSocket { String origin = request.getHeaders().get("Origin"); response.responseCode(101); - response.getHeaders().getHeaders().set("Upgrade", "WebSocket"); - response.getHeaders().getHeaders().set("Connection", "Upgrade"); - response.getHeaders().getHeaders().set("Sec-WebSocket-Accept", sha1); + response.getHeaders().set("Upgrade", "WebSocket"); + response.getHeaders().set("Connection", "Upgrade"); + response.getHeaders().set("Sec-WebSocket-Accept", sha1); String protocol = request.getHeaders().get("Sec-WebSocket-Protocol"); // match the protocol (sanity checking and enforcement is done in the caller) if (!TextUtils.isEmpty(protocol)) - response.getHeaders().getHeaders().set("Sec-WebSocket-Protocol", protocol); + response.getHeaders().set("Sec-WebSocket-Protocol", protocol); // if (origin != null) // response.getHeaders().getHeaders().set("Access-Control-Allow-Origin", "http://" + origin); response.writeHead(); diff --git a/AndroidAsync/src/com/koushikdutta/async/http/body/MultipartFormDataBody.java b/AndroidAsync/src/com/koushikdutta/async/http/body/MultipartFormDataBody.java index c61a9d9..1872e19 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/body/MultipartFormDataBody.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/body/MultipartFormDataBody.java @@ -12,7 +12,7 @@ import com.koushikdutta.async.callback.DataCallback; import com.koushikdutta.async.future.Continuation; import com.koushikdutta.async.http.AsyncHttpRequest; import com.koushikdutta.async.http.Multimap; -import com.koushikdutta.async.http.libcore.RawHeaders; +import com.koushikdutta.async.http.cache.RawHeaders; import com.koushikdutta.async.http.server.BoundaryEmitter; import java.io.File; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/body/Part.java b/AndroidAsync/src/com/koushikdutta/async/http/body/Part.java index cfe4993..56fcecb 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/body/Part.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/body/Part.java @@ -3,12 +3,11 @@ package com.koushikdutta.async.http.body; import com.koushikdutta.async.DataSink; import com.koushikdutta.async.callback.CompletedCallback; import com.koushikdutta.async.http.Multimap; -import com.koushikdutta.async.http.libcore.RawHeaders; +import com.koushikdutta.async.http.cache.RawHeaders; import org.apache.http.NameValuePair; import java.io.File; import java.util.List; -import java.util.Map; public class Part { public static final String CONTENT_DISPOSITION = "Content-Disposition"; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/cache/CacheUtil.java b/AndroidAsync/src/com/koushikdutta/async/http/cache/CacheUtil.java new file mode 100644 index 0000000..caadf8f --- /dev/null +++ b/AndroidAsync/src/com/koushikdutta/async/http/cache/CacheUtil.java @@ -0,0 +1,35 @@ +package com.koushikdutta.async.http.cache; + +import java.util.HashSet; +import java.util.Set; + +/** + * Created by koush on 7/21/14. + */ +class CacheUtil { + static Set<String> varyFields(RawHeaders headers) { + HashSet<String> ret = new HashSet<String>(); + String value = headers.get("Vary"); + if (value == null) + return ret; + for (String varyField : value.split(",")) { + ret.add(varyField.trim()); + } + return ret; + } + + static boolean isCacheable(RawHeaders requestHeaders, RawHeaders responseHeaders) { + ResponseHeaders r = new ResponseHeaders(null, responseHeaders); + return r.isCacheable(new RequestHeaders(null, requestHeaders)); + } + + static boolean isNoCache(RawHeaders headers) { + return new RequestHeaders(null, headers).isNoCache(); + } + + ResponseSource chooseResponseSource(long nowMillis, RawHeaders request, RawHeaders response) { + RequestHeaders requestHeaders = new RequestHeaders(null, request); + ResponseHeaders responseHeaders = new ResponseHeaders(null, response); + return responseHeaders.chooseResponseSource(nowMillis, requestHeaders); + } +} diff --git a/AndroidAsync/src/com/koushikdutta/async/http/libcore/HeaderParser.java b/AndroidAsync/src/com/koushikdutta/async/http/cache/HeaderParser.java index 4b9c9ea..4c0a8f1 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/libcore/HeaderParser.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/cache/HeaderParser.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.koushikdutta.async.http.libcore; +package com.koushikdutta.async.http.cache; final class HeaderParser { diff --git a/AndroidAsync/src/com/koushikdutta/async/http/libcore/Objects.java b/AndroidAsync/src/com/koushikdutta/async/http/cache/Objects.java index a0bfbad..23e5afd 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/libcore/Objects.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/cache/Objects.java @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.koushikdutta.async.http.libcore; +package com.koushikdutta.async.http.cache; -public final class Objects { +final class Objects { private Objects() {} /** diff --git a/AndroidAsync/src/com/koushikdutta/async/http/libcore/RawHeaders.java b/AndroidAsync/src/com/koushikdutta/async/http/cache/RawHeaders.java index cb446be..53be340 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/libcore/RawHeaders.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/cache/RawHeaders.java @@ -1,4 +1,4 @@ -package com.koushikdutta.async.http.libcore; +package com.koushikdutta.async.http.cache; /* * Licensed to the Apache Software Foundation (ASF) under one or more diff --git a/AndroidAsync/src/com/koushikdutta/async/http/libcore/RequestHeaders.java b/AndroidAsync/src/com/koushikdutta/async/http/cache/RequestHeaders.java index b5180b4..1576860 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/libcore/RequestHeaders.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/cache/RequestHeaders.java @@ -14,10 +14,12 @@ * limitations under the License. */ -package com.koushikdutta.async.http.libcore; +package com.koushikdutta.async.http.cache; import android.net.Uri; +import com.koushikdutta.async.http.HttpDate; + import java.util.Date; import java.util.List; import java.util.Map; @@ -25,7 +27,7 @@ import java.util.Map; /** * Parsed HTTP request headers. */ -public final class RequestHeaders { +final class RequestHeaders { private final Uri uri; private final RawHeaders headers; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/ResponseCacheMiddleware.java b/AndroidAsync/src/com/koushikdutta/async/http/cache/ResponseCacheMiddleware.java index a811679..22f0ac2 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/ResponseCacheMiddleware.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/cache/ResponseCacheMiddleware.java @@ -1,4 +1,4 @@ -package com.koushikdutta.async.http; +package com.koushikdutta.async.http.cache; import android.net.Uri; import android.util.Base64; @@ -14,13 +14,13 @@ import com.koushikdutta.async.callback.CompletedCallback; import com.koushikdutta.async.callback.WritableCallback; import com.koushikdutta.async.future.Cancellable; import com.koushikdutta.async.future.SimpleCancellable; -import com.koushikdutta.async.http.libcore.RequestHeaders; -import com.koushikdutta.async.util.Charsets; -import com.koushikdutta.async.http.libcore.RawHeaders; -import com.koushikdutta.async.http.libcore.ResponseHeaders; -import com.koushikdutta.async.http.libcore.ResponseSource; -import com.koushikdutta.async.http.libcore.StrictLineReader; +import com.koushikdutta.async.http.AsyncHttpClient; +import com.koushikdutta.async.http.AsyncHttpClientMiddleware; +import com.koushikdutta.async.http.AsyncHttpGet; +import com.koushikdutta.async.http.AsyncHttpRequest; +import com.koushikdutta.async.http.SimpleMiddleware; import com.koushikdutta.async.util.Allocator; +import com.koushikdutta.async.util.Charsets; import com.koushikdutta.async.util.FileCache; import com.koushikdutta.async.util.StreamUtility; @@ -95,7 +95,7 @@ public class ResponseCacheMiddleware extends SimpleMiddleware { // also see if this can be turned into a conditional cache request. @Override public Cancellable getSocket(final GetSocketData data) { - if (cache == null || !caching || HttpUtil.isNoCache(data.request.getHeaders())) { + if (cache == null || !caching || CacheUtil.isNoCache(data.request.getHeaders())) { networkCount++; return null; } @@ -244,7 +244,7 @@ public class ResponseCacheMiddleware extends SimpleMiddleware { if (!caching) return; - if (!HttpUtil.isCacheable(data.request.getHeaders(), data.headers) || !data.request.getMethod().equals(AsyncHttpGet.METHOD)) { + if (!CacheUtil.isCacheable(data.request.getHeaders(), data.headers) || !data.request.getMethod().equals(AsyncHttpGet.METHOD)) { /* * Don't cache non-GET responses. We're technically allowed to cache * HEAD requests and some POST requests, but the complexity of doing @@ -256,7 +256,7 @@ public class ResponseCacheMiddleware extends SimpleMiddleware { } String key = FileCache.toKeyString(data.request.getUri()); - RawHeaders varyHeaders = data.request.getHeaders().getAll(HttpUtil.varyFields(data.headers)); + RawHeaders varyHeaders = data.request.getHeaders().getAll(CacheUtil.varyFields(data.headers)); Entry entry = new Entry(data.request.getUri(), varyHeaders, data.request, data.headers); BodyCacher cacher = new BodyCacher(); EntryEditor editor = new EntryEditor(key); diff --git a/AndroidAsync/src/com/koushikdutta/async/http/libcore/ResponseHeaders.java b/AndroidAsync/src/com/koushikdutta/async/http/cache/ResponseHeaders.java index 3cc128e..3275647 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/libcore/ResponseHeaders.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/cache/ResponseHeaders.java @@ -14,12 +14,13 @@ * limitations under the License. */ -package com.koushikdutta.async.http.libcore; +package com.koushikdutta.async.http.cache; import android.net.Uri; +import com.koushikdutta.async.http.HttpDate; + import java.net.HttpURLConnection; -import java.net.URI; import java.util.Collections; import java.util.Date; import java.util.List; @@ -31,7 +32,7 @@ import java.util.concurrent.TimeUnit; /** * Parsed HTTP response headers. */ -public final class ResponseHeaders { +final class ResponseHeaders { /** HTTP header name for the local time when the request was sent. */ private static final String SENT_MILLIS = "X-Android-Sent-Millis"; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/libcore/ResponseSource.java b/AndroidAsync/src/com/koushikdutta/async/http/cache/ResponseSource.java index 3501b0f..a4046c7 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/libcore/ResponseSource.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/cache/ResponseSource.java @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.koushikdutta.async.http.libcore; +package com.koushikdutta.async.http.cache; -public enum ResponseSource { +enum ResponseSource { /** * Return the response from the cache immediately. diff --git a/AndroidAsync/src/com/koushikdutta/async/http/libcore/StrictLineReader.java b/AndroidAsync/src/com/koushikdutta/async/http/cache/StrictLineReader.java index d1cb5d9..35b8306 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/libcore/StrictLineReader.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/cache/StrictLineReader.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.koushikdutta.async.http.libcore; +package com.koushikdutta.async.http.cache; import com.koushikdutta.async.util.Charsets; @@ -43,7 +43,7 @@ import java.nio.charset.Charset; * We currently check in constructor that the charset is one of US-ASCII, UTF-8 and ISO-8859-1. * The default charset is US_ASCII. */ -public class StrictLineReader implements Closeable { +class StrictLineReader implements Closeable { private static final byte CR = (byte)'\r'; private static final byte LF = (byte)'\n'; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/callback/HeadersCallback.java b/AndroidAsync/src/com/koushikdutta/async/http/callback/HeadersCallback.java index 80f1be6..68db69f 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/callback/HeadersCallback.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/callback/HeadersCallback.java @@ -1,6 +1,6 @@ package com.koushikdutta.async.http.callback; -import com.koushikdutta.async.http.libcore.RawHeaders; +import com.koushikdutta.async.http.cache.RawHeaders; /** * Created by koush on 6/30/13. diff --git a/AndroidAsync/src/com/koushikdutta/async/http/filter/GZIPInputFilter.java b/AndroidAsync/src/com/koushikdutta/async/http/filter/GZIPInputFilter.java index e1a23d0..83beef7 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/filter/GZIPInputFilter.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/filter/GZIPInputFilter.java @@ -1,9 +1,11 @@ package com.koushikdutta.async.http.filter; -import com.koushikdutta.async.*; -import com.koushikdutta.async.callback.DataCallback; -import com.koushikdutta.async.http.libcore.Memory; +import com.koushikdutta.async.ByteBufferList; +import com.koushikdutta.async.DataEmitter; +import com.koushikdutta.async.NullDataCallback; +import com.koushikdutta.async.PushParser; import com.koushikdutta.async.PushParser.ParseCallback; +import com.koushikdutta.async.callback.DataCallback; import java.io.IOException; import java.nio.ByteBuffer; @@ -13,6 +15,14 @@ import java.util.zip.GZIPInputStream; import java.util.zip.Inflater; public class GZIPInputFilter extends InflaterInputFilter { + static short peekShort(byte[] src, int offset, ByteOrder order) { + if (order == ByteOrder.BIG_ENDIAN) { + return (short) ((src[offset] << 8) | (src[offset + 1] & 0xff)); + } else { + return (short) ((src[offset + 1] << 8) | (src[offset] & 0xff)); + } + } + private static final int FCOMMENT = 16; private static final int FEXTRA = 4; @@ -44,7 +54,7 @@ public class GZIPInputFilter extends InflaterInputFilter { boolean hcrc; public void parsed(byte[] header) { - short magic = Memory.peekShort(header, 0, ByteOrder.LITTLE_ENDIAN); + short magic = peekShort(header, 0, ByteOrder.LITTLE_ENDIAN); if (magic != (short) GZIPInputStream.GZIP_MAGIC) { report(new IOException(String.format("unknown format (magic number %x)", magic))); emitter.setDataCallback(new NullDataCallback()); @@ -61,7 +71,7 @@ public class GZIPInputFilter extends InflaterInputFilter { if (hcrc) { crc.update(header, 0, 2); } - int length = Memory.peekShort(header, 0, ByteOrder.LITTLE_ENDIAN) & 0xffff; + int length = peekShort(header, 0, ByteOrder.LITTLE_ENDIAN) & 0xffff; parser.readByteArray(length, new ParseCallback<byte[]>() { public void parsed(byte[] buf) { if (hcrc) { @@ -100,7 +110,7 @@ public class GZIPInputFilter extends InflaterInputFilter { if (hcrc) { parser.readByteArray(2, new ParseCallback<byte[]>() { public void parsed(byte[] header) { - short crc16 = Memory.peekShort(header, 0, ByteOrder.LITTLE_ENDIAN); + short crc16 = peekShort(header, 0, ByteOrder.LITTLE_ENDIAN); if ((short) crc.getValue() != crc16) { report(new IOException("CRC mismatch")); return; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/libcore/Memory.java b/AndroidAsync/src/com/koushikdutta/async/http/libcore/Memory.java deleted file mode 100644 index 8b3b281..0000000 --- a/AndroidAsync/src/com/koushikdutta/async/http/libcore/Memory.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.koushikdutta.async.http.libcore; - -import java.io.FileDescriptor; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; - -/** - * Unsafe access to memory. - */ -public final class Memory { - private Memory() { } - - public static int peekInt(byte[] src, int offset, ByteOrder order) { - if (order == ByteOrder.BIG_ENDIAN) { - return (((src[offset++] & 0xff) << 24) | - ((src[offset++] & 0xff) << 16) | - ((src[offset++] & 0xff) << 8) | - ((src[offset ] & 0xff) << 0)); - } else { - return (((src[offset++] & 0xff) << 0) | - ((src[offset++] & 0xff) << 8) | - ((src[offset++] & 0xff) << 16) | - ((src[offset ] & 0xff) << 24)); - } - } - - public static long peekLong(byte[] src, int offset, ByteOrder order) { - if (order == ByteOrder.BIG_ENDIAN) { - int h = ((src[offset++] & 0xff) << 24) | - ((src[offset++] & 0xff) << 16) | - ((src[offset++] & 0xff) << 8) | - ((src[offset++] & 0xff) << 0); - int l = ((src[offset++] & 0xff) << 24) | - ((src[offset++] & 0xff) << 16) | - ((src[offset++] & 0xff) << 8) | - ((src[offset ] & 0xff) << 0); - return (((long) h) << 32L) | ((long) l) & 0xffffffffL; - } else { - int l = ((src[offset++] & 0xff) << 0) | - ((src[offset++] & 0xff) << 8) | - ((src[offset++] & 0xff) << 16) | - ((src[offset++] & 0xff) << 24); - int h = ((src[offset++] & 0xff) << 0) | - ((src[offset++] & 0xff) << 8) | - ((src[offset++] & 0xff) << 16) | - ((src[offset ] & 0xff) << 24); - return (((long) h) << 32L) | ((long) l) & 0xffffffffL; - } - } - - public static short peekShort(byte[] src, int offset, ByteOrder order) { - if (order == ByteOrder.BIG_ENDIAN) { - return (short) ((src[offset] << 8) | (src[offset + 1] & 0xff)); - } else { - return (short) ((src[offset + 1] << 8) | (src[offset] & 0xff)); - } - } - - public static void pokeInt(byte[] dst, int offset, int value, ByteOrder order) { - if (order == ByteOrder.BIG_ENDIAN) { - dst[offset++] = (byte) ((value >> 24) & 0xff); - dst[offset++] = (byte) ((value >> 16) & 0xff); - dst[offset++] = (byte) ((value >> 8) & 0xff); - dst[offset ] = (byte) ((value >> 0) & 0xff); - } else { - dst[offset++] = (byte) ((value >> 0) & 0xff); - dst[offset++] = (byte) ((value >> 8) & 0xff); - dst[offset++] = (byte) ((value >> 16) & 0xff); - dst[offset ] = (byte) ((value >> 24) & 0xff); - } - } - - public static void pokeLong(byte[] dst, int offset, long value, ByteOrder order) { - if (order == ByteOrder.BIG_ENDIAN) { - int i = (int) (value >> 32); - dst[offset++] = (byte) ((i >> 24) & 0xff); - dst[offset++] = (byte) ((i >> 16) & 0xff); - dst[offset++] = (byte) ((i >> 8) & 0xff); - dst[offset++] = (byte) ((i >> 0) & 0xff); - i = (int) value; - dst[offset++] = (byte) ((i >> 24) & 0xff); - dst[offset++] = (byte) ((i >> 16) & 0xff); - dst[offset++] = (byte) ((i >> 8) & 0xff); - dst[offset ] = (byte) ((i >> 0) & 0xff); - } else { - int i = (int) value; - dst[offset++] = (byte) ((i >> 0) & 0xff); - dst[offset++] = (byte) ((i >> 8) & 0xff); - dst[offset++] = (byte) ((i >> 16) & 0xff); - dst[offset++] = (byte) ((i >> 24) & 0xff); - i = (int) (value >> 32); - dst[offset++] = (byte) ((i >> 0) & 0xff); - dst[offset++] = (byte) ((i >> 8) & 0xff); - dst[offset++] = (byte) ((i >> 16) & 0xff); - dst[offset ] = (byte) ((i >> 24) & 0xff); - } - } - - public static void pokeShort(byte[] dst, int offset, short value, ByteOrder order) { - if (order == ByteOrder.BIG_ENDIAN) { - dst[offset++] = (byte) ((value >> 8) & 0xff); - dst[offset ] = (byte) ((value >> 0) & 0xff); - } else { - dst[offset++] = (byte) ((value >> 0) & 0xff); - dst[offset ] = (byte) ((value >> 8) & 0xff); - } - } -} diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java index b5d69e6..1c981b7 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServer.java @@ -25,8 +25,7 @@ import com.koushikdutta.async.http.Multimap; import com.koushikdutta.async.http.WebSocket; import com.koushikdutta.async.http.WebSocketImpl; import com.koushikdutta.async.http.body.AsyncHttpRequestBody; -import com.koushikdutta.async.http.libcore.RawHeaders; -import com.koushikdutta.async.http.libcore.RequestHeaders; +import com.koushikdutta.async.http.cache.RawHeaders; import com.koushikdutta.async.util.StreamUtility; import java.io.File; @@ -150,7 +149,7 @@ public class AsyncHttpServer { @Override public void onCompleted(Exception e) { // if the protocol was switched off http, ignore this request/response. - if (res.getHeaders().getHeaders().getResponseCode() == 101) + if (res.getHeaders().getResponseCode() == 101) return; requestComplete = true; super.onCompleted(e); @@ -381,14 +380,14 @@ public class AsyncHttpServer { String path = request.getMatcher().replaceAll(""); android.util.Pair<Integer, InputStream> pair = getAssetStream(_context, assetPath + path); final InputStream is = pair.second; - response.getHeaders().getHeaders().set("Content-Length", String.valueOf(pair.first)); + response.getHeaders().set("Content-Length", String.valueOf(pair.first)); if (is == null) { response.responseCode(404); response.end(); return; } response.responseCode(200); - response.getHeaders().getHeaders().add("Content-Type", getContentType(assetPath + path)); + response.getHeaders().add("Content-Type", getContentType(assetPath + path)); Util.pump(is, response, new CompletedCallback() { @Override public void onCompleted(Exception ex) { @@ -405,14 +404,14 @@ public class AsyncHttpServer { android.util.Pair<Integer, InputStream> pair = getAssetStream(_context, assetPath + path); final InputStream is = pair.second; StreamUtility.closeQuietly(is); - response.getHeaders().getHeaders().set("Content-Length", String.valueOf(pair.first)); + response.getHeaders().set("Content-Length", String.valueOf(pair.first)); if (is == null) { response.responseCode(404); response.end(); return; } response.responseCode(200); - response.getHeaders().getHeaders().add("Content-Type", getContentType(assetPath + path)); + response.getHeaders().add("Content-Type", getContentType(assetPath + path)); response.writeHead(); response.end(); } diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerRequest.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerRequest.java index 9af204e..77ce875 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerRequest.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerRequest.java @@ -4,7 +4,7 @@ import com.koushikdutta.async.AsyncSocket; import com.koushikdutta.async.DataEmitter; import com.koushikdutta.async.http.Multimap; import com.koushikdutta.async.http.body.AsyncHttpRequestBody; -import com.koushikdutta.async.http.libcore.RawHeaders; +import com.koushikdutta.async.http.cache.RawHeaders; import java.util.regex.Matcher; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerRequestImpl.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerRequestImpl.java index 3e82bd3..ba0576f 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerRequestImpl.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerRequestImpl.java @@ -9,7 +9,7 @@ import com.koushikdutta.async.callback.CompletedCallback; import com.koushikdutta.async.callback.DataCallback; import com.koushikdutta.async.http.HttpUtil; import com.koushikdutta.async.http.body.AsyncHttpRequestBody; -import com.koushikdutta.async.http.libcore.RawHeaders; +import com.koushikdutta.async.http.cache.RawHeaders; import java.util.regex.Matcher; diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponse.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponse.java index 07d8a92..87fbc5e 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponse.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponse.java @@ -1,14 +1,14 @@ package com.koushikdutta.async.http.server; -import java.io.File; -import java.io.InputStream; - -import org.json.JSONObject; - import com.koushikdutta.async.AsyncSocket; import com.koushikdutta.async.DataSink; import com.koushikdutta.async.callback.CompletedCallback; -import com.koushikdutta.async.http.libcore.ResponseHeaders; +import com.koushikdutta.async.http.cache.RawHeaders; + +import org.json.JSONObject; + +import java.io.File; +import java.io.InputStream; public interface AsyncHttpServerResponse extends DataSink, CompletedCallback { public void end(); @@ -18,7 +18,7 @@ public interface AsyncHttpServerResponse extends DataSink, CompletedCallback { public void sendFile(File file); public void sendStream(InputStream inputStream, long totalLength); public void responseCode(int code); - public ResponseHeaders getHeaders(); + public RawHeaders getHeaders(); public void writeHead(); public void setContentType(String contentType); public void redirect(String location); diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java index 08d3af9..0fe4e10 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/server/AsyncHttpServerResponseImpl.java @@ -12,9 +12,8 @@ import com.koushikdutta.async.callback.CompletedCallback; import com.koushikdutta.async.callback.WritableCallback; import com.koushikdutta.async.http.AsyncHttpHead; import com.koushikdutta.async.http.HttpUtil; +import com.koushikdutta.async.http.cache.RawHeaders; import com.koushikdutta.async.http.filter.ChunkedOutputFilter; -import com.koushikdutta.async.http.libcore.RawHeaders; -import com.koushikdutta.async.http.libcore.ResponseHeaders; import com.koushikdutta.async.util.StreamUtility; import org.json.JSONObject; @@ -24,16 +23,14 @@ import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.UnsupportedEncodingException; -import java.nio.ByteBuffer; public class AsyncHttpServerResponseImpl implements AsyncHttpServerResponse { private RawHeaders mRawHeaders = new RawHeaders(); private long mContentLength = -1; - private ResponseHeaders mHeaders = new ResponseHeaders(null, mRawHeaders); - + @Override - public ResponseHeaders getHeaders() { - return mHeaders; + public RawHeaders getHeaders() { + return mRawHeaders; } public AsyncSocket getSocket() { @@ -226,7 +223,7 @@ public class AsyncHttpServerResponseImpl implements AsyncHttpServerResponse { end = totalLength - 1; responseCode(206); - getHeaders().getHeaders().set("Content-Range", String.format("bytes %d-%d/%d", start, end, totalLength)); + getHeaders().set("Content-Range", String.format("bytes %d-%d/%d", start, end, totalLength)); } catch (Exception e) { responseCode(416); @@ -240,7 +237,7 @@ public class AsyncHttpServerResponseImpl implements AsyncHttpServerResponse { mContentLength = end - start + 1; mRawHeaders.set("Content-Length", String.valueOf(mContentLength)); mRawHeaders.set("Accept-Ranges", "bytes"); - if (getHeaders().getHeaders().getStatusLine() == null) + if (getHeaders().getStatusLine() == null) responseCode(200); if (mRequest.getMethod().equals(AsyncHttpHead.METHOD)) { writeHead(); diff --git a/AndroidAsync/test/src/com/koushikdutta/async/test/CacheTests.java b/AndroidAsync/test/src/com/koushikdutta/async/test/CacheTests.java index bffc34c..78f3301 100644 --- a/AndroidAsync/test/src/com/koushikdutta/async/test/CacheTests.java +++ b/AndroidAsync/test/src/com/koushikdutta/async/test/CacheTests.java @@ -6,8 +6,8 @@ import com.koushikdutta.async.AsyncServer; import com.koushikdutta.async.AsyncServerSocket; import com.koushikdutta.async.http.AsyncHttpClient; import com.koushikdutta.async.http.AsyncHttpGet; -import com.koushikdutta.async.http.ResponseCacheMiddleware; -import com.koushikdutta.async.http.libcore.HttpDate; +import com.koushikdutta.async.http.HttpDate; +import com.koushikdutta.async.http.cache.ResponseCacheMiddleware; import com.koushikdutta.async.http.server.AsyncHttpServer; import com.koushikdutta.async.http.server.AsyncHttpServerRequest; import com.koushikdutta.async.http.server.AsyncHttpServerResponse; @@ -30,8 +30,8 @@ public class CacheTests extends TestCase { httpServer.get("/uname/(.*)", new HttpServerRequestCallback() { @Override public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) { - response.getHeaders().getHeaders().set("Date", HttpDate.format(new Date())); - response.getHeaders().getHeaders().set("Cache-Control", "private, max-age=10000"); + response.getHeaders().set("Date", HttpDate.format(new Date())); + response.getHeaders().set("Cache-Control", "private, max-age=10000"); response.send(request.getMatcher().group(1)); } }); diff --git a/AndroidAsync/test/src/com/koushikdutta/async/test/HttpClientTests.java b/AndroidAsync/test/src/com/koushikdutta/async/test/HttpClientTests.java index ea98329..b9645e4 100644 --- a/AndroidAsync/test/src/com/koushikdutta/async/test/HttpClientTests.java +++ b/AndroidAsync/test/src/com/koushikdutta/async/test/HttpClientTests.java @@ -20,7 +20,7 @@ import com.koushikdutta.async.http.AsyncHttpHead; import com.koushikdutta.async.http.AsyncHttpPost; import com.koushikdutta.async.http.AsyncHttpRequest; import com.koushikdutta.async.http.AsyncHttpResponse; -import com.koushikdutta.async.http.ResponseCacheMiddleware; +import com.koushikdutta.async.http.cache.ResponseCacheMiddleware; import com.koushikdutta.async.http.body.JSONObjectBody; import com.koushikdutta.async.http.callback.HttpConnectCallback; import com.koushikdutta.async.http.server.AsyncHttpServer; diff --git a/AndroidAsync/test/src/com/koushikdutta/async/test/HttpServerTests.java b/AndroidAsync/test/src/com/koushikdutta/async/test/HttpServerTests.java index df117e6..7139caf 100644 --- a/AndroidAsync/test/src/com/koushikdutta/async/test/HttpServerTests.java +++ b/AndroidAsync/test/src/com/koushikdutta/async/test/HttpServerTests.java @@ -49,7 +49,7 @@ public class HttpServerTests extends TestCase { httpServer.get("/hello", new HttpServerRequestCallback() { @Override public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) { - assertNotNull(request.getHeaders().getHost()); + assertNotNull(request.getHeaders().get("Host")); response.send("hello"); } }); @@ -58,7 +58,7 @@ public class HttpServerTests extends TestCase { @Override public void onRequest(AsyncHttpServerRequest request, final AsyncHttpServerResponse response) { try { - assertNotNull(request.getHeaders().getHost()); + assertNotNull(request.getHeaders().get("Host")); JSONObject json = new JSONObject(); if (request.getBody() instanceof UrlEncodedFormBody) { UrlEncodedFormBody body = (UrlEncodedFormBody)request.getBody(); diff --git a/AndroidAsync/test/src/com/koushikdutta/async/test/Issue59.java b/AndroidAsync/test/src/com/koushikdutta/async/test/Issue59.java index ac44713..a72f306 100644 --- a/AndroidAsync/test/src/com/koushikdutta/async/test/Issue59.java +++ b/AndroidAsync/test/src/com/koushikdutta/async/test/Issue59.java @@ -28,7 +28,7 @@ public class Issue59 extends TestCase { public void onRequest(AsyncHttpServerRequest request, final AsyncHttpServerResponse response) { // setting this to empty is a hacky way of telling the framework not to use // transfer-encoding. It will get removed. - response.getHeaders().getHeaders().set("Transfer-Encoding", ""); + response.getHeaders().set("Transfer-Encoding", ""); response.responseCode(200); Util.writeAll(response, "foobarbeepboop".getBytes(), new CompletedCallback() { @Override diff --git a/AndroidAsync/test/src/com/koushikdutta/async/test/WebSocketTests.java b/AndroidAsync/test/src/com/koushikdutta/async/test/WebSocketTests.java index a5a7f92..dcbe6c8 100644 --- a/AndroidAsync/test/src/com/koushikdutta/async/test/WebSocketTests.java +++ b/AndroidAsync/test/src/com/koushikdutta/async/test/WebSocketTests.java @@ -6,7 +6,7 @@ import com.koushikdutta.async.http.AsyncHttpClient; import com.koushikdutta.async.http.AsyncHttpClient.WebSocketConnectCallback; import com.koushikdutta.async.http.WebSocket; import com.koushikdutta.async.http.WebSocket.StringCallback; -import com.koushikdutta.async.http.libcore.RequestHeaders; +import com.koushikdutta.async.http.cache.RawHeaders; import com.koushikdutta.async.http.server.AsyncHttpServer; import com.koushikdutta.async.http.server.AsyncHttpServer.WebSocketRequestCallback; @@ -34,7 +34,7 @@ public class WebSocketTests extends TestCase { httpServer.websocket("/ws", new WebSocketRequestCallback() { @Override - public void onConnected(final WebSocket webSocket, RequestHeaders headers) { + public void onConnected(final WebSocket webSocket, RawHeaders headers) { webSocket.setStringCallback(new StringCallback() { @Override public void onStringAvailable(String s) { |