mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Merge branch 'indev' into launcher_rework
This commit is contained in:
commit
682e7d8847
@ -361,9 +361,15 @@ bool CPylon::QueryServer(const char* endpoint, const char* request,
|
|||||||
string finalUrl;
|
string finalUrl;
|
||||||
CURLFormatUrl(finalUrl, hostName, endpoint);
|
CURLFormatUrl(finalUrl, hostName, endpoint);
|
||||||
|
|
||||||
|
CURLParams params;
|
||||||
|
|
||||||
|
params.writeFunction = CURLWriteStringCallback;
|
||||||
|
params.timeout = curl_timeout->GetInt();
|
||||||
|
params.verifyPeer = ssl_verify_peer->GetBool();
|
||||||
|
params.verbose = curl_debug->GetBool();
|
||||||
|
|
||||||
curl_slist* sList = nullptr;
|
curl_slist* sList = nullptr;
|
||||||
CURL* curl = CURLInitRequest(finalUrl.c_str(), request, outResponse, sList,
|
CURL* curl = CURLInitRequest(finalUrl.c_str(), request, outResponse, sList, params);
|
||||||
curl_timeout->GetInt(), ssl_verify_peer->GetBool(), curl_debug->GetBool());
|
|
||||||
if (!curl)
|
if (!curl)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -33,6 +33,8 @@ string CreateTimedFileName();
|
|||||||
string CreateUUID();
|
string CreateUUID();
|
||||||
void CreateDirectories(string svInput, string* pszOutput = nullptr, bool bWindows = false);
|
void CreateDirectories(string svInput, string* pszOutput = nullptr, bool bWindows = false);
|
||||||
|
|
||||||
|
void AppendSlash(string& svInput, const char separator = '\\');
|
||||||
|
|
||||||
string ConvertToWinPath(const string& svInput);
|
string ConvertToWinPath(const string& svInput);
|
||||||
string ConvertToUnixPath(const string& svInput);
|
string ConvertToUnixPath(const string& svInput);
|
||||||
|
|
||||||
|
@ -3,14 +3,45 @@
|
|||||||
|
|
||||||
struct CURLProgress
|
struct CURLProgress
|
||||||
{
|
{
|
||||||
CURL* priv;
|
CURLProgress()
|
||||||
|
: curl(nullptr)
|
||||||
|
, name(nullptr)
|
||||||
|
, cust(nullptr)
|
||||||
|
, size(0)
|
||||||
|
{}
|
||||||
|
|
||||||
|
CURL* curl;
|
||||||
|
const char* name;
|
||||||
|
void* cust; // custom pointer to anything.
|
||||||
size_t size;
|
size_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
size_t CURLWriteStringCallback(char* contents, const size_t size, const size_t nmemb, void* userp);
|
struct CURLParams
|
||||||
|
{
|
||||||
|
CURLParams()
|
||||||
|
: writeFunction(nullptr)
|
||||||
|
, statusFunction(nullptr)
|
||||||
|
, timeout(0)
|
||||||
|
, verifyPeer(false)
|
||||||
|
, verbose(false)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void* writeFunction;
|
||||||
|
void* statusFunction;
|
||||||
|
|
||||||
|
int timeout;
|
||||||
|
bool verifyPeer;
|
||||||
|
bool verbose;
|
||||||
|
};
|
||||||
|
|
||||||
|
size_t CURLWriteStringCallback(char* contents, const size_t size, const size_t nmemb, string* userp);
|
||||||
|
size_t CURLWriteFileCallback(void* data, const size_t size, const size_t nmemb, FILE* userp);
|
||||||
|
|
||||||
|
bool CURLDownloadFile(const char* remote, const char* savePath, const char* fileName,
|
||||||
|
const char* options, curl_off_t dataSize, void* customPointer, CURLParams& params);
|
||||||
|
|
||||||
|
CURL* CURLInitRequest(const char* remote, const char* request, string& outResponse, curl_slist*& slist, CURLParams& params);
|
||||||
|
|
||||||
CURL* CURLInitRequest(const char* remote, const char* request, string& outResponse, curl_slist*& slist,
|
|
||||||
const int timeOut, const bool verifyPeer, const bool debug, const void* writeFunction = CURLWriteStringCallback);
|
|
||||||
CURLcode CURLSubmitRequest(CURL* curl, curl_slist*& slist);
|
CURLcode CURLSubmitRequest(CURL* curl, curl_slist*& slist);
|
||||||
CURLINFO CURLRetrieveInfo(CURL* curl);
|
CURLINFO CURLRetrieveInfo(CURL* curl);
|
||||||
|
|
||||||
|
@ -409,6 +409,17 @@ void CreateDirectories(string svInput, string* pszOutput, bool bWindows)
|
|||||||
fs::create_directories(fspPathOut);
|
fs::create_directories(fspPathOut);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// For appending a slash at the end of the string if not already present.
|
||||||
|
void AppendSlash(string& svInput, const char separator)
|
||||||
|
{
|
||||||
|
char lchar = svInput[svInput.size() - 1];
|
||||||
|
if (lchar != '\\' && lchar != '/')
|
||||||
|
{
|
||||||
|
svInput.push_back(separator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// For converting file paths to windows file paths.
|
// For converting file paths to windows file paths.
|
||||||
string ConvertToWinPath(const string& svInput)
|
string ConvertToWinPath(const string& svInput)
|
||||||
|
@ -6,14 +6,99 @@
|
|||||||
#include "tier1/cvar.h"
|
#include "tier1/cvar.h"
|
||||||
#include "tier2/curlutils.h"
|
#include "tier2/curlutils.h"
|
||||||
|
|
||||||
size_t CURLWriteStringCallback(char* contents, const size_t size, const size_t nmemb, void* userp)
|
size_t CURLWriteStringCallback(char* data, const size_t size, const size_t nmemb, string* userp)
|
||||||
{
|
{
|
||||||
reinterpret_cast<string*>(userp)->append(contents, size * nmemb);
|
userp->append(data, size * nmemb);
|
||||||
return size * nmemb;
|
return size * nmemb;
|
||||||
}
|
}
|
||||||
|
|
||||||
CURL* CURLInitRequest(const char* remote, const char* request, string& outResponse, curl_slist*& slist,
|
size_t CURLWriteFileCallback(void* data, const size_t size, const size_t nmemb, FILE* userp)
|
||||||
const int timeOut, const bool verifyPeer, const bool debug, const void* writeFunction)
|
{
|
||||||
|
const size_t numBytesWritten = fwrite(data, size, nmemb, userp);
|
||||||
|
return numBytesWritten;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CURLInitCommonOptions(CURL* curl, const char* remote, const void* writeData,
|
||||||
|
const void* writeFunction, const int timeout, const bool verifyPeer, const bool debug)
|
||||||
|
{
|
||||||
|
curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_VERBOSE, debug);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, verifyPeer);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_URL, remote);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_WRITEDATA, writeData);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_USERAGENT, "R5R HTTPS/1.0");
|
||||||
|
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeFunction);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CURLDownloadFile(const char* remote, const char* savePath, const char* fileName,
|
||||||
|
const char* options, curl_off_t dataSize, void* customPointer, CURLParams& params)
|
||||||
|
{
|
||||||
|
CURL* curl = curl_easy_init();
|
||||||
|
if (!curl)
|
||||||
|
{
|
||||||
|
Error(eDLL_T::COMMON, NO_ERROR, "CURL: %s\n", "Easy init failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
string filePath = savePath;
|
||||||
|
|
||||||
|
AppendSlash(filePath);
|
||||||
|
filePath.append(fileName);
|
||||||
|
|
||||||
|
FILE* file = fopen(filePath.c_str(), options);
|
||||||
|
if (!file)
|
||||||
|
{
|
||||||
|
Error(eDLL_T::COMMON, NO_ERROR, "CURL: %s\n", "Open file failed");
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CURLProgress progressData;
|
||||||
|
|
||||||
|
progressData.curl = curl;
|
||||||
|
progressData.name = fileName;
|
||||||
|
progressData.cust = customPointer;
|
||||||
|
progressData.size = dataSize;
|
||||||
|
|
||||||
|
CURLInitCommonOptions(curl, remote, file,
|
||||||
|
params.writeFunction,
|
||||||
|
params.timeout,
|
||||||
|
params.verifyPeer,
|
||||||
|
params.verbose);
|
||||||
|
|
||||||
|
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1l);
|
||||||
|
|
||||||
|
if (params.statusFunction)
|
||||||
|
{
|
||||||
|
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0l);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_XFERINFODATA, &progressData);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_XFERINFOFUNCTION, params.statusFunction);
|
||||||
|
}
|
||||||
|
|
||||||
|
CURLcode res = curl_easy_perform(curl);
|
||||||
|
|
||||||
|
if (res != CURLE_OK)
|
||||||
|
{
|
||||||
|
Error(eDLL_T::COMMON, NO_ERROR, "CURL: Download of file '%s' failed; %s\n",
|
||||||
|
fileName, curl_easy_strerror(res));
|
||||||
|
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
fclose(file);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
fclose(file);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
CURL* CURLInitRequest(const char* remote, const char* request,
|
||||||
|
string& outResponse, curl_slist*& slist, CURLParams& params)
|
||||||
{
|
{
|
||||||
std::function<void(const char*)> fnError = [&](const char* errorMsg)
|
std::function<void(const char*)> fnError = [&](const char* errorMsg)
|
||||||
{
|
{
|
||||||
@ -35,23 +120,17 @@ CURL* CURLInitRequest(const char* remote, const char* request, string& outRespon
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CURLInitCommonOptions(curl, remote, &outResponse,
|
||||||
|
params.writeFunction,
|
||||||
|
params.timeout,
|
||||||
|
params.verifyPeer,
|
||||||
|
params.verbose);
|
||||||
|
|
||||||
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
|
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, remote);
|
if (request)
|
||||||
|
{
|
||||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, request);
|
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, request);
|
||||||
curl_easy_setopt(curl, CURLOPT_POST, 1L);
|
curl_easy_setopt(curl, CURLOPT_POST, 1L);
|
||||||
curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeOut);
|
|
||||||
curl_easy_setopt(curl, CURLOPT_USERAGENT, "R5R HTTPS/1.0");
|
|
||||||
curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
|
|
||||||
|
|
||||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeFunction);
|
|
||||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &outResponse);
|
|
||||||
|
|
||||||
curl_easy_setopt(curl, CURLOPT_VERBOSE, debug);
|
|
||||||
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);
|
|
||||||
|
|
||||||
if (!verifyPeer)
|
|
||||||
{
|
|
||||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return curl;
|
return curl;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user