From: Carl Hetherington Date: Wed, 2 Dec 2015 10:29:29 +0000 (+0000) Subject: Specify no EPRT on FTP downloads. Fix request to CURL when not X-Git-Tag: v2.5.14~2 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;ds=sidebyside;h=dcd6405bb3c54500b32cdc0c8ce652f5942e4c46;p=dcpomatic.git Specify no EPRT on FTP downloads. Fix request to CURL when not using PASV. Fix incorrect return value from ftp_ls_data. Tidy Dolby fetching code a bit. Fix sensitivity of Dolby download button (#769). --- diff --git a/ChangeLog b/ChangeLog index 5b70592da..62b4a631a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2015-12-02 Carl Hetherington + * Various fixes to certificate downloading. + * Version 2.5.13 released. 2015-12-02 Carl Hetherington diff --git a/src/lib/internet.cc b/src/lib/internet.cc index 2b1e90ca7..1aaeccd36 100644 --- a/src/lib/internet.cc +++ b/src/lib/internet.cc @@ -49,7 +49,7 @@ get_from_zip_url_data (void* buffer, size_t size, size_t nmemb, void* stream) * @param load Function passed a (temporary) filesystem path of the unpacked file. */ optional -get_from_zip_url (string url, string file, function load) +get_from_zip_url (string url, string file, bool pasv, function load) { /* Download the ZIP file to temp_zip */ CURL* curl = curl_easy_init (); @@ -60,6 +60,11 @@ get_from_zip_url (string url, string file, function (); } - static size_t ftp_ls_data (void* buffer, size_t size, size_t nmemb, void* data) { @@ -108,7 +112,7 @@ ftp_ls_data (void* buffer, size_t size, size_t nmemb, void* data) for (size_t i = 0; i < (size * nmemb); ++i) { *s += b[i]; } - return nmemb; + return size * nmemb; } list @@ -133,8 +137,10 @@ ftp_ls (string url, bool pasv) curl_easy_setopt (curl, CURLOPT_WRITEDATA, &ls_raw); curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, ftp_ls_data); curl_easy_setopt (curl, CURLOPT_FTP_USE_EPSV, 0); + curl_easy_setopt (curl, CURLOPT_FTP_USE_EPRT, 0); + curl_easy_setopt (curl, CURLOPT_VERBOSE, 1); if (!pasv) { - curl_easy_setopt (curl, CURLOPT_FTPPORT, ""); + curl_easy_setopt (curl, CURLOPT_FTPPORT, "-"); } CURLcode const r = curl_easy_perform (curl); if (r != CURLE_OK) { diff --git a/src/lib/internet.h b/src/lib/internet.h index f46abc367..12b2ba3cd 100644 --- a/src/lib/internet.h +++ b/src/lib/internet.h @@ -21,5 +21,5 @@ #include #include -boost::optional get_from_zip_url (std::string url, std::string file, boost::function load); +boost::optional get_from_zip_url (std::string url, std::string file, bool pasv, boost::function load); std::list ftp_ls (std::string dir, bool pasv = true); diff --git a/src/wx/dolby_certificate_panel.cc b/src/wx/dolby_certificate_panel.cc index 7e6404cfb..45d52eca2 100644 --- a/src/wx/dolby_certificate_panel.cc +++ b/src/wx/dolby_certificate_panel.cc @@ -64,11 +64,16 @@ DolbyCertificatePanel::DolbyCertificatePanel (wxWindow* parent, DownloadCertific _cinema->Clear (); } +string +DolbyCertificatePanel::url (string path) const +{ + return String::compose ("ftp://dolbyrootcertificates:houro61l@ftp.dolby.co.uk/SHA256/%1", path); +} + list DolbyCertificatePanel::get_dir (string dir) const { - string url = String::compose ("ftp://dolbyrootcertificates:houro61l@ftp.dolby.co.uk/SHA256/%1", dir); - return ftp_ls (url, false); + return ftp_ls (url (dir), false); } void @@ -180,11 +185,12 @@ DolbyCertificatePanel::finish_download (wxStaticText* message) { string const zip = string_client_data (_serial->GetClientObject (_serial->GetSelection ())); - string const file = String::compose ( - "ftp://dolbyrootcertificates:houro61l@ftp.dolby.co.uk/SHA256/%1/%2/%3", - wx_to_std (_country->GetStringSelection()), - wx_to_std (_cinema->GetStringSelection()), - zip + string const file = url ( + String::compose ("%1/%2/%3", + wx_to_std (_country->GetStringSelection()), + wx_to_std (_cinema->GetStringSelection()), + zip + ) ); /* Work out the certificate file name inside the zip */ @@ -196,7 +202,7 @@ DolbyCertificatePanel::finish_download (wxStaticText* message) } string const cert = b[0] + "_" + b[1] + ".pem.crt"; - optional error = get_from_zip_url (file, cert, boost::bind (&DownloadCertificatePanel::load, this, _1)); + optional error = get_from_zip_url (file, cert, false, boost::bind (&DownloadCertificatePanel::load, this, _1)); if (error) { message->SetLabel (std_to_wx (error.get ())); } else { @@ -208,8 +214,7 @@ DolbyCertificatePanel::finish_download (wxStaticText* message) bool DolbyCertificatePanel::ready_to_download () const { - /* XXX */ - return false; + return _country->GetSelection() != -1 && _cinema->GetSelection() != -1 && _serial->GetSelection() != -1; } void diff --git a/src/wx/dolby_certificate_panel.h b/src/wx/dolby_certificate_panel.h index 1ac47ae76..c004a7717 100644 --- a/src/wx/dolby_certificate_panel.h +++ b/src/wx/dolby_certificate_panel.h @@ -38,6 +38,7 @@ private: void finish_country_selected (); void cinema_selected (); void finish_cinema_selected (); + std::string url (std::string path) const; std::list get_dir (std::string) const; wxChoice* _country; diff --git a/src/wx/doremi_certificate_panel.cc b/src/wx/doremi_certificate_panel.cc index 4d98b09ea..bdc0b0377 100644 --- a/src/wx/doremi_certificate_panel.cc +++ b/src/wx/doremi_certificate_panel.cc @@ -71,6 +71,7 @@ DoremiCertificatePanel::finish_download (string serial, wxStaticText* message) serial.substr(0, 3), serial ), String::compose ("dcp2000-%1.cert.sha256.pem", serial), + true, boost::bind (&DownloadCertificatePanel::load, this, _1) ); @@ -82,6 +83,7 @@ DoremiCertificatePanel::finish_download (string serial, wxStaticText* message) serial.substr(0, 3), serial ), String::compose ("dcp2000-%1.cert.sha256.pem", serial), + true, boost::bind (&DownloadCertificatePanel::load, this, _1) ); } @@ -94,6 +96,7 @@ DoremiCertificatePanel::finish_download (string serial, wxStaticText* message) serial.substr(0, 3), serial ), String::compose ("imb-%1.cert.sha256.pem", serial), + true, boost::bind (&DownloadCertificatePanel::load, this, _1) ); } @@ -106,6 +109,7 @@ DoremiCertificatePanel::finish_download (string serial, wxStaticText* message) serial.substr(0, 3), serial ), String::compose ("ims-%1.cert.sha256.pem", serial), + true, boost::bind (&DownloadCertificatePanel::load, this, _1) ); }