mijin2/source/mijin/net/request.cpp

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