61 lines
1.0 KiB
C++
61 lines
1.0 KiB
C++
|
|
#include "./request.hpp"
|
|
|
|
#include <mutex>
|
|
|
|
#include "./curl_wrappers.hpp"
|
|
|
|
namespace mijin
|
|
{
|
|
namespace
|
|
{
|
|
bool gCurlInited = false;
|
|
std::mutex gCurlInitMutex;
|
|
|
|
class CURLGuard
|
|
{
|
|
public:
|
|
~CURLGuard() MIJIN_NOEXCEPT
|
|
{
|
|
if (gCurlInited)
|
|
{
|
|
curl_global_cleanup();
|
|
}
|
|
}
|
|
} gCURLGuard [[maybe_unused]];
|
|
|
|
bool initCURL() MIJIN_NOEXCEPT
|
|
{
|
|
if (gCurlInited)
|
|
{
|
|
return true;
|
|
}
|
|
const std::unique_lock initLock(gCurlInitMutex);
|
|
if (gCurlInited)
|
|
{
|
|
return true;
|
|
}
|
|
gCurlInited = (curl_global_init(0) == CURLE_OK);
|
|
return gCurlInited;
|
|
}
|
|
}
|
|
|
|
Task<StreamResult<HTTPResponse>> c_request(const URL& url, HTTPRequest request) MIJIN_NOEXCEPT
|
|
{
|
|
(void) url;
|
|
(void) request;
|
|
if (!initCURL())
|
|
{
|
|
co_return StreamError::UNKNOWN_ERROR;
|
|
}
|
|
curl::CurlEasy easy;
|
|
if (!easy.init())
|
|
{
|
|
co_return StreamError::UNKNOWN_ERROR;
|
|
}
|
|
easy.setURL(url);
|
|
|
|
co_return StreamError::UNKNOWN_ERROR;
|
|
}
|
|
} // namespace mijin
|