summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Cedilnik <andy.cedilnik@kitware.com>2003-01-15 03:10:47 (GMT)
committerAndy Cedilnik <andy.cedilnik@kitware.com>2003-01-15 03:10:47 (GMT)
commitf722e3c6692e3824731cf7c5813c2153b89f554f (patch)
tree89ba0a671dea9f625327d1567b208a1dee9fa826
parenta27c3fa008f14ec6dee9a9386f07f31f5170daa8 (diff)
downloadCMake-f722e3c6692e3824731cf7c5813c2153b89f554f.zip
CMake-f722e3c6692e3824731cf7c5813c2153b89f554f.tar.gz
CMake-f722e3c6692e3824731cf7c5813c2153b89f554f.tar.bz2
Add support for http submit. Also, add support for proxy, but it does not work yet.
-rw-r--r--Source/CTest/cmCTestSubmit.cxx166
-rw-r--r--Source/CTest/cmCTestSubmit.h12
2 files changed, 177 insertions, 1 deletions
diff --git a/Source/CTest/cmCTestSubmit.cxx b/Source/CTest/cmCTestSubmit.cxx
index a6a94e5..a26b55a 100644
--- a/Source/CTest/cmCTestSubmit.cxx
+++ b/Source/CTest/cmCTestSubmit.cxx
@@ -21,6 +21,71 @@
#include "curl/curl.h"
#include <sys/stat.h>
+cmCTestSubmit::cmCTestSubmit() : m_HTTPProxy(), m_FTPProxy()
+{
+ std::cout << "Setup proxy" << endl;
+ m_HTTPProxy = "";
+ m_HTTPProxyType = 0;
+ if ( getenv("HTTP_PROXY") )
+ {
+ m_HTTPProxyType = 1;
+ m_HTTPProxy = getenv("HTTP_PROXY");
+ if ( getenv("HTTP_PROXY_PORT") )
+ {
+ m_HTTPProxy += ":";
+ m_HTTPProxy += getenv("HTTP_PROXY_PORT");
+ }
+ if ( getenv("HTTP_PROXY_TYPE") )
+ {
+ std::string type = getenv("HTTP_PROXY_TYPE");
+ // HTTP/SOCKS4/SOCKS5
+ if ( type == "HTTP" )
+ {
+ m_HTTPProxyType = 1;
+ }
+ else if ( type == "SOCKS4" )
+ {
+ m_HTTPProxyType = 2;
+ }
+ else if ( type == "SOCKS5" )
+ {
+ m_HTTPProxyType = 3;
+ }
+ }
+ }
+ m_FTPProxy = "";
+ m_FTPProxyType = 0;
+ if ( getenv("FTP_PROXY") )
+ {
+ m_FTPProxyType = 1;
+ m_FTPProxy = getenv("FTP_PROXY");
+ if ( getenv("FTP_PROXY_PORT") )
+ {
+ m_FTPProxy += ":";
+ m_FTPProxy += getenv("FTP_PROXY_PORT");
+ }
+ if ( getenv("FTP_PROXY_TYPE") )
+ {
+ std::string type = getenv("FTP_PROXY_TYPE");
+ // HTTP/SOCKS4/SOCKS5
+ if ( type == "HTTP" )
+ {
+ m_FTPProxyType = 1;
+ }
+ else if ( type == "SOCKS4" )
+ {
+ m_FTPProxyType = 2;
+ }
+ else if ( type == "SOCKS5" )
+ {
+ m_FTPProxyType = 3;
+ }
+ }
+ }
+ std::cout << this << " HTTP Proxy: " << m_HTTPProxy << std::endl;
+
+}
+
bool cmCTestSubmit::SubmitUsingFTP(const std::string& localprefix,
const std::vector<std::string>& files,
const std::string& remoteprefix,
@@ -37,6 +102,23 @@ bool cmCTestSubmit::SubmitUsingFTP(const std::string& localprefix,
curl = curl_easy_init();
if(curl)
{
+ // Using proxy
+ if ( m_FTPProxyType > 0 )
+ {
+ curl_easy_setopt(curl, CURLOPT_PROXY, m_FTPProxy.c_str());
+ switch (m_FTPProxyType)
+ {
+ case 2:
+ curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
+ break;
+ case 3:
+ curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
+ break;
+ default:
+ curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
+ }
+ }
+
// enable uploading
::curl_easy_setopt(curl, CURLOPT_UPLOAD, TRUE) ;
@@ -84,6 +166,90 @@ bool cmCTestSubmit::SubmitUsingFTP(const std::string& localprefix,
return true;
}
+// Uploading files is simpler
+bool cmCTestSubmit::SubmitUsingHTTP(const std::string& localprefix,
+ const std::vector<std::string>& files,
+ const std::string& remoteprefix,
+ const std::string& url)
+{
+ std::cout << this << " Using proxy: " << m_HTTPProxy << std::endl;
+ CURL *curl;
+ CURLcode res;
+ FILE* ftpfile;
+
+ /* In windows, this will init the winsock stuff */
+ ::curl_global_init(CURL_GLOBAL_ALL);
+
+ /* get a curl handle */
+ curl = curl_easy_init();
+ if(curl)
+ {
+
+ // Using proxy
+ if ( m_HTTPProxyType > 0 )
+ {
+ curl_easy_setopt(curl, CURLOPT_PROXY, m_HTTPProxy.c_str());
+ switch (m_HTTPProxyType)
+ {
+ case 2:
+ curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
+ break;
+ case 3:
+ curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
+ break;
+ default:
+ curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
+ }
+ }
+
+ std::string::size_type cc;
+ for ( cc = 0; cc < files.size(); cc ++ )
+ {
+ std::string local_file = localprefix + "/" + files[cc];
+ std::string upload_as = url;
+ std::string remote_file = remoteprefix + files[cc];
+
+ struct HttpPost *formpost=NULL;
+ struct HttpPost *lastptr=NULL;
+
+ /* Fill in the file upload field */
+ curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "FileData",
+ CURLFORM_FILE, local_file.c_str(),
+ CURLFORM_END);
+ curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "FileName",
+ CURLFORM_COPYCONTENTS, remote_file.c_str(),
+ CURLFORM_END);
+
+ curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
+ std::cout << "upload file: " << local_file.c_str() << " to "
+ << upload_as.c_str() << std::endl;
+
+ ::curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
+ // specify target
+ ::curl_easy_setopt(curl,CURLOPT_URL, upload_as.c_str());
+
+ // Now run off and do what you've been told!
+ res = ::curl_easy_perform(curl);
+
+ if ( res )
+ {
+ std::cout << "Error when uploading" << std::endl;
+ ::curl_easy_cleanup(curl);
+ ::curl_global_cleanup();
+ return false;
+ }
+ }
+ // always cleanup
+ ::curl_easy_cleanup(curl);
+ }
+ ::curl_global_cleanup();
+ return true;
+}
+
bool cmCTestSubmit::TriggerUsingHTTP(const std::vector<std::string>& files,
const std::string& remoteprefix,
const std::string& url)
diff --git a/Source/CTest/cmCTestSubmit.h b/Source/CTest/cmCTestSubmit.h
index 76fc403..87e9add 100644
--- a/Source/CTest/cmCTestSubmit.h
+++ b/Source/CTest/cmCTestSubmit.h
@@ -28,7 +28,7 @@
class cmCTestSubmit
{
public:
- cmCTestSubmit() {}
+ cmCTestSubmit();
~cmCTestSubmit() {}
/**
@@ -38,6 +38,10 @@ public:
const std::vector<std::string>& files,
const std::string& remoteprefix,
const std::string& url);
+ bool SubmitUsingHTTP(const std::string& localprefix,
+ const std::vector<std::string>& files,
+ const std::string& remoteprefix,
+ const std::string& url);
bool SubmitUsingSCP(const std::string& localprefix,
const std::vector<std::string>& files,
const std::string& remoteprefix,
@@ -46,6 +50,12 @@ public:
bool TriggerUsingHTTP(const std::vector<std::string>& files,
const std::string& remoteprefix,
const std::string& url);
+
+private:
+ std::string m_HTTPProxy;
+ int m_HTTPProxyType;
+ std::string m_FTPProxy;
+ int m_FTPProxyType;
};
#endif