diff --git a/src/frontend-common/http_downloader_curl.cpp b/src/frontend-common/http_downloader_curl.cpp index 7178bff95..ac36fb17b 100644 --- a/src/frontend-common/http_downloader_curl.cpp +++ b/src/frontend-common/http_downloader_curl.cpp @@ -48,144 +48,6 @@ bool HTTPDownloaderCurl::Initialize() m_thread_pool = std::make_unique(m_max_active_requests); return true; } -/* -void CALLBACK HTTPDownloaderCurl::HTTPStatusCallback(HINTERNET hRequest, DWORD_PTR dwContext, DWORD dwInternetStatus, - LPVOID lpvStatusInformation, DWORD dwStatusInformationLength) -{ - Request* req = reinterpret_cast(dwContext); - switch (dwInternetStatus) - { - case WINHTTP_CALLBACK_STATUS_HANDLE_CREATED: - return; - - case WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING: - { - if (!req) - return; - - DebugAssert(hRequest == req->hRequest); - - HTTPDownloaderCurl* parent = static_cast(req->parent); - std::unique_lock lock(parent->m_pending_http_request_lock); - Assert(std::none_of(parent->m_pending_http_requests.begin(), parent->m_pending_http_requests.end(), - [req](HTTPDownloader::Request* it) { return it == req; })); - - // we can clean up the connection as well - DebugAssert(req->hConnection != NULL); - WinHttpCloseHandle(req->hConnection); - delete req; - return; - } - - case WINHTTP_CALLBACK_STATUS_REQUEST_ERROR: - { - const WINHTTP_ASYNC_RESULT* res = reinterpret_cast(lpvStatusInformation); - Log_ErrorPrintf("WinHttp async function %p returned error %u", res->dwResult, res->dwError); - req->status_code = -1; - req->state.store(Request::State::Complete); - return; - } - case WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE: - { - Log_DevPrintf("SendRequest complete"); - if (!WinHttpReceiveResponse(hRequest, nullptr)) - { - Log_ErrorPrintf("WinHttpReceiveResponse() failed: %u", GetLastError()); - req->status_code = -1; - req->state.store(Request::State::Complete); - } - - return; - } - case WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE: - { - Log_DevPrintf("Headers available"); - - DWORD buffer_size = sizeof(req->status_code); - if (!WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, - WINHTTP_HEADER_NAME_BY_INDEX, &req->status_code, &buffer_size, WINHTTP_NO_HEADER_INDEX)) - { - Log_ErrorPrintf("WinHttpQueryHeaders() for status code failed: %u", GetLastError()); - req->status_code = -1; - req->state.store(Request::State::Complete); - return; - } - - buffer_size = sizeof(req->content_length); - if (!WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_CONTENT_LENGTH | WINHTTP_QUERY_FLAG_NUMBER, - WINHTTP_HEADER_NAME_BY_INDEX, &req->content_length, &buffer_size, - WINHTTP_NO_HEADER_INDEX)) - { - if (GetLastError() != ERROR_WINHTTP_HEADER_NOT_FOUND) - Log_WarningPrintf("WinHttpQueryHeaders() for content length failed: %u", GetLastError()); - - req->content_length = 0; - } - - Log_DevPrintf("Status code %d, content-length is %u", req->status_code, req->content_length); - req->data.reserve(req->content_length); - req->state = Request::State::Receiving; - - // start reading - if (!WinHttpQueryDataAvailable(hRequest, nullptr) && GetLastError() != ERROR_IO_PENDING) - { - Log_ErrorPrintf("WinHttpQueryDataAvailable() failed: %u", GetLastError()); - req->status_code = -1; - req->state.store(Request::State::Complete); - } - - return; - } - case WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE: - { - DWORD bytes_available; - std::memcpy(&bytes_available, lpvStatusInformation, sizeof(bytes_available)); - if (bytes_available == 0) - { - // end of request - Log_DevPrintf("End of request '%s', %zu bytes received", req->url.c_str(), req->data.size()); - req->state.store(Request::State::Complete); - return; - } - - // start the transfer - Log_DevPrintf("%u bytes available", bytes_available); - req->io_position = static_cast(req->data.size()); - req->data.resize(req->io_position + bytes_available); - if (!WinHttpReadData(hRequest, req->data.data() + req->io_position, bytes_available, nullptr) && - GetLastError() != ERROR_IO_PENDING) - { - Log_ErrorPrintf("WinHttpReadData() failed: %u", GetLastError()); - req->status_code = -1; - req->state.store(Request::State::Complete); - } - - return; - } - case WINHTTP_CALLBACK_STATUS_READ_COMPLETE: - { - Log_DevPrintf("Read of %u complete", dwStatusInformationLength); - - const u32 new_size = req->io_position + dwStatusInformationLength; - Assert(new_size <= req->data.size()); - req->data.resize(new_size); - req->start_time = Common::Timer::GetValue(); - - if (!WinHttpQueryDataAvailable(hRequest, nullptr) && GetLastError() != ERROR_IO_PENDING) - { - Log_ErrorPrintf("WinHttpQueryDataAvailable() failed: %u", GetLastError()); - req->status_code = -1; - req->state.store(Request::State::Complete); - } - - return; - } - default: - // unhandled, ignore - return; - } -} -*/ size_t HTTPDownloaderCurl::WriteCallback(char* ptr, size_t size, size_t nmemb, void* userdata) { @@ -253,7 +115,7 @@ bool HTTPDownloaderCurl::StartRequest(HTTPDownloader::Request* request) { Request* req = static_cast(request); curl_easy_setopt(req->handle, CURLOPT_URL, request->url.c_str()); - // curl_easy_setopt(req->handle, CURLOPT_USERAGENT, m_user_agent.c_str()); + curl_easy_setopt(req->handle, CURLOPT_USERAGENT, m_user_agent.c_str()); curl_easy_setopt(req->handle, CURLOPT_WRITEFUNCTION, &HTTPDownloaderCurl::WriteCallback); curl_easy_setopt(req->handle, CURLOPT_WRITEDATA, req);