36 ApiLifecycle(CURL* easy,
const curl::fuzzer::proto::ApiPlan& plan, std::string_view url);
39 ApiLifecycle(CURL* easy, curl::fuzzer::proto::ApiPlan&& plan, std::string_view url) =
delete;
40 ApiLifecycle(CURL* easy,
const curl::fuzzer::proto::ApiPlan&& plan, std::string_view url) =
delete;
70 struct ShareCallbackState {
71 std::uint64_t locks = 0;
72 std::uint64_t unlocks = 0;
76 struct ResponseCallbackState {
78 bool pause_once =
false;
79 bool pause_returned =
false;
80 std::size_t bytes_received = 0;
81 bool probes_done =
false;
82 std::size_t probes_run = 0;
83 std::size_t recursive_rejections = 0;
86 static std::size_t ResponseWrite(
char* contents, std::size_t size, std::size_t nmemb,
void* user_data);
88 void ConfigureShare();
90 static void ShareLock(CURL* easy, curl_lock_data data, curl_lock_access access,
void* user_data);
92 static void ShareUnlock(CURL* easy, curl_lock_data data,
void* user_data);
96 void ProbeUrlAndEscaping(std::string_view url);
98 void RunReentrantProbes();
101 const curl::fuzzer::proto::ApiPlan& plan_;
102 ResponseCallbackState response_callback_state_;
104 ShareCallbackState share_callback_state_;
105 CURLM* active_multi_;
106 bool guessed_scheme_url_;
107 bool version_info_probed_;
108 bool https_proxy_feature_present_;