diff options
author | Zach Mullen <zach.mullen@kitware.com> | 2009-12-21 20:19:57 (GMT) |
---|---|---|
committer | Zach Mullen <zach.mullen@kitware.com> | 2009-12-21 20:19:57 (GMT) |
commit | 3ff0b940556f5e310daa1160c5d2844e63ffeb38 (patch) | |
tree | 3d843e45b73935199fa3347f19237c592624793a /Source/cmSystemTools.cxx | |
parent | 0bfb954cf8c4b0cbc111c3381916fedfd382b1c0 (diff) | |
download | CMake-3ff0b940556f5e310daa1160c5d2844e63ffeb38.zip CMake-3ff0b940556f5e310daa1160c5d2844e63ffeb38.tar.gz CMake-3ff0b940556f5e310daa1160c5d2844e63ffeb38.tar.bz2 |
Added functionality to allow CTest to easily access web APIs. This will be used for better communication with CDash.
Diffstat (limited to 'Source/cmSystemTools.cxx')
-rw-r--r-- | Source/cmSystemTools.cxx | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 89a241d..5a0dafc 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -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); +} |