fix CurlRequests::update

This commit is contained in:
MihailRis 2026-09-13 19:41:26 +03:00
parent 432687c6ab
commit bb11a198f5
2 changed files with 41 additions and 17 deletions

View file

@ -8,4 +8,4 @@ end, function (code)
response_received = true response_received = true
end) end)
app.sleep_until(function () return response_received end, nil, 10) app.sleep_until(function () return response_received end, nil, 5)

View file

@ -114,26 +114,49 @@ public:
} else { } else {
curl_easy_setopt(curl, CURLOPT_MAXFILESIZE, request.maxSize); curl_easy_setopt(curl, CURLOPT_MAXFILESIZE, request.maxSize);
} }
curl_multi_add_handle(multiHandle, curl); {
int running; CURLMcode res = curl_multi_add_handle(multiHandle, curl);
CURLMcode res = curl_multi_perform(multiHandle, &running); if (res != CURLM_OK) {
if (res != CURLM_OK) { auto message = curl_multi_strerror(res);
auto message = curl_multi_strerror(res); logger.error() << message << " (" << request.url << ")";
logger.error() << message << " (" << request.url << ")"; if (request.onResponse) {
if (request.onResponse) { request.onResponse({0, {}, {}});
request.onResponse({0, {}, {}}); }
return;
}
}
{
int running;
CURLMcode res = curl_multi_perform(multiHandle, &running);
if (res != CURLM_OK) {
auto message = curl_multi_strerror(res);
logger.error() << message << " (" << request.url << ")";
if (request.onResponse) {
request.onResponse({0, {}, {}});
}
return;
} }
return;
} }
entry->request = std::move(request); entry->request = std::move(request);
requests.push_back(std::move(entry)); requests.push_back(std::move(entry));
} }
void update() override { void update() override {
if (CURLMcode res = curl_multi_poll(
multiHandle,
nullptr,
0,
1000,
nullptr
)) {
auto message = curl_multi_strerror(res);
logger.error() << message;
return;
}
int messagesLeft; int messagesLeft;
int running; int running;
CURLMcode res = curl_multi_perform(multiHandle, &running); if (CURLMcode res = curl_multi_perform(multiHandle, &running)) {
if (res != CURLM_OK) {
auto message = curl_multi_strerror(res); auto message = curl_multi_strerror(res);
logger.error() << message; logger.error() << message;
return; return;
@ -155,6 +178,7 @@ public:
return; return;
} }
auto entry = std::move(*found); auto entry = std::move(*found);
auto& req = entry->request;
requests.erase(found); requests.erase(found);
int response = -1; int response = -1;
@ -163,9 +187,9 @@ public:
auto headers = std::move(entry->headers); auto headers = std::move(entry->headers);
if (response == 0) { if (response == 0) {
auto message = std::string(curl_easy_strerror(result)); auto message = std::string(curl_easy_strerror(result));
logger.error() << message << " (" << entry->request.url << ")"; logger.error() << message << " (" << req.url << ")";
if (entry->request.onResponse) { if (req.onResponse) {
entry->request.onResponse( req.onResponse(
{response, {response,
std::move(headers), std::move(headers),
std::vector<char>( std::vector<char>(
@ -182,8 +206,8 @@ public:
totalDownload += size; totalDownload += size;
} }
totalDownload += entry->buffer.size(); totalDownload += entry->buffer.size();
if (entry->request.onResponse) { if (req.onResponse) {
entry->request.onResponse({ req.onResponse({
response, response,
std::move(headers), std::move(headers),
std::move(entry->buffer), std::move(entry->buffer),