diff options
author | David Kalnischkies <david@kalnischkies.de> | 2015-10-12 22:26:36 +0200 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2015-11-04 18:04:01 +0100 |
commit | bce8e59b81e5bdfa46501c25bc1b3fca60a69cb8 (patch) | |
tree | e62bea8a73b7b8b308b7a779317c43498e33e865 /methods/https.cc | |
parent | 88a9e3f832ffa9fd64a8c1a4c8a9e1b0509c06bf (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/https.cc')
-rw-r--r-- | methods/https.cc | 21 |
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 |