88 std::string responseBody;
89 std::unordered_map<std::string,std::string> respHeaders;
90 std::chrono::steady_clock::time_point startTime;
91 curl_slist* headerList{
nullptr};
94 CURLM* multi_{
nullptr};
95 std::atomic<bool> running_{
true};
98 mutable std::mutex mtx_;
99 std::condition_variable cv_;
101 std::vector<RequestCtx> newQueue_;
102 std::unordered_map<RequestId, RequestCtx> active_;
103 std::unordered_map<CURL*, RequestId> easyToId_;
105 std::size_t maxConcurrent_{16};
109 void addNewRequestsLocked();
110 void performOnce(
int waitTimeoutMs);
111 void collectCompletions();
112 void finishRequest(RequestCtx& ctx, CURLcode result);
113 void cleanupEasy(RequestCtx& ctx);
114 void setupEasy(RequestCtx& ctx);
116 static size_t writeCallback(
char* ptr,
size_t size,
size_t nmemb,
void* userdata);
117 static size_t headerCallback(
char* buffer,
size_t size,
size_t nitems,
void* userdata);