소스 검색

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
David Kalnischkies 11 년 전
부모
커밋
bce8e59b81
1개의 변경된 파일과 18개의 추가작업 그리고 3개의 파일을 삭제
  1. 18 3
      methods/https.cc

+ 18 - 3
methods/https.cc

@@ -419,10 +419,25 @@ bool HttpsMethod::Fetch(FetchItem *Itm)
    curl_slist_free_all(headers);
    curl_slist_free_all(headers);
 
 
    // cleanup
    // 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
    // server says file not modified