44 lines
1.3 KiB
C++
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;
|
|
} |