diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-12-02 10:29:29 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-12-02 10:29:29 +0000 |
| commit | dcd6405bb3c54500b32cdc0c8ce652f5942e4c46 (patch) | |
| tree | 1a9c02f3bfa755f2f19864cfb68bda59a2218ab9 /src/lib | |
| parent | 99338666a8d502e7ddef374d762c6844e1c28941 (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).
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/internet.cc | 14 | ||||
| -rw-r--r-- | src/lib/internet.h | 2 |
2 files changed, 11 insertions, 5 deletions
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); |
