fix curl requirement
parent
6cdfab39cf
commit
90cf177c57
|
@ -1,6 +1,6 @@
|
||||||
cmake_minimum_required(VERSION 3.20)
|
cmake_minimum_required(VERSION 3.20)
|
||||||
include(cmake/color.cmake)
|
include(cmake/color.cmake)
|
||||||
set(BLT_VERSION 5.3.3)
|
set(BLT_VERSION 5.3.4)
|
||||||
|
|
||||||
set(BLT_TARGET BLT)
|
set(BLT_TARGET BLT)
|
||||||
|
|
||||||
|
|
|
@ -29,62 +29,63 @@
|
||||||
|
|
||||||
namespace blt::requests
|
namespace blt::requests
|
||||||
{
|
{
|
||||||
#ifdef BLT_HAS_CURL
|
#ifdef BLT_HAS_CURL
|
||||||
struct curl_init_t
|
struct curl_init_t
|
||||||
{
|
{
|
||||||
curl_init_t()
|
curl_init_t()
|
||||||
{
|
{
|
||||||
const auto version_data = curl_version_info(CURLVERSION_NOW);
|
const auto version_data = curl_version_info(CURLVERSION_NOW);
|
||||||
if (!(version_data->features & CURL_VERSION_THREADSAFE))
|
if (!(version_data->features & CURL_VERSION_THREADSAFE))
|
||||||
{
|
{
|
||||||
thread_safe = false;
|
thread_safe = false;
|
||||||
}
|
}
|
||||||
curl_global_init(CURL_GLOBAL_ALL);
|
curl_global_init(CURL_GLOBAL_ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
~curl_init_t()
|
~curl_init_t()
|
||||||
{
|
{
|
||||||
curl_global_cleanup();
|
curl_global_cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool thread_safe = true;
|
bool thread_safe = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct curl_easy_init_t
|
struct curl_easy_init_t
|
||||||
{
|
{
|
||||||
curl_easy_init_t(): curl(curl_easy_init())
|
curl_easy_init_t(): curl(curl_easy_init())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
~curl_easy_init_t()
|
~curl_easy_init_t()
|
||||||
{
|
{
|
||||||
curl_easy_cleanup(curl);
|
curl_easy_cleanup(curl);
|
||||||
}
|
}
|
||||||
|
|
||||||
CURL* curl;
|
CURL* curl;
|
||||||
};
|
};
|
||||||
|
|
||||||
void init()
|
void init()
|
||||||
{
|
{
|
||||||
static curl_init_t curl_init_obj;
|
static curl_init_t curl_init_obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
CURL* easy_init()
|
CURL* easy_init()
|
||||||
{
|
{
|
||||||
thread_local curl_easy_init_t curl_easy_init_obj;
|
thread_local curl_easy_init_t curl_easy_init_obj;
|
||||||
return curl_easy_init_obj.curl;
|
return curl_easy_init_obj.curl;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t write_to_string_func(const void* data, const size_t size, const size_t nmemb, void* user_data) {
|
size_t write_to_string_func(const void* data, const size_t size, const size_t nmemb, void* user_data)
|
||||||
auto& str = *static_cast<std::string*>(user_data);
|
{
|
||||||
str.append(static_cast<const char*>(data), size * nmemb);
|
auto& str = *static_cast<std::string*>(user_data);
|
||||||
return size * nmemb;
|
str.append(static_cast<const char*>(data), size * nmemb);
|
||||||
};
|
return size * nmemb;
|
||||||
#endif
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
std::string send_get_request(const std::string& url)
|
std::string send_get_request(const std::string& url)
|
||||||
{
|
{
|
||||||
#ifdef __EMSCRIPTEN__
|
#ifdef __EMSCRIPTEN__
|
||||||
auto* str = static_cast<char*>(EM_ASM_PTR({
|
auto* str = static_cast<char*>(EM_ASM_PTR({
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
xhr.open("GET", $0);
|
xhr.open("GET", $0);
|
||||||
|
@ -94,23 +95,27 @@ namespace blt::requests
|
||||||
std::string str_obj{str};
|
std::string str_obj{str};
|
||||||
free(str);
|
free(str);
|
||||||
return str_obj;
|
return str_obj;
|
||||||
#else
|
#else
|
||||||
init();
|
#ifdef BLT_HAS_CURL
|
||||||
auto curl = easy_init();
|
init();
|
||||||
if (!curl)
|
auto curl = easy_init();
|
||||||
throw std::runtime_error("Failed to initialize curl");
|
if (!curl)
|
||||||
std::string response_string;
|
throw std::runtime_error("Failed to initialize curl");
|
||||||
|
std::string response_string;
|
||||||
|
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
||||||
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
|
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
|
||||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, static_cast<void*>(&response_string));
|
curl_easy_setopt(curl, CURLOPT_WRITEDATA, static_cast<void*>(&response_string));
|
||||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &write_to_string_func);
|
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &write_to_string_func);
|
||||||
|
|
||||||
const auto res = curl_easy_perform(curl);
|
const auto res = curl_easy_perform(curl);
|
||||||
if(res != CURLE_OK)
|
if (res != CURLE_OK)
|
||||||
throw std::runtime_error(curl_easy_strerror(res));
|
throw std::runtime_error(curl_easy_strerror(res));
|
||||||
|
|
||||||
return response_string;
|
return response_string;
|
||||||
#endif
|
#else
|
||||||
}
|
return "Missing cURL! Unable to fetch URL: '" + url + "'";
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue