1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-12-17 14:11:13 +01:00

Adds lib-network-manager

This commit is contained in:
Dmitry Vedenko
2021-05-25 16:07:23 +03:00
parent 52a835bd61
commit 77cc7bed6f
22 changed files with 2249 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
/*!********************************************************************
Audacity: A Digital Audio Editor
@file CurlResponse.h
@brief Declare an implementation of IResponse using libcurl.
Dmitry Vedenko
**********************************************************************/
#pragma once
#include <deque>
#include <mutex>
#include <cstdint>
#include "../IResponse.h"
#include "../HeadersList.h"
#include "../CookiesList.h"
#include "../Request.h"
#include "CurlHandleManager.h"
namespace audacity
{
namespace network_manager
{
class CurlResponse final : public IResponse
{
public:
CurlResponse (RequestVerb verb, const Request& request, CurlHandleManager* handleManager) noexcept;
bool isFinished () const noexcept override;
unsigned getHTTPCode () const noexcept override;
NetworkError getError () const noexcept override;
std::string getErrorString () const override;
bool headersReceived () const noexcept override;
bool hasHeader (const std::string& headerName) const noexcept override;
std::string getHeader (const std::string& headerName) const override;
const HeadersList& getHeaders () const noexcept override;
const CookiesList& getCookies () const noexcept override;
const Request& getRequest () const noexcept override;
std::string getURL () const override;
void abort () noexcept override;
void setOnDataReceivedCallback (RequestCallback callback) override;
void setRequestFinishedCallback (RequestCallback callback) override;
uint64_t getBytesAvailable () const noexcept override;
uint64_t readData (void* buffer, uint64_t maxBytesCount) override;
void perform (const void* ptr, size_t size);
private:
RequestVerb mVerb;
Request mRequest;
CurlHandleManager* mHandleManager;
CurlHandleManager::Handle* mCurrentHandle { nullptr };
mutable std::mutex mCallbackMutex;
RequestCallback mOnDataReceivedCallback;
RequestCallback mRequestFinishedCallback;
mutable std::mutex mHeadersMutex;
HeadersList mResponseHeaders;
CookiesList mResponseCookies;
mutable std::mutex mDataBufferMutex;
std::deque<uint8_t> mDataBuffer;
mutable std::mutex mStatusMutex;
NetworkError mNetworkError { NetworkError::NoError };
std::string mErrorString;
unsigned mHttpCode { 0 };
bool mHeadersReceived { false };
bool mRequestFinished { false };
bool mAbortRequested { false };
static size_t WriteCallback (const uint8_t* ptr, size_t size, size_t nmemb, CurlResponse* userdata) noexcept;
static size_t HeaderCallback (const char* buffer, size_t size, size_t nitems, CurlResponse* userdata) noexcept;
};
}
}