7 #ifndef KVIKIO_LIBCURL_FOUND 
    9   "cannot include the remote IO API, please build KvikIO with libcurl (-DKvikIO_REMOTE_SUPPORT=ON)" 
   19 #include <curl/curl.h> 
   21 #include <kvikio/error.hpp> 
   45   using UniqueHandlePtr = std::unique_ptr<CURL, std::function<decltype(curl_easy_cleanup)>>;
 
   50   std::vector<UniqueHandlePtr> _free_curl_handles{};
 
   82   char _errbuf[CURL_ERROR_SIZE];
 
   83   LibCurl::UniqueHandlePtr _handle;
 
   95   CurlHandle(LibCurl::UniqueHandlePtr 
handle, std::string source_file, std::string source_line);
 
  119   template <typename VAL>
 
  120   void setopt(CURLoption option, VAL value)
 
  122     CURLcode err = curl_easy_setopt(
handle(), option, value);
 
  123     if (err != CURLE_OK) {
 
  124       std::stringstream ss;
 
  125       ss << 
"curl_easy_setopt() error " 
  126          << 
"(" << curl_easy_strerror(err) << 
")";
 
  146   template <
typename OUTPUT>
 
  149     CURLcode err = curl_easy_getinfo(
handle(), info, output);
 
  150     if (err != CURLE_OK) {
 
  151       std::stringstream ss;
 
  152       ss << 
"curl_easy_getinfo() error " 
  153          << 
"(" << curl_easy_strerror(err) << 
")";
 
  174 __attribute__((noinline)) 
inline std::string fix_conda_file_path_hack(std::string filename)
 
  176   if (filename.data() != 
nullptr) { 
return std::string{filename.data()}; }
 
  177   return std::string{};
 
  186 #define create_curl_handle()                                             \ 
  187   kvikio::CurlHandle(kvikio::LibCurl::instance().get_handle(),           \ 
  188                      kvikio::detail::fix_conda_file_path_hack(__FILE__), \ 
  189                      KVIKIO_STRINGIFY(__LINE__)) 
Representation of a curl easy handle pointer and its operations.
 
void setopt(CURLoption option, VAL value)
Set option for the curl handle.
 
CurlHandle(LibCurl::UniqueHandlePtr handle, std::string source_file, std::string source_line)
Construct a new curl handle.
 
void getinfo(CURLINFO info, OUTPUT *output)
Extract information from a curl handle.
 
void perform()
Perform a blocking network transfer using previously set options.
 
CURL * handle() noexcept
Get the underlying curl easy handle pointer.
 
Singleton class to initialize and cleanup the global state of libcurl.
 
UniqueHandlePtr get_free_handle()
Returns a free curl handle if available.
 
void retain_handle(UniqueHandlePtr handle)
Retain a curl handle for later use.
 
UniqueHandlePtr get_handle()
Returns a curl handle, create a new handle if none is available.
 
#define KVIKIO_FAIL(...)
Indicates that an erroneous code path has been taken.