Don't say 'certificate downloaded' if it failed during the read part.
[dcpomatic.git] / src / lib / internet.cc
index 4eba1efa3ada8762fc80a60ec684fa032c23ca6c..8721c1b73792254b705452e532172aa3d9f98a91 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2014-2015 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2014-2019 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
@@ -48,7 +48,7 @@ get_from_url_data (void* buffer, size_t size, size_t nmemb, void* stream)
 }
 
 optional<string>
-get_from_url (string url, bool pasv, ScopedTemporary& temp)
+get_from_url (string url, bool pasv, bool skip_pasv_ip, ScopedTemporary& temp)
 {
        CURL* curl = curl_easy_init ();
        curl_easy_setopt (curl, CURLOPT_URL, url.c_str());
@@ -58,6 +58,9 @@ get_from_url (string url, bool pasv, ScopedTemporary& temp)
        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 (skip_pasv_ip) {
+               curl_easy_setopt (curl, CURLOPT_FTP_SKIP_PASV_IP, 1);
+       }
        if (!pasv) {
                curl_easy_setopt (curl, CURLOPT_FTPPORT, "-");
        }
@@ -76,28 +79,29 @@ get_from_url (string url, bool pasv, ScopedTemporary& temp)
        return optional<string>();
 }
 
+
 optional<string>
-get_from_url (string url, bool pasv, function<void (boost::filesystem::path)> load)
+get_from_url (string url, bool pasv, bool skip_pasv_ip, function<optional<string> (boost::filesystem::path)> load)
 {
        ScopedTemporary temp;
-       optional<string> e = get_from_url (url, pasv, temp);
+       optional<string> e = get_from_url (url, pasv, skip_pasv_ip, temp);
        if (e) {
                return e;
        }
-       load (temp.file());
-       return optional<string>();
+       return load (temp.file());
 }
 
+
 /** @param url URL of ZIP file.
  *  @param file Filename within ZIP file.
  *  @param load Function passed a (temporary) filesystem path of the unpacked file.
  */
 optional<string>
-get_from_zip_url (string url, string file, bool pasv, function<void (boost::filesystem::path)> load)
+get_from_zip_url (string url, string file, bool pasv, bool skip_pasv_ip, function<optional<string> (boost::filesystem::path)> load)
 {
        /* Download the ZIP file to temp_zip */
        ScopedTemporary temp_zip;
-       optional<string> e = get_from_url (url, pasv, temp_zip);
+       optional<string> e = get_from_url (url, pasv, skip_pasv_ip, temp_zip);
        if (e) {
                return e;
        }
@@ -150,6 +154,5 @@ get_from_zip_url (string url, string file, bool pasv, function<void (boost::file
        zip_close (zip);
        temp_cert.close ();
 
-       load (temp_cert.file ());
-       return optional<string> ();
+       return load (temp_cert.file());
 }