summaryrefslogtreecommitdiff
path: root/methods
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2015-10-12 22:26:36 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2015-11-04 18:04:01 +0100
commitbce8e59b81e5bdfa46501c25bc1b3fca60a69cb8 (patch)
treee62bea8a73b7b8b308b7a779317c43498e33e865 /methods
parent88a9e3f832ffa9fd64a8c1a4c8a9e1b0509c06bf (diff)
set failreasons similar to connect.cc based on curl errors
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
Diffstat (limited to 'methods')
-rw-r--r--methods/https.cc21
1 files changed, 18 insertions, 3 deletions
diff --git a/methods/https.cc b/methods/https.cc
index 432a64303..a15915910 100644
--- a/methods/https.cc
+++ b/methods/https.cc
@@ -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