summaryrefslogtreecommitdiffstats
path: root/Source/cmSystemTools.cxx
diff options
context:
space:
mode:
authorZach Mullen <zach.mullen@kitware.com>2009-12-21 20:19:57 (GMT)
committerZach Mullen <zach.mullen@kitware.com>2009-12-21 20:19:57 (GMT)
commit3ff0b940556f5e310daa1160c5d2844e63ffeb38 (patch)
tree3d843e45b73935199fa3347f19237c592624793a /Source/cmSystemTools.cxx
parent0bfb954cf8c4b0cbc111c3381916fedfd382b1c0 (diff)
downloadCMake-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.cxx52
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);
+}