Added functionality to allow CTest to easily access web APIs. This will be used for better communication with CDash.
This commit is contained in:
parent
0bfb954cf8
commit
3ff0b94055
|
@ -38,6 +38,8 @@
|
|||
# include <sys/wait.h>
|
||||
#endif
|
||||
|
||||
#include "cm_curl.h"
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#if defined(_WIN32) && \
|
||||
|
@ -2925,3 +2927,53 @@ bool cmSystemTools::CheckRPath(std::string const& file,
|
|||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static size_t
|
||||
HTTPResponseCallback(void *ptr, size_t size, size_t nmemb, void *data)
|
||||
{
|
||||
register int realsize = (int)(size * nmemb);
|
||||
|
||||
std::string *response
|
||||
= static_cast<std::string*>(data);
|
||||
const char* chPtr = static_cast<char*>(ptr);
|
||||
*response += chPtr;
|
||||
|
||||
return realsize;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int cmSystemTools::HTTPRequest(std::string url, HTTPMethod method,
|
||||
std::string& response,
|
||||
std::string fields, int timeout)
|
||||
{
|
||||
CURL* curl;
|
||||
::curl_global_init(CURL_GLOBAL_ALL);
|
||||
curl = ::curl_easy_init();
|
||||
|
||||
//set request options
|
||||
if(method == cmSystemTools::HTTP_GET && fields.size())
|
||||
{
|
||||
url += "?" + fields;
|
||||
}
|
||||
else
|
||||
{
|
||||
::curl_easy_setopt(curl, CURLOPT_POST, 1);
|
||||
::curl_easy_setopt(curl, CURLOPT_POSTFIELDS, fields.c_str());
|
||||
}
|
||||
::curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
||||
::curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout);
|
||||
::curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
|
||||
|
||||
//set response options
|
||||
::curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, HTTPResponseCallback);
|
||||
::curl_easy_setopt(curl, CURLOPT_FILE, (void *)&response);
|
||||
::curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
|
||||
|
||||
CURLcode res = ::curl_easy_perform(curl);
|
||||
|
||||
::curl_easy_cleanup(curl);
|
||||
::curl_global_cleanup();
|
||||
|
||||
return static_cast<int>(res);
|
||||
}
|
||||
|
|
|
@ -46,6 +46,18 @@ public:
|
|||
static void ExpandRegistryValues(std::string& source,
|
||||
KeyWOW64 view = KeyWOW64_Default);
|
||||
|
||||
enum HTTPMethod {
|
||||
HTTP_GET,
|
||||
HTTP_POST
|
||||
};
|
||||
|
||||
/**
|
||||
* Perform an HTTP request.
|
||||
*/
|
||||
static int HTTPRequest(std::string url, HTTPMethod method,
|
||||
std::string& response,
|
||||
std::string fields = "", int timeout = 10);
|
||||
|
||||
/**
|
||||
* Platform independent escape spaces, unix uses backslash,
|
||||
* windows double quotes the string.
|
||||
|
|
Loading…
Reference in New Issue