]> git.ipfire.org Git - pakfire.git/commitdiff
downloader: transfer: Add a place to store headers
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 19 Oct 2023 10:21:14 +0000 (10:21 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 19 Oct 2023 10:21:14 +0000 (10:21 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/downloader.c

index b1c9209310f479e52ad42b450bb1e52e62129581..1b8e309e68d6b374223c1e8255b87e2bb5e30d9e 100644 (file)
@@ -58,6 +58,9 @@ struct pakfire_transfer {
        // cURL handle
        CURL* handle;
 
+       // Headers
+       struct curl_slist* headers;
+
        // URL
        CURLU* fullurl;
 
@@ -173,6 +176,8 @@ static void pakfire_downloader_transfer_free(struct pakfire_transfer* transfer)
        if (transfer->evp)
                EVP_MD_CTX_free(transfer->evp);
 
+       if (transfer->headers)
+               curl_slist_free_all(transfer->headers);
        if (transfer->mime)
                curl_mime_free(transfer->mime);
        if (transfer->fullurl)
@@ -1122,22 +1127,6 @@ static int pakfire_downloader_transfer_prepare(struct pakfire_downloader* downlo
        // Increment tries
        transfer->tries++;
 
-       // Compose the URL
-       r = pakfire_downloader_transfer_prepare_url(downloader, transfer);
-       if (r) {
-               CTX_ERROR(transfer->ctx, "Could not compose URL: %m\n");
-               return r;
-       }
-
-       // Add any payload
-       if (transfer->mime) {
-               r = curl_easy_setopt(transfer->handle, CURLOPT_MIMEPOST, transfer->mime);
-               if (r) {
-                       CTX_ERROR(transfer->ctx, "Could not set POST payload: %s\n", curl_easy_strerror(r));
-                       return r;
-               }
-       }
-
        // Set special options for direction
        switch (transfer->direction) {
                case PAKFIRE_TRANSFER_DOWNLOAD:
@@ -1163,6 +1152,31 @@ static int pakfire_downloader_transfer_prepare(struct pakfire_downloader* downlo
                        break;
        }
 
+       // Compose the URL
+       r = pakfire_downloader_transfer_prepare_url(downloader, transfer);
+       if (r) {
+               CTX_ERROR(transfer->ctx, "Could not compose URL: %m\n");
+               return r;
+       }
+
+       // Add any headers
+       if (transfer->headers) {
+               r = curl_easy_setopt(transfer->handle, CURLOPT_HTTPHEADER, transfer->headers);
+               if (r) {
+                       CTX_ERROR(transfer->ctx, "Could not set headers: %s\n", curl_easy_strerror(r));
+                       return r;
+               }
+       }
+
+       // Add any payload
+       if (transfer->mime) {
+               r = curl_easy_setopt(transfer->handle, CURLOPT_MIMEPOST, transfer->mime);
+               if (r) {
+                       CTX_ERROR(transfer->ctx, "Could not set POST payload: %s\n", curl_easy_strerror(r));
+                       return r;
+               }
+       }
+
        // If we do not have an output file, we will create a temporary file
        if (!transfer->f) {
                r = pakfire_downloader_transfer_prepare_tmpfile(transfer);