]> git.saurik.com Git - apt.git/commitdiff
set failreasons similar to connect.cc based on curl errors
authorDavid Kalnischkies <david@kalnischkies.de>
Mon, 12 Oct 2015 20:26:36 +0000 (22:26 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Wed, 4 Nov 2015 17:04:01 +0000 (18:04 +0100)
Detecting network errors has some benefits in the acquire system as if
we can't connect to a host trying it for a million files is pointless.
http and co which use connect.cc deal with this, but https which uses
curl had connection failures as "normal" errors which could potentially
be worked around (like trying Release instead of the failed InRelease).

Git-Dch: Ignore

methods/https.cc

index 432a643031f160327be7dfd22cb6f265020c3858..a159159105c8882136afe8d95e48b25dd2727e5a 100644 (file)
@@ -419,10 +419,25 @@ bool HttpsMethod::Fetch(FetchItem *Itm)
    curl_slist_free_all(headers);
 
    // cleanup
-   if (success != 0)
+   if (success != CURLE_OK)
    {
-      _error->Error("%s", curl_errorstr);
-      return false;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wswitch"
+      switch (success)
+      {
+        case CURLE_COULDNT_RESOLVE_PROXY:
+        case CURLE_COULDNT_RESOLVE_HOST:
+           SetFailReason("ResolveFailure");
+           break;
+        case CURLE_COULDNT_CONNECT:
+           SetFailReason("ConnectionRefused");
+           break;
+        case CURLE_OPERATION_TIMEDOUT:
+           SetFailReason("Timeout");
+           break;
+      }
+#pragma GCC diagnostic pop
+      return _error->Error("%s", curl_errorstr);
    }
 
    // server says file not modified