1f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko// Copyright 2014 The Chromium OS Authors. All rights reserved. 2f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko// Use of this source code is governed by a BSD-style license that can be 3f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko// found in the LICENSE file. 4f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 5fed60b0c640828b320f56293c8bebc43fd2b1da8Alex Vakulenko#ifndef LIBBRILLO_BRILLO_HTTP_CURL_API_H_ 6fed60b0c640828b320f56293c8bebc43fd2b1da8Alex Vakulenko#define LIBBRILLO_BRILLO_HTTP_CURL_API_H_ 7f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 8f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko#include <curl/curl.h> 9f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 10f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko#include <string> 11f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 12f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko#include <base/macros.h> 139ed0cab99f18acb3570a35e9408f24355f6b8324Alex Vakulenko#include <brillo/brillo_export.h> 14f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 159ed0cab99f18acb3570a35e9408f24355f6b8324Alex Vakulenkonamespace brillo { 16f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenkonamespace http { 17f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 18f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko// Abstract wrapper around libcurl C API that allows us to mock it out in tests. 19f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenkoclass CurlInterface { 20f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko public: 21f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CurlInterface() = default; 22f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko virtual ~CurlInterface() = default; 23f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 24f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko // Wrapper around curl_easy_init(). 25f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko virtual CURL* EasyInit() = 0; 26f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 27f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko // Wrapper around curl_easy_cleanup(). 28f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko virtual void EasyCleanup(CURL* curl) = 0; 29f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 30f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko // Wrappers around curl_easy_setopt(). 31f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko virtual CURLcode EasySetOptInt(CURL* curl, CURLoption option, int value) = 0; 32f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko virtual CURLcode EasySetOptStr(CURL* curl, 33f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLoption option, 34f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko const std::string& value) = 0; 35f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko virtual CURLcode EasySetOptPtr(CURL* curl, 36f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLoption option, 37f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko void* value) = 0; 38f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko virtual CURLcode EasySetOptCallback(CURL* curl, 39f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLoption option, 40f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko intptr_t address) = 0; 41f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko virtual CURLcode EasySetOptOffT(CURL* curl, 42f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLoption option, 43f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko curl_off_t value) = 0; 44f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 45f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko // A type-safe wrapper around function callback options. 46f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko template<typename R, typename... Args> 47f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko inline CURLcode EasySetOptCallback(CURL* curl, 48f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLoption option, 49f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko R(*callback)(Args...)) { 5005d29044d14a60775ed6c51c75a414eb0cb50347Alex Vakulenko return EasySetOptCallback( 5105d29044d14a60775ed6c51c75a414eb0cb50347Alex Vakulenko curl, option, reinterpret_cast<intptr_t>(callback)); 52f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko } 53f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 54f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko // Wrapper around curl_easy_perform(). 55f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko virtual CURLcode EasyPerform(CURL* curl) = 0; 56f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 57f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko // Wrappers around curl_easy_getinfo(). 58f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko virtual CURLcode EasyGetInfoInt(CURL* curl, 59f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLINFO info, 60f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko int* value) const = 0; 61f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko virtual CURLcode EasyGetInfoDbl(CURL* curl, 62f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLINFO info, 63f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko double* value) const = 0; 64f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko virtual CURLcode EasyGetInfoStr(CURL* curl, 65f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLINFO info, 66f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko std::string* value) const = 0; 67aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko virtual CURLcode EasyGetInfoPtr(CURL* curl, 68aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLINFO info, 69aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko void** value) const = 0; 70f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 71f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko // Wrapper around curl_easy_strerror(). 72f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko virtual std::string EasyStrError(CURLcode code) const = 0; 73f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 74aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_init(). 75aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko virtual CURLM* MultiInit() = 0; 76aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 77aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_cleanup(). 78aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko virtual CURLMcode MultiCleanup(CURLM* multi_handle) = 0; 79aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 80aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_info_read(). 81aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko virtual CURLMsg* MultiInfoRead(CURLM* multi_handle, int* msgs_in_queue) = 0; 82aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 83aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_add_handle(). 84aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko virtual CURLMcode MultiAddHandle(CURLM* multi_handle, CURL* curl_handle) = 0; 85aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 86aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_remove_handle(). 87aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko virtual CURLMcode MultiRemoveHandle(CURLM* multi_handle, 88aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURL* curl_handle) = 0; 89aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 90aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_setopt(CURLMOPT_SOCKETFUNCTION/SOCKETDATA). 91aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko virtual CURLMcode MultiSetSocketCallback( 92aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLM* multi_handle, 93aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko curl_socket_callback socket_callback, 94aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko void* userp) = 0; 95aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 96aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_setopt(CURLMOPT_TIMERFUNCTION/TIMERDATA). 97aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko virtual CURLMcode MultiSetTimerCallback( 98aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLM* multi_handle, 99aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko curl_multi_timer_callback timer_callback, 100aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko void* userp) = 0; 101aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 102aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_assign(). 103aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko virtual CURLMcode MultiAssign(CURLM* multi_handle, 104aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko curl_socket_t sockfd, 105aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko void* sockp) = 0; 106aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 107aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_socket_action(). 108aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko virtual CURLMcode MultiSocketAction(CURLM* multi_handle, 109aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko curl_socket_t s, 110aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko int ev_bitmask, 111aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko int* running_handles) = 0; 112aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 113aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_strerror(). 114aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko virtual std::string MultiStrError(CURLMcode code) const = 0; 115aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 116ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish // Wrapper around curl_multi_perform(). 117ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish virtual CURLMcode MultiPerform(CURLM* multi_handle, 118ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish int* running_handles) = 0; 119ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish 120ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish // Wrapper around curl_multi_wait(). 121ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish virtual CURLMcode MultiWait(CURLM* multi_handle, 122ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish curl_waitfd extra_fds[], 123ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish unsigned int extra_nfds, 124ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish int timeout_ms, 125ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish int* numfds) = 0; 126ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish 127f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko private: 128f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko DISALLOW_COPY_AND_ASSIGN(CurlInterface); 129f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko}; 130f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 1319ed0cab99f18acb3570a35e9408f24355f6b8324Alex Vakulenkoclass BRILLO_EXPORT CurlApi : public CurlInterface { 132f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko public: 133f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CurlApi(); 134f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko ~CurlApi() override; 135f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 136f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko // Wrapper around curl_easy_init(). 137f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURL* EasyInit() override; 138f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 139f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko // Wrapper around curl_easy_cleanup(). 140f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko void EasyCleanup(CURL* curl) override; 141f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 142f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko // Wrappers around curl_easy_setopt(). 143f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLcode EasySetOptInt(CURL* curl, CURLoption option, int value) override; 144f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLcode EasySetOptStr(CURL* curl, 145f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLoption option, 146f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko const std::string& value) override; 147f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLcode EasySetOptPtr(CURL* curl, CURLoption option, void* value) override; 148f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLcode EasySetOptCallback(CURL* curl, 149f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLoption option, 150f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko intptr_t address) override; 151f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLcode EasySetOptOffT(CURL* curl, 152f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLoption option, 153f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko curl_off_t value) override; 154f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 155f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko // Wrapper around curl_easy_perform(). 156f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLcode EasyPerform(CURL* curl) override; 157f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 158f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko // Wrappers around curl_easy_getinfo(). 15905d29044d14a60775ed6c51c75a414eb0cb50347Alex Vakulenko CURLcode EasyGetInfoInt(CURL* curl, CURLINFO info, int* value) const override; 160f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLcode EasyGetInfoDbl(CURL* curl, 161f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLINFO info, 162f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko double* value) const override; 163f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLcode EasyGetInfoStr(CURL* curl, 164f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko CURLINFO info, 165f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko std::string* value) const override; 166aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLcode EasyGetInfoPtr(CURL* curl, 167aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLINFO info, 168aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko void** value) const override; 169f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 170f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko // Wrapper around curl_easy_strerror(). 171f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko std::string EasyStrError(CURLcode code) const override; 172f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 173aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_init(). 174aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLM* MultiInit() override; 175aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 176aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_cleanup(). 177aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLMcode MultiCleanup(CURLM* multi_handle) override; 178aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 179aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_info_read(). 180aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLMsg* MultiInfoRead(CURLM* multi_handle, int* msgs_in_queue) override; 181aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 182aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_add_handle(). 183aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLMcode MultiAddHandle(CURLM* multi_handle, CURL* curl_handle) override; 184aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 185aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_remove_handle(). 186aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLMcode MultiRemoveHandle(CURLM* multi_handle, CURL* curl_handle) override; 187aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 188aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_setopt(CURLMOPT_SOCKETFUNCTION/SOCKETDATA). 189aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLMcode MultiSetSocketCallback( 190aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLM* multi_handle, 191aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko curl_socket_callback socket_callback, 192aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko void* userp) override; 193aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 194aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_setopt(CURLMOPT_TIMERFUNCTION/TIMERDATA). 195aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLMcode MultiSetTimerCallback( 196aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLM* multi_handle, 197aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko curl_multi_timer_callback timer_callback, 198aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko void* userp) override; 199aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 200aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_assign(). 201aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLMcode MultiAssign(CURLM* multi_handle, 202aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko curl_socket_t sockfd, 203aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko void* sockp) override; 204aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 205aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_socket_action(). 206aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko CURLMcode MultiSocketAction(CURLM* multi_handle, 207aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko curl_socket_t s, 208aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko int ev_bitmask, 209aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko int* running_handles) override; 210aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 211aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko // Wrapper around curl_multi_strerror(). 212aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko std::string MultiStrError(CURLMcode code) const override; 213aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko 214ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish // Wrapper around curl_multi_perform(). 215ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish CURLMcode MultiPerform(CURLM* multi_handle, 216ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish int* running_handles) override; 217ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish 218ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish // Wrapper around curl_multi_wait(). 219ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish CURLMcode MultiWait(CURLM* multi_handle, 220ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish curl_waitfd extra_fds[], 221ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish unsigned int extra_nfds, 222ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish int timeout_ms, 223ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish int* numfds) override; 224ed104e9c878bb5e1441a4a10eb00825270f8bd2eDan Colish 225f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko private: 226f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko DISALLOW_COPY_AND_ASSIGN(CurlApi); 227f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko}; 228f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 229f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko} // namespace http 2309ed0cab99f18acb3570a35e9408f24355f6b8324Alex Vakulenko} // namespace brillo 231f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko 232fed60b0c640828b320f56293c8bebc43fd2b1da8Alex Vakulenko#endif // LIBBRILLO_BRILLO_HTTP_CURL_API_H_ 233