| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROMECAST_CRASH_LIBCURL_WRAPPER_H_ |
| #define CHROMECAST_CRASH_LIBCURL_WRAPPER_H_ |
| |
| #include <map> |
| #include <string> |
| |
| #include "third_party/breakpad/breakpad/src/third_party/curl/curl.h" |
| |
| namespace chromecast { |
| class LibcurlWrapper { |
| public: |
| LibcurlWrapper(); |
| virtual ~LibcurlWrapper(); |
| virtual bool Init(); |
| virtual bool AddFile(const std::string& upload_file_path, |
| const std::string& basename); |
| virtual bool SendRequest(const std::string& url, |
| const std::map<std::string, std::string>& parameters, |
| long* http_status_code, |
| std::string* http_header_data, |
| std::string* http_response_data); |
| |
| private: |
| // This function initializes class state corresponding to function |
| // pointers into the CURL library. |
| bool SetFunctionPointers(); |
| |
| bool SendRequestInner(const std::string& url, |
| long* http_status_code, |
| std::string* http_header_data, |
| std::string* http_response_data); |
| |
| void Reset(); |
| |
| bool CheckInit(); |
| |
| bool init_ok_; // Whether init succeeded |
| void* curl_lib_; // Pointer to result of dlopen() on |
| // curl library |
| std::string last_curl_error_; // The text of the last error when |
| // dealing |
| // with CURL. |
| |
| CURL* curl_; // Pointer for handle for CURL calls. |
| |
| CURL* (*easy_init_)(void); |
| |
| // Stateful pointers for calling into curl_formadd() |
| struct curl_httppost* formpost_; |
| struct curl_httppost* lastptr_; |
| struct curl_slist* headerlist_; |
| |
| // Function pointers into CURL library |
| CURLcode (*easy_setopt_)(CURL*, CURLoption, ...); |
| CURLFORMcode (*formadd_)(struct curl_httppost**, struct curl_httppost**, ...); |
| struct curl_slist* (*slist_append_)(struct curl_slist*, const char*); |
| void (*slist_free_all_)(struct curl_slist*); |
| CURLcode (*easy_perform_)(CURL*); |
| const char* (*easy_strerror_)(CURLcode); |
| void (*easy_cleanup_)(CURL*); |
| CURLcode (*easy_getinfo_)(CURL*, CURLINFO info, ...); |
| void (*easy_reset_)(CURL*); |
| void (*formfree_)(struct curl_httppost*); |
| }; |
| } // namespace chromecast |
| |
| #endif // CHROMECAST_CRASH_LIBCURL_WRAPPER_H_ |