From 9f3cf1cf5684ce788c2bfae260a8e0ebe6fa93ac Mon Sep 17 00:00:00 2001 From: Georgie Casey Date: Wed, 30 Oct 2013 03:16:45 +0000 Subject: [PATCH] volley edit to get all response headers like set-cookie --- .classpath | 3 +- project.properties | 1 + src/com/android/volley/NetworkResponse.java | 23 +++++++++- .../android/volley/toolbox/BasicNetwork.java | 43 +++++++++++-------- src/com/android/volley/toolbox/HurlStack.java | 10 +++-- 5 files changed, 54 insertions(+), 26 deletions(-) diff --git a/.classpath b/.classpath index a4763d1..7bc01d9 100644 --- a/.classpath +++ b/.classpath @@ -3,6 +3,7 @@ - + + diff --git a/project.properties b/project.properties index 28341e2..3abcf31 100644 --- a/project.properties +++ b/project.properties @@ -13,3 +13,4 @@ target=android-14 # Make sure to pass a valid value to renderscript # https://code.google.com/p/android/issues/detail?id=40487 renderscript.opt.level=O0 +android.library=true diff --git a/src/com/android/volley/NetworkResponse.java b/src/com/android/volley/NetworkResponse.java index 6a0b5c2..d5ac4af 100644 --- a/src/com/android/volley/NetworkResponse.java +++ b/src/com/android/volley/NetworkResponse.java @@ -16,11 +16,12 @@ package com.android.volley; -import org.apache.http.HttpStatus; - import java.util.Collections; import java.util.Map; +import org.apache.http.Header; +import org.apache.http.HttpStatus; + /** * Data and headers returned from {@link Network#performRequest(Request)}. */ @@ -38,6 +39,16 @@ public NetworkResponse(int statusCode, byte[] data, Map headers, this.data = data; this.headers = headers; this.notModified = notModified; + this.apacheHeaders=null; + } + + public NetworkResponse(int statusCode, byte[] data, Map headers, + boolean notModified, Header[] apacheHeaders) { + this.statusCode = statusCode; + this.data = data; + this.headers = headers; + this.notModified = notModified; + this.apacheHeaders=apacheHeaders; } public NetworkResponse(byte[] data) { @@ -59,4 +70,12 @@ public NetworkResponse(byte[] data, Map headers) { /** True if the server returned a 304 (Not Modified). */ public final boolean notModified; + + /** added by georgiecasey + /* https://github.com/georgiecasey + /* fix for getting duplicate header responses like multiple Set-Cookie + /* http://stackoverflow.com/questions/18998361/android-volley-duplicate-set-cookie-is-overriden + */ + public final Header[] apacheHeaders; + } \ No newline at end of file diff --git a/src/com/android/volley/toolbox/BasicNetwork.java b/src/com/android/volley/toolbox/BasicNetwork.java index 5883904..460790c 100644 --- a/src/com/android/volley/toolbox/BasicNetwork.java +++ b/src/com/android/volley/toolbox/BasicNetwork.java @@ -16,7 +16,24 @@ package com.android.volley.toolbox; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.SocketTimeoutException; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.apache.http.Header; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.StatusLine; +import org.apache.http.conn.ConnectTimeoutException; +import org.apache.http.impl.cookie.DateUtils; + import android.os.SystemClock; +import android.util.Log; import com.android.volley.AuthFailureError; import com.android.volley.Cache; @@ -31,22 +48,6 @@ import com.android.volley.VolleyError; import com.android.volley.VolleyLog; -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.HttpStatus; -import org.apache.http.StatusLine; -import org.apache.http.conn.ConnectTimeoutException; -import org.apache.http.impl.cookie.DateUtils; - -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.SocketTimeoutException; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - /** * A network performing Volley requests over an {@link HttpStack}. */ @@ -91,6 +92,10 @@ public NetworkResponse performRequest(Request request) throws VolleyError { Map headers = new HashMap(); addCacheHeaders(headers, request.getCacheEntry()); httpResponse = mHttpStack.performRequest(request, headers); + Header[] header_test=httpResponse.getAllHeaders(); + for (int i = 0; i < header_test.length; i++) { + Log.d("GEORGEI_VOLLEY",header_test[i].getName() + " - " +header_test[i].getValue()); + } StatusLine statusLine = httpResponse.getStatusLine(); int statusCode = statusLine.getStatusCode(); @@ -98,7 +103,7 @@ public NetworkResponse performRequest(Request request) throws VolleyError { // Handle cache validation. if (statusCode == HttpStatus.SC_NOT_MODIFIED) { return new NetworkResponse(HttpStatus.SC_NOT_MODIFIED, - request.getCacheEntry().data, responseHeaders, true); + request.getCacheEntry().data, responseHeaders, true, httpResponse.getAllHeaders()); } // Some responses such as 204s do not have content. We must check. @@ -117,7 +122,7 @@ public NetworkResponse performRequest(Request request) throws VolleyError { if (statusCode < 200 || statusCode > 299) { throw new IOException(); } - return new NetworkResponse(statusCode, responseContents, responseHeaders, false); + return new NetworkResponse(statusCode, responseContents, responseHeaders, false, httpResponse.getAllHeaders()); } catch (SocketTimeoutException e) { attemptRetryOnException("socket", request, new TimeoutError()); } catch (ConnectTimeoutException e) { @@ -135,7 +140,7 @@ public NetworkResponse performRequest(Request request) throws VolleyError { VolleyLog.e("Unexpected response code %d for %s", statusCode, request.getUrl()); if (responseContents != null) { networkResponse = new NetworkResponse(statusCode, responseContents, - responseHeaders, false); + responseHeaders, false, httpResponse.getAllHeaders()); if (statusCode == HttpStatus.SC_UNAUTHORIZED || statusCode == HttpStatus.SC_FORBIDDEN) { attemptRetryOnException("auth", diff --git a/src/com/android/volley/toolbox/HurlStack.java b/src/com/android/volley/toolbox/HurlStack.java index 97f94f0..f1b30e2 100644 --- a/src/com/android/volley/toolbox/HurlStack.java +++ b/src/com/android/volley/toolbox/HurlStack.java @@ -117,10 +117,12 @@ public HttpResponse performRequest(Request request, Map addit BasicHttpResponse response = new BasicHttpResponse(responseStatus); response.setEntity(entityFromConnection(connection)); for (Entry> header : connection.getHeaderFields().entrySet()) { - if (header.getKey() != null) { - Header h = new BasicHeader(header.getKey(), header.getValue().get(0)); - response.addHeader(h); - } + if (header.getKey() != null) { + for (String headerValue : header.getValue()) { + Header h = new BasicHeader(header.getKey(), headerValue); + response.addHeader(h); + } + } } return response; }