curl-cpp
static c++17 wrapper for curl with -fno-exceptions support
curl_err_handling.cc
1 #include "curl_easy.hpp"
2 #include "curl_multi.hpp"
3 
4 #include <curl/curl.h>
5 
6 #include <cstdio>
7 #include <cassert>
8 
9 namespace curl {
10 /* For Easy_t */
11 Easy_ref_t::Exception::Exception(long err_code_arg):
12  curl::Exception{""},
13  error_code{err_code_arg}
14 {}
15 auto Easy_ref_t::Exception::what() const noexcept -> const char*
16 {
17  return curl_easy_strerror(static_cast<CURLcode>(error_code));
18 }
19 
20 auto Easy_ref_t::check_perform(long code, const char *fname) noexcept -> perform_ret_t
21 {
22  switch (code) {
23  case CURLE_OK:
24  return {code::ok};
25 
26  case CURLE_URL_MALFORMAT:
27  return {code::url_malformat};
28 
29  case CURLE_UNSUPPORTED_PROTOCOL:
30  return {code::unsupported_protocol};
31 
32  case CURLE_NOT_BUILT_IN:
33  return {NotBuiltIn_error{code}};
34 
35  case CURLE_COULDNT_RESOLVE_PROXY:
36  return {code::cannot_resolve_proxy};
37 
38  case CURLE_COULDNT_RESOLVE_HOST:
39  case CURLE_FTP_CANT_GET_HOST:
40  return {code::cannot_resolve_host};
41 
42  case CURLE_COULDNT_CONNECT:
43  return {code::cannot_connect};
44 
45  case CURLE_REMOTE_ACCESS_DENIED:
46  return {code::remote_access_denied};
47 
48  case CURLE_WRITE_ERROR:
49  return {code::writeback_error};
50 
51  case CURLE_UPLOAD_FAILED:
52  return {code::upload_failure};
53 
54  case CURLE_ABORTED_BY_CALLBACK:
55  return {code::aborted_by_callback};
56 
57  case CURLE_OUT_OF_MEMORY:
58  return {std::bad_alloc{}};
59 
60  case CURLE_OPERATION_TIMEDOUT:
61  return {code::timedout};
62 
63  case CURLE_BAD_FUNCTION_ARGUMENT:
64  return std::invalid_argument{"A function was called with a bad parameter."};
65 
66  case CURLE_TOO_MANY_REDIRECTS:
67  return {code::too_many_redirects};
68 
69  case CURLE_RECURSIVE_API_CALL:
70  return {Recursive_api_call_Exception{fname}};
71 
72  case CURLE_SSL_PINNEDPUBKEYNOTMATCH:
73  return {code::ssl_pinned_pubkey_mismatch};
74 
75  default:
76  return {Exception{code}};
77 
78  case CURLE_HTTP2:
79  case CURLE_SSL_CONNECT_ERROR:
80  case CURLE_UNKNOWN_OPTION:
81  case CURLE_HTTP3:
82  return {ProtocolInternal_error{code}};
83  }
84 }
85 /* End of Easy_t */
86 
87 /* For Multi_t */
88 Multi_t::Exception::Exception(long err_code_arg):
89  curl::Exception{""},
90  error_code{err_code_arg}
91 {}
92 auto Multi_t::Exception::what() const noexcept -> const char*
93 {
94  return curl_multi_strerror(static_cast<CURLMcode>(error_code));
95 }
96 /* End of Multi_t */
97 }
curl::Easy_ref_t::ProtocolInternal_error
Definition: curl_easy.hpp:94
curl::Exception
Definition: curl.hpp:16
curl::Easy_ref_t::NotBuiltIn_error
Definition: curl_easy.hpp:84
curl::Easy_ref_t
Definition: curl_easy.hpp:53
curl::Multi_t
Definition: curl_multi.hpp:29
curl::Easy_ref_t::Exception
Definition: curl_easy.hpp:65
curl::Easy_ref_t::code
code
Definition: curl_easy.hpp:551
curl::Multi_t::Exception
Definition: curl_multi.hpp:35
curl::Recursive_api_call_Exception
Definition: curl.hpp:40