X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Finternet.cc;h=a9c30611df49d89f065cd04ee525f1b2bdf3ab72;hb=ff639b3cf30afcc097bfd21d39c8d15f466cadd6;hp=ca72399f3f547076bafcceb707dfa7f7e44d70e2;hpb=8963f0007af1a312017b9627c18b82ec2a577591;p=dcpomatic.git diff --git a/src/lib/internet.cc b/src/lib/internet.cc index ca72399f3..a9c30611d 100644 --- a/src/lib/internet.cc +++ b/src/lib/internet.cc @@ -19,11 +19,12 @@ */ -#include "scoped_temporary.h" #include "compose.hpp" -#include "exceptions.h" #include "cross.h" +#include "exceptions.h" +#include "scoped_temporary.h" #include "util.h" +#include #include #include #include @@ -37,8 +38,8 @@ using std::function; using std::list; using std::string; -using boost::optional; using boost::algorithm::trim; +using boost::optional; static size_t @@ -66,7 +67,7 @@ ls_url (string url) auto const cr = curl_easy_perform (curl); if (cr != CURLE_OK) { - return list(); + return {}; } list result; @@ -98,9 +99,9 @@ get_from_url (string url, bool pasv, bool skip_pasv_ip, ScopedTemporary& temp) auto curl = curl_easy_init (); curl_easy_setopt (curl, CURLOPT_URL, url.c_str()); - auto f = temp.open ("wb"); + auto& f = temp.open ("wb"); curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, get_from_url_data); - curl_easy_setopt (curl, CURLOPT_WRITEDATA, f); + curl_easy_setopt (curl, CURLOPT_WRITEDATA, f.get()); curl_easy_setopt (curl, CURLOPT_FTP_USE_EPSV, 0); curl_easy_setopt (curl, CURLOPT_FTP_USE_EPRT, 0); if (skip_pasv_ip) { @@ -113,27 +114,27 @@ get_from_url (string url, bool pasv, bool skip_pasv_ip, ScopedTemporary& temp) /* Maximum time is 20s */ curl_easy_setopt (curl, CURLOPT_TIMEOUT, 20); - CURLcode const cr = curl_easy_perform (curl); + auto const cr = curl_easy_perform (curl); - temp.close (); + f.close(); curl_easy_cleanup (curl); if (cr != CURLE_OK) { return String::compose (_("Download failed (%1 error %2)"), url, (int) cr); } - return optional(); + return {}; } optional -get_from_url (string url, bool pasv, bool skip_pasv_ip, function (boost::filesystem::path)> load) +get_from_url (string url, bool pasv, bool skip_pasv_ip, function (boost::filesystem::path, string)> load) { ScopedTemporary temp; auto e = get_from_url (url, pasv, skip_pasv_ip, temp); if (e) { return e; } - return load (temp.file()); + return load (temp.path(), url); } @@ -142,7 +143,7 @@ get_from_url (string url, bool pasv, bool skip_pasv_ip, function -get_from_zip_url (string url, string file, bool pasv, bool skip_pasv_ip, function (boost::filesystem::path)> load) +get_from_zip_url (string url, string file, bool pasv, bool skip_pasv_ip, function (boost::filesystem::path, string)> load) { /* Download the ZIP file to temp_zip */ ScopedTemporary temp_zip; @@ -159,14 +160,14 @@ get_from_zip_url (string url, string file, bool pasv, bool skip_pasv_ip, functio Centos 6, Centos 7, Debian 7 and Debian 8. */ - auto zip_file = fopen_boost (temp_zip.file (), "rb"); + auto& zip_file = temp_zip.open("rb"); if (!zip_file) { - return optional (_("Could not open downloaded ZIP file")); + return string(_("Could not open downloaded ZIP file")); } - auto zip_source = zip_source_filep_create (zip_file, 0, -1, 0); + auto zip_source = zip_source_filep_create (zip_file.take(), 0, -1, 0); if (!zip_source) { - return optional (_("Could not open downloaded ZIP file")); + return string(_("Could not open downloaded ZIP file")); } zip_error_t error; @@ -182,22 +183,22 @@ get_from_zip_url (string url, string file, bool pasv, bool skip_pasv_ip, functio struct zip_file* file_in_zip = zip_fopen (zip, file.c_str(), 0); if (!file_in_zip) { - return optional (_("Unexpected ZIP file contents")); + return string(_("Unexpected ZIP file contents")); } ScopedTemporary temp_cert; - auto f = temp_cert.open ("wb"); + auto& f = temp_cert.open ("wb"); char buffer[4096]; while (true) { int const N = zip_fread (file_in_zip, buffer, sizeof (buffer)); - checked_fwrite (buffer, N, f, temp_cert.file()); + f.checked_write(buffer, N); if (N < int (sizeof (buffer))) { break; } } zip_fclose (file_in_zip); zip_close (zip); - temp_cert.close (); + f.close (); - return load (temp_cert.file()); + return load (temp_cert.path(), url); }