summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-12-02 10:29:29 +0000
committerCarl Hetherington <cth@carlh.net>2015-12-02 10:29:29 +0000
commitdcd6405bb3c54500b32cdc0c8ce652f5942e4c46 (patch)
tree1a9c02f3bfa755f2f19864cfb68bda59a2218ab9
parent99338666a8d502e7ddef374d762c6844e1c28941 (diff)
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).
-rw-r--r--ChangeLog2
-rw-r--r--src/lib/internet.cc14
-rw-r--r--src/lib/internet.h2
-rw-r--r--src/wx/dolby_certificate_panel.cc25
-rw-r--r--src/wx/dolby_certificate_panel.h1
-rw-r--r--src/wx/doremi_certificate_panel.cc4
6 files changed, 33 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 5b70592da..62b4a631a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
2015-12-02 Carl Hetherington <cth@carlh.net>
+ * Various fixes to certificate downloading.
+
* Version 2.5.13 released.
2015-12-02 Carl Hetherington <cth@carlh.net>
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<string>
-get_from_zip_url (string url, string file, function<void (boost::filesystem::path)> load)
+get_from_zip_url (string url, string file, bool pasv, function<void (boost::filesystem::path)> 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<void (boost::filesystem::pat
curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, get_from_zip_url_data);
curl_easy_setopt (curl, CURLOPT_WRITEDATA, f);
curl_easy_setopt (curl, CURLOPT_FTP_USE_EPSV, 0);
+ curl_easy_setopt (curl, CURLOPT_FTP_USE_EPRT, 0);
+ if (!pasv) {
+ curl_easy_setopt (curl, CURLOPT_FTPPORT, "-");
+ }
+
/* Maximum time is 20s */
curl_easy_setopt (curl, CURLOPT_TIMEOUT, 20);
@@ -99,7 +104,6 @@ get_from_zip_url (string url, string file, function<void (boost::filesystem::pat
return optional<string> ();
}
-
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<string>
@@ -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 <boost/function.hpp>
#include <boost/filesystem.hpp>
-boost::optional<std::string> get_from_zip_url (std::string url, std::string file, boost::function<void (boost::filesystem::path)> load);
+boost::optional<std::string> get_from_zip_url (std::string url, std::string file, bool pasv, boost::function<void (boost::filesystem::path)> load);
std::list<std::string> 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<string>
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<string> error = get_from_zip_url (file, cert, boost::bind (&DownloadCertificatePanel::load, this, _1));
+ optional<string> 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<std::string> 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)
);
}