From: Michael Tremer Date: Thu, 19 Oct 2023 10:21:14 +0000 (+0000) Subject: downloader: transfer: Add a place to store headers X-Git-Tag: 0.9.30~1447 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c764b63558f7bb6e4abbe72c44c3ed60eb54db6;p=pakfire.git downloader: transfer: Add a place to store headers Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/downloader.c b/src/libpakfire/downloader.c index b1c920931..1b8e309e6 100644 --- a/src/libpakfire/downloader.c +++ b/src/libpakfire/downloader.c @@ -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);