aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/network/Network.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/network/Network.java')
-rw-r--r--main/src/cgeo/geocaching/network/Network.java94
1 files changed, 29 insertions, 65 deletions
diff --git a/main/src/cgeo/geocaching/network/Network.java b/main/src/cgeo/geocaching/network/Network.java
index e891d3b..d8638db 100644
--- a/main/src/cgeo/geocaching/network/Network.java
+++ b/main/src/cgeo/geocaching/network/Network.java
@@ -5,18 +5,10 @@ import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.Log;
import cgeo.geocaching.utils.TextUtils;
-import ch.boye.httpclientandroidlib.Header;
-import ch.boye.httpclientandroidlib.HeaderElement;
import ch.boye.httpclientandroidlib.HttpEntity;
-import ch.boye.httpclientandroidlib.HttpException;
-import ch.boye.httpclientandroidlib.HttpRequest;
-import ch.boye.httpclientandroidlib.HttpRequestInterceptor;
import ch.boye.httpclientandroidlib.HttpResponse;
-import ch.boye.httpclientandroidlib.HttpResponseInterceptor;
import ch.boye.httpclientandroidlib.NameValuePair;
-import ch.boye.httpclientandroidlib.ProtocolException;
import ch.boye.httpclientandroidlib.client.HttpClient;
-import ch.boye.httpclientandroidlib.client.entity.GzipDecompressingEntity;
import ch.boye.httpclientandroidlib.client.entity.UrlEncodedFormEntity;
import ch.boye.httpclientandroidlib.client.methods.HttpGet;
import ch.boye.httpclientandroidlib.client.methods.HttpPost;
@@ -26,15 +18,14 @@ import ch.boye.httpclientandroidlib.entity.StringEntity;
import ch.boye.httpclientandroidlib.entity.mime.MultipartEntity;
import ch.boye.httpclientandroidlib.entity.mime.content.FileBody;
import ch.boye.httpclientandroidlib.entity.mime.content.StringBody;
+import ch.boye.httpclientandroidlib.impl.client.DecompressingHttpClient;
import ch.boye.httpclientandroidlib.impl.client.DefaultHttpClient;
-import ch.boye.httpclientandroidlib.impl.client.DefaultRedirectStrategy;
+import ch.boye.httpclientandroidlib.impl.client.LaxRedirectStrategy;
import ch.boye.httpclientandroidlib.params.BasicHttpParams;
import ch.boye.httpclientandroidlib.params.CoreConnectionPNames;
import ch.boye.httpclientandroidlib.params.CoreProtocolPNames;
import ch.boye.httpclientandroidlib.params.HttpParams;
-import ch.boye.httpclientandroidlib.protocol.HttpContext;
import ch.boye.httpclientandroidlib.util.EntityUtils;
-
import org.apache.commons.lang3.CharEncoding;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.jdt.annotation.Nullable;
@@ -48,6 +39,7 @@ import android.net.Uri;
import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
@@ -86,60 +78,8 @@ public abstract class Network {
final DefaultHttpClient client = new DefaultHttpClient();
client.setCookieStore(Cookies.cookieStore);
client.setParams(clientParams);
-
- client.setRedirectStrategy(new DefaultRedirectStrategy() {
- @Override
- public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context) {
- boolean isRedirect = false;
- try {
- isRedirect = super.isRedirected(request, response, context);
- } catch (final ProtocolException e) {
- Log.e("httpclient.isRedirected: unable to check for redirection", e);
- }
- if (!isRedirect) {
- final int responseCode = response.getStatusLine().getStatusCode();
- if (responseCode == 301 || responseCode == 302) {
- return true;
- }
- }
- return isRedirect;
- }
- });
-
- client.addRequestInterceptor(new HttpRequestInterceptor() {
-
- @Override
- public void process(
- final HttpRequest request,
- final HttpContext context) throws HttpException, IOException {
- if (!request.containsHeader("Accept-Encoding")) {
- request.addHeader("Accept-Encoding", "gzip");
- }
- }
- });
- client.addResponseInterceptor(new HttpResponseInterceptor() {
-
- @Override
- public void process(
- final HttpResponse response,
- final HttpContext context) throws HttpException, IOException {
- final HttpEntity entity = response.getEntity();
- if (entity != null) {
- final Header contentEncoding = entity.getContentEncoding();
- if (contentEncoding != null) {
- for (final HeaderElement codec : contentEncoding.getElements()) {
- if (codec.getName().equalsIgnoreCase("gzip")) {
- response.setEntity(new GzipDecompressingEntity(response.getEntity()));
- return;
- }
- }
- }
- }
- }
-
- });
-
- return client;
+ client.setRedirectStrategy(new LaxRedirectStrategy());
+ return new DecompressingHttpClient(client);
}
/**
@@ -426,6 +366,30 @@ public abstract class Network {
return null;
}
+ /**
+ * Get the input stream corresponding to a HTTP response if it exists.
+ *
+ * @param response a HTTP response, which can be null
+ * @return the input stream if the HTTP request is successful, <code>null</code> otherwise
+ */
+ @Nullable
+ public static InputStream getResponseStream(@Nullable final HttpResponse response) {
+ if (!isSuccess(response)) {
+ return null;
+ }
+ assert(response != null);
+ final HttpEntity entity = response.getEntity();
+ if (entity == null) {
+ return null;
+ }
+ try {
+ return entity.getContent();
+ } catch (final IOException e) {
+ Log.e("Network.getResponseStream", e);
+ return null;
+ }
+ }
+
@Nullable
private static String getResponseDataNoError(final HttpResponse response, boolean replaceWhitespace) {
try {