summaryrefslogtreecommitdiffstats
path: root/Source/CTest/cmCTestSubmit.cxx
diff options
context:
space:
mode:
authorAndy Cedilnik <andy.cedilnik@kitware.com>2003-01-08 03:24:45 (GMT)
committerAndy Cedilnik <andy.cedilnik@kitware.com>2003-01-08 03:24:45 (GMT)
commit85607bc50b5a6d97775e73529f1a268a3b39cf0f (patch)
tree6273ad585a68d1c1602e586b69d7614daf610fd7 /Source/CTest/cmCTestSubmit.cxx
parenta067e36cc506d4a9d1083236b56bcbffd5352bd4 (diff)
downloadCMake-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.cxx71
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;