Only add one User-Agent header.
Jeff Sharkey [Thu, 10 Jan 2013 19:12:52 +0000 (11:12 -0800)]
Also include more details when reporting HTTP error codes.

Bug: 7966393
Change-Id: I251b1ec7c827693817391b6e9fb8b0cab995395e

src/com/android/providers/downloads/DownloadThread.java
src/com/android/providers/downloads/StopRequestException.java

index dc2ef57..c77224a 100644 (file)
@@ -306,7 +306,8 @@ public class DownloadThread extends Thread {
                     case HTTP_PRECON_FAILED:
                         // TODO: probably means our etag precondition was
                         // changed; flush and retry again
-                        StopRequestException.throwUnhandledHttpError(responseCode);
+                        StopRequestException.throwUnhandledHttpError(
+                                responseCode, conn.getResponseMessage());
 
                     case HTTP_UNAVAILABLE:
                         parseRetryAfterHeaders(state, conn);
@@ -320,7 +321,8 @@ public class DownloadThread extends Thread {
                         throw new StopRequestException(STATUS_WAITING_TO_RETRY, "Internal error");
 
                     default:
-                        StopRequestException.throwUnhandledHttpError(responseCode);
+                        StopRequestException.throwUnhandledHttpError(
+                                responseCode, conn.getResponseMessage());
                 }
             } catch (IOException e) {
                 // Trouble with low-level sockets
@@ -791,12 +793,15 @@ public class DownloadThread extends Thread {
      * Add custom headers for this download to the HTTP request.
      */
     private void addRequestHeaders(State state, HttpURLConnection conn) {
-        conn.addRequestProperty("User-Agent", userAgent());
-
         for (Pair<String, String> header : mInfo.getHeaders()) {
             conn.addRequestProperty(header.first, header.second);
         }
 
+        // Only splice in user agent when not already defined
+        if (conn.getRequestProperty("User-Agent") == null) {
+            conn.addRequestProperty("User-Agent", userAgent());
+        }
+
         if (state.mContinuingDownload) {
             if (state.mHeaderETag != null) {
                 conn.addRequestProperty("If-Match", state.mHeaderETag);
index 6df61dc..a2b642d 100644 (file)
@@ -47,14 +47,15 @@ class StopRequestException extends Exception {
         return mFinalStatus;
     }
 
-    public static StopRequestException throwUnhandledHttpError(int responseCode)
+    public static StopRequestException throwUnhandledHttpError(int code, String message)
             throws StopRequestException {
-        if (responseCode >= 400 && responseCode < 600) {
-            throw new StopRequestException(responseCode, "Unhandled HTTP response");
-        } else if (responseCode >= 300 && responseCode < 400) {
-            throw new StopRequestException(STATUS_UNHANDLED_REDIRECT, "Unhandled HTTP response");
+        final String error = "Unhandled HTTP response: " + code + " " + message;
+        if (code >= 400 && code < 600) {
+            throw new StopRequestException(code, error);
+        } else if (code >= 300 && code < 400) {
+            throw new StopRequestException(STATUS_UNHANDLED_REDIRECT, error);
         } else {
-            throw new StopRequestException(STATUS_UNHANDLED_HTTP_CODE, "Unhandled HTTP response");
+            throw new StopRequestException(STATUS_UNHANDLED_HTTP_CODE, error);
         }
     }
 }