diff options
author | Andy Cedilnik <andy.cedilnik@kitware.com> | 2003-01-08 03:24:45 (GMT) |
---|---|---|
committer | Andy Cedilnik <andy.cedilnik@kitware.com> | 2003-01-08 03:24:45 (GMT) |
commit | 85607bc50b5a6d97775e73529f1a268a3b39cf0f (patch) | |
tree | 6273ad585a68d1c1602e586b69d7614daf610fd7 /Source/CTest/cmCTestSubmit.cxx | |
parent | a067e36cc506d4a9d1083236b56bcbffd5352bd4 (diff) | |
download | CMake-85607bc50b5a6d97775e73529f1a268a3b39cf0f.zip CMake-85607bc50b5a6d97775e73529f1a268a3b39cf0f.tar.gz CMake-85607bc50b5a6d97775e73529f1a268a3b39cf0f.tar.bz2 |
Implement FTP uploading
Diffstat (limited to 'Source/CTest/cmCTestSubmit.cxx')
-rw-r--r-- | Source/CTest/cmCTestSubmit.cxx | 71 |
1 files changed, 63 insertions, 8 deletions
diff --git a/Source/CTest/cmCTestSubmit.cxx b/Source/CTest/cmCTestSubmit.cxx index dbe9283..f724fdd 100644 --- a/Source/CTest/cmCTestSubmit.cxx +++ b/Source/CTest/cmCTestSubmit.cxx @@ -18,20 +18,75 @@ #include "cmCTestSubmit.h" #include "cmSystemTools.h" -bool cmCTestSubmit::SubmitUsingFTP(const std::vector<std::string>& files, - const std::string& prefix, +#include "curl/curl.h" +#include <sys/stat.h> + +bool cmCTestSubmit::SubmitUsingFTP(const std::string& localprefix, + const std::vector<std::string>& files, + const std::string& remoteprefix, const std::string& url) { - std::string::size_type cc; - for ( cc = 0; cc < files.size(); cc ++ ) + 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) { - std::cout << "upload file: " << files[cc].c_str() << " to " << url.c_str() - << " / " << prefix.c_str() << " " << files[cc].c_str() << std::endl; + // enable uploading + ::curl_easy_setopt(curl, CURLOPT_UPLOAD, TRUE) ; + + std::string::size_type cc; + for ( cc = 0; cc < files.size(); cc ++ ) + { + std::string local_file = localprefix + "/" + files[cc]; + std::string upload_as = url + "/" + remoteprefix + files[cc]; + + struct stat st; + if ( ::stat(local_file.c_str(), &st) ) + { + return false; + } + + ftpfile = ::fopen(local_file.c_str(), "rb"); + 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 specify which file to upload + ::curl_easy_setopt(curl, CURLOPT_INFILE, ftpfile); + + // and give the size of the upload (optional) + ::curl_easy_setopt(curl, CURLOPT_INFILESIZE, st.st_size); + + // Now run off and do what you've been told! + res = ::curl_easy_perform(curl); + fclose(ftpfile); + 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::SubmitUsingSCP(const std::vector<std::string>& files, - const std::string& prefix, +bool cmCTestSubmit::SubmitUsingSCP(const std::string& localprefix, + const std::vector<std::string>& files, + const std::string& remoteprefix, const std::string& url) { std::cout << "SubmitUsingSCP is not yet implemented" << std::endl; |