summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZach Mullen <zach.mullen@kitware.com>2009-12-30 16:10:42 (GMT)
committerZach Mullen <zach.mullen@kitware.com>2009-12-30 16:10:42 (GMT)
commit0a0788a72d72ffe40624c6e47fdf5c30a7ab8ac6 (patch)
tree6ea2148de0638fd7d63af8cf676a09bddc045bd0
parent646e71f29021d76998d1161dc00d52f00ad2b94b (diff)
downloadCMake-0a0788a72d72ffe40624c6e47fdf5c30a7ab8ac6.zip
CMake-0a0788a72d72ffe40624c6e47fdf5c30a7ab8ac6.tar.gz
CMake-0a0788a72d72ffe40624c6e47fdf5c30a7ab8ac6.tar.bz2
Enhanced CTest HTTP Request API to support PUT file uploads.
-rw-r--r--Source/cmCTest.cxx38
-rw-r--r--Source/cmCTest.h6
2 files changed, 33 insertions, 11 deletions
diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx
index bcbe18e..c6dffd7 100644
--- a/Source/cmCTest.cxx
+++ b/Source/cmCTest.cxx
@@ -172,22 +172,42 @@ HTTPResponseCallback(void *ptr, size_t size, size_t nmemb, void *data)
//----------------------------------------------------------------------------
int cmCTest::HTTPRequest(std::string url, HTTPMethod method,
std::string& response,
- std::string fields, int timeout)
+ std::string fields,
+ std::string putFile, int timeout)
{
CURL* curl;
+ FILE* file;
::curl_global_init(CURL_GLOBAL_ALL);
curl = ::curl_easy_init();
- //set request options
- if(method == cmCTest::HTTP_GET && fields.size())
+ //set request options based on method
+ switch(method)
{
- url += "?" + fields;
- }
- else
- {
- ::curl_easy_setopt(curl, CURLOPT_POST, 1);
- ::curl_easy_setopt(curl, CURLOPT_POSTFIELDS, fields.c_str());
+ case cmCTest::HTTP_POST:
+ ::curl_easy_setopt(curl, CURLOPT_POST, 1);
+ ::curl_easy_setopt(curl, CURLOPT_POSTFIELDS, fields.c_str());
+ break;
+ case cmCTest::HTTP_PUT:
+ if(!cmSystemTools::FileExists(putFile.c_str()))
+ {
+ response = "Error: File ";
+ response += putFile + " does not exist.\n";
+ return -1;
+ }
+ ::curl_easy_setopt(curl, CURLOPT_PUT, 1);
+ file = ::fopen(putFile.c_str(), "rb");
+ ::curl_easy_setopt(curl, CURLOPT_INFILE, file);
+ //fall through to append GET fields
+ case cmCTest::HTTP_GET:
+ if(fields.size())
+ {
+ url += "?" + fields;
+ }
+ break;
+ default:
+ break;
}
+
::curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
::curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout);
::curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
diff --git a/Source/cmCTest.h b/Source/cmCTest.h
index 2b7912c..8621b10 100644
--- a/Source/cmCTest.h
+++ b/Source/cmCTest.h
@@ -83,7 +83,8 @@ public:
#ifdef CMAKE_BUILD_WITH_CMAKE
enum HTTPMethod {
HTTP_GET,
- HTTP_POST
+ HTTP_POST,
+ HTTP_PUT
};
/**
@@ -91,7 +92,8 @@ public:
*/
static int HTTPRequest(std::string url, HTTPMethod method,
std::string& response,
- std::string fields = "", int timeout = 10);
+ std::string fields = "",
+ std::string putFile = "", int timeout = 0);
#endif
/** Get a testing part id from its string name. Returns PartCount