10 constexpr auto curl_t::
Version::from(std::uint8_t major, std::uint8_t minor, std::uint8_t patch)
noexcept ->
13 return {
static_cast<std::uint32_t>(major << 16) |
14 static_cast<std::uint32_t>(minor << 8) |
15 static_cast<std::uint32_t>(patch)};
18 static constexpr const auto mask = std::numeric_limits<std::uint8_t>::max();
19 constexpr std::uint8_t
curl_t::
Version::get_major()
const noexcept
21 return (num >> 16) & mask;
23 constexpr std::uint8_t
curl_t::
Version::get_minor()
const noexcept
25 return (num >> 8) & mask;
27 constexpr std::uint8_t
curl_t::
Version::get_patch()
const noexcept
38 return x.num <= y.num;
46 return x.num >= y.num;
50 return x.num == y.num;
54 return x.num != y.num;
59 return std::snprintf(buffer, 12,
"%" PRIu8
".%" PRIu8
".%" PRIu8, get_major(), get_minor(), get_patch());
62 static auto initialize_and_return_arg(FILE *stderr_stream_arg)
noexcept
64 auto code = curl_global_init(CURL_GLOBAL_ALL);
66 errx(1,
"curl_global_init(CURL_GLOBAL_ALL) failed with %s", curl_easy_strerror(code));
68 return stderr_stream_arg;
77 errx(1,
"CURLINFO_RESPONSE_CODE isn't supported in this version: %s, %" PRIu32,
81 static auto initialize_and_return_last_arg(
curl_t::malloc_callback_t malloc_callback,
82 curl_t::free_callback_t free_callback,
83 curl_t::realloc_callback_t realloc_callback,
84 curl_t::strdup_callback_t strdup_callback,
85 curl_t::calloc_callback_t calloc_callback,
86 FILE *stderr_stream_arg)
noexcept
88 auto code = curl_global_init_mem(CURL_GLOBAL_ALL,
95 errx(1,
"curl_global_init_mem(CURL_GLOBAL_ALL, %p, %p, %p, %p, %p) failed with %s",
101 curl_easy_strerror(code));
103 return stderr_stream_arg;
106 malloc_callback_t malloc_callback,
107 free_callback_t free_callback,
108 realloc_callback_t realloc_callback,
109 strdup_callback_t strdup_callback,
110 calloc_callback_t calloc_callback)
noexcept:
111 stderr_stream{initialize_and_return_last_arg(malloc_callback,
122 errx(1,
"CURLINFO_RESPONSE_CODE isn't supported in this version: %s, %" PRIu32,
126 bool curl_t::has_compression_support()
const noexcept
128 auto *info =
static_cast<
const curl_version_info_data*>(
version_info);
129 return info->features & CURL_VERSION_LIBZ;
131 bool curl_t::has_largefile_support()
const noexcept
133 auto *info =
static_cast<
const curl_version_info_data*>(
version_info);
134 return info->features & CURL_VERSION_LARGEFILE;
138 auto *info =
static_cast<
const curl_version_info_data*>(
version_info);
139 auto *protocols = info->protocols;
141 for (std::size_t i = 0; protocols[i]; ++i)
142 if (std::strcmp(protocols[i], protocol) == 0)
147 bool curl_t::has_ssl_support()
const noexcept
149 auto *info =
static_cast<
const curl_version_info_data*>(
version_info);
150 return info->features & CURL_VERSION_SSL;
152 bool curl_t::has_ipv6_support()
const noexcept
154 auto *info =
static_cast<
const curl_version_info_data*>(
version_info);
155 return info->features & CURL_VERSION_IPV6;
158 bool curl_t::has_erase_all_cookies_in_mem_support()
const noexcept
162 bool curl_t::has_erase_all_session_cookies_in_mem_support()
const noexcept
166 bool curl_t::has_flush_cookies_to_jar()
const noexcept
170 bool curl_t::has_reload_cookies_from_file()
const noexcept
175 bool curl_t::has_disable_signal_handling_support()
const noexcept
180 bool curl_t::has_private_ptr_support()
const noexcept
185 bool curl_t::has_readfunc_abort_support()
const noexcept
189 bool curl_t::has_pause_support()
const noexcept
194 bool curl_t::has_header_option_support()
const noexcept
198 bool curl_t::has_set_ip_addr_only_support()
const noexcept
203 bool curl_t::has_redirect_url_support()
const noexcept
208 bool curl_t::has_getinfo_cookie_list_support()
const noexcept
213 bool curl_t::has_buffer_size_tuning_support()
const noexcept
217 bool curl_t::has_buffer_size_growing_support()
const noexcept
222 bool curl_t::has_get_active_socket_support()
const noexcept
232 bool curl_t::has_multi_poll_support()
const noexcept
236 bool curl_t::has_multi_socket_support()
const noexcept
245 bool curl_t::has_max_concurrent_stream_support()
const noexcept
251 bool curl_t::has_ssl_session_sharing_support()
const noexcept
255 bool curl_t::has_connection_cache_sharing_support()
const noexcept
259 bool curl_t::has_psl_sharing_support()
const noexcept
261 auto *info =
static_cast<
const curl_version_info_data*>(
version_info);
262 return version >= Version::from(7, 61, 0) && info->features & CURL_VERSION_PSL;
267 curl_global_cleanup();