1
0
This repository has been archived on 2025-07-27. You can view files and clone it, but cannot push or open issues or pull requests.
Files
siadrive/SiaDrive.Api/SiaCurl.cpp
Scott E. Graves 4ef968180d [Unit Test] SiaCurl::Get() - Basic get test
Added json parser
2017-02-02 21:51:33 -06:00

44 lines
1.3 KiB
C++

#include "stdafx.h"
#include "SiaCurl.h"
#include <curl\curl.h>
using namespace Sia::Api;
CSiaCurl::CSiaCurl() :
_curlHandle(curl_easy_init())
{
SetHostConfig({ "localhost", 9980 });
}
CSiaCurl::~CSiaCurl()
{
curl_easy_cleanup(_curlHandle);
}
CStringA CSiaCurl::ConstructPath(const CString& relativePath) const
{
const CStringA ret = CStringA("http://") + GetHostConfig().HostName.c_str() + ":" + std::to_string(GetHostConfig().HostPort).c_str() + CW2A(relativePath);
return ret;
}
SiaCurlError CSiaCurl::Get(const CString& path, json& response)
{
CStringA result;
SiaCurlError ret = SiaCurlError::Success;
curl_easy_setopt(_curlHandle, CURLOPT_USERAGENT, "Sia-Agent");
curl_easy_setopt(_curlHandle, CURLOPT_URL, static_cast<LPCSTR>(ConstructPath(path)));
curl_easy_setopt(_curlHandle, CURLOPT_WRITEFUNCTION, static_cast<size_t(*)(char*, size_t, size_t, void *)>([](char *buffer, size_t size, size_t nitems, void *outstream) -> size_t
{
(*reinterpret_cast<CStringA*>(outstream)) += CString(reinterpret_cast<LPCSTR>(buffer), size * nitems);
return size * nitems;
}));
curl_easy_setopt(_curlHandle, CURLOPT_WRITEDATA, &result);
const CURLcode res = curl_easy_perform(_curlHandle);
if (res != CURLE_OK)
{
ret = SiaCurlError::Failed;
}
response = json::parse((LPCSTR)result);
return ret;
}