Duckstation/src/util/http_downloader_curl.h

37 lines
888 B
C
Raw Normal View History

2023-11-06 09:59:02 +00:00
// SPDX-FileCopyrightText: 2019-2023 Connor McLaughlin <stenzek@gmail.com>
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
2021-02-28 09:01:16 +00:00
#pragma once
#include "http_downloader.h"
2023-11-06 09:59:02 +00:00
2021-02-28 09:01:16 +00:00
#include <atomic>
2023-11-06 09:59:02 +00:00
#include <curl/curl.h>
2021-02-28 09:01:16 +00:00
#include <memory>
#include <mutex>
class HTTPDownloaderCurl final : public HTTPDownloader
{
public:
HTTPDownloaderCurl();
~HTTPDownloaderCurl() override;
bool Initialize(std::string user_agent);
2021-02-28 09:01:16 +00:00
protected:
Request* InternalCreateRequest() override;
void InternalPollRequests() override;
bool StartRequest(HTTPDownloader::Request* request) override;
void CloseRequest(HTTPDownloader::Request* request) override;
private:
struct Request : HTTPDownloader::Request
{
CURL* handle = nullptr;
};
static size_t WriteCallback(char* ptr, size_t size, size_t nmemb, void* userdata);
CURLM* m_multi_handle = nullptr;
std::string m_user_agent;
2021-02-28 09:01:16 +00:00
};