summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-05-01 23:23:10 +0200
committerCarl Hetherington <cth@carlh.net>2025-07-09 00:35:10 +0200
commit099bd1900672291ed256b54818cb3160ce0c5f7a (patch)
treeeb5b032f031b9313f6428be751f85f8c4a5a4656
parentceabf23fd06ce07511bf01c6e61c76a4f0b03ea4 (diff)
Support FTPS uploads.
-rw-r--r--src/lib/curl_uploader.cc4
-rw-r--r--src/lib/types.cc30
-rw-r--r--src/lib/types.h3
-rw-r--r--src/lib/upload_job.cc1
-rw-r--r--src/wx/upload_destination_dialog.cc1
5 files changed, 25 insertions, 14 deletions
diff --git a/src/lib/curl_uploader.cc b/src/lib/curl_uploader.cc
index d36909a2e..522ce5f65 100644
--- a/src/lib/curl_uploader.cc
+++ b/src/lib/curl_uploader.cc
@@ -103,6 +103,10 @@ CurlUploader::upload_file(boost::filesystem::path from, boost::filesystem::path
curl_easy_setopt(_curl, CURLOPT_RESUME_FROM_LARGE, static_cast<curl_off_t>(-1));
curl_easy_setopt(_curl, CURLOPT_INFILESIZE_LARGE, boost::filesystem::file_size(from));
+ if (_destination.protocol == FileTransferProtocol::FTPS) {
+ curl_easy_setopt(_curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
+ }
+
dcp::File file(from, "rb");
if (!file) {
throw NetworkError(String::compose(_("Could not open %1 to send"), from));
diff --git a/src/lib/types.cc b/src/lib/types.cc
index 0be90e5c7..e544f896d 100644
--- a/src/lib/types.cc
+++ b/src/lib/types.cc
@@ -117,11 +117,13 @@ reel_type_to_string(ReelType type)
FileTransferProtocol
file_transfer_protocol_from_string(string s)
{
- if (s == "scp") {
- return FileTransferProtocol::SCP;
- } else if (s == "ftp") {
- return FileTransferProtocol::FTP;
- }
+ if (s == "scp") {
+ return FileTransferProtocol::SCP;
+ } else if (s == "ftp") {
+ return FileTransferProtocol::FTP;
+ } else if (s == "ftps") {
+ return FileTransferProtocol::FTPS;
+ }
DCPOMATIC_ASSERT(false);
return FileTransferProtocol::SCP;
@@ -131,14 +133,16 @@ file_transfer_protocol_from_string(string s)
string
file_transfer_protocol_to_string(FileTransferProtocol p)
{
- switch (p) {
- case FileTransferProtocol::SCP:
- return "scp";
- case FileTransferProtocol::FTP:
- return "ftp";
- default:
- DCPOMATIC_ASSERT(false);
- }
+ switch (p) {
+ case FileTransferProtocol::SCP:
+ return "scp";
+ case FileTransferProtocol::FTP:
+ return "ftp";
+ case FileTransferProtocol::FTPS:
+ return "ftps";
+ default:
+ DCPOMATIC_ASSERT(false);
+ }
return "";
}
diff --git a/src/lib/types.h b/src/lib/types.h
index 9cc20d8b4..eea63e119 100644
--- a/src/lib/types.h
+++ b/src/lib/types.h
@@ -142,7 +142,8 @@ struct CPLSummary
enum class FileTransferProtocol {
SCP,
- FTP
+ FTP,
+ FTPS
};
diff --git a/src/lib/upload_job.cc b/src/lib/upload_job.cc
index 2acc97320..4ca5a64eb 100644
--- a/src/lib/upload_job.cc
+++ b/src/lib/upload_job.cc
@@ -86,6 +86,7 @@ UploadJob::run()
uploader.reset(new SCPUploader(_destination, bind(&UploadJob::set_status, this, _1), bind(&UploadJob::set_progress, this, _1, false)));
break;
case FileTransferProtocol::FTP:
+ case FileTransferProtocol::FTPS:
uploader.reset(new CurlUploader(_destination, bind(&UploadJob::set_status, this, _1), bind(&UploadJob::set_progress, this, _1, false)));
break;
}
diff --git a/src/wx/upload_destination_dialog.cc b/src/wx/upload_destination_dialog.cc
index a32055c60..2bac4ea72 100644
--- a/src/wx/upload_destination_dialog.cc
+++ b/src/wx/upload_destination_dialog.cc
@@ -58,6 +58,7 @@ UploadDestinationDialog::UploadDestinationDialog(wxWindow* parent)
_protocol->add_entry(_("SCP"), file_transfer_protocol_to_string(FileTransferProtocol::SCP));
_protocol->add_entry(_("FTP"), file_transfer_protocol_to_string(FileTransferProtocol::FTP));
+ _protocol->add_entry(_("FTPS"), file_transfer_protocol_to_string(FileTransferProtocol::FTPS));
_protocol->bind(&UploadDestinationDialog::protocol_changed, this);
_limit_connections->bind(&UploadDestinationDialog::limit_connections_changed, this);