Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */ 2 : : #pragma once 3 : : 4 : : #include <gcrypt.h> 5 : : 6 : : #include "curl-util.h" 7 : : #include "import-compress.h" 8 : : #include "macro.h" 9 : : 10 : : typedef struct PullJob PullJob; 11 : : 12 : : typedef void (*PullJobFinished)(PullJob *job); 13 : : typedef int (*PullJobOpenDisk)(PullJob *job); 14 : : typedef int (*PullJobHeader)(PullJob *job, const char *header, size_t sz); 15 : : typedef void (*PullJobProgress)(PullJob *job); 16 : : 17 : : typedef enum PullJobState { 18 : : PULL_JOB_INIT, 19 : : PULL_JOB_ANALYZING, /* Still reading into ->payload, to figure out what we have */ 20 : : PULL_JOB_RUNNING, /* Writing to destination */ 21 : : PULL_JOB_DONE, 22 : : PULL_JOB_FAILED, 23 : : _PULL_JOB_STATE_MAX, 24 : : _PULL_JOB_STATE_INVALID = -1, 25 : : } PullJobState; 26 : : 27 : : typedef enum VerificationStyle { 28 : : VERIFICATION_STYLE_UNSET, 29 : : VERIFICATION_PER_FILE, /* SuSE-style ".sha256" files with inline signature */ 30 : : VERIFICATION_PER_DIRECTORY, /* Ubuntu-style SHA256SUM files with detach SHA256SUM.gpg signatures */ 31 : : } VerificationStyle; 32 : : 33 : : #define PULL_JOB_IS_COMPLETE(j) (IN_SET((j)->state, PULL_JOB_DONE, PULL_JOB_FAILED)) 34 : : 35 : : struct PullJob { 36 : : PullJobState state; 37 : : int error; 38 : : 39 : : char *url; 40 : : 41 : : void *userdata; 42 : : PullJobFinished on_finished; 43 : : PullJobOpenDisk on_open_disk; 44 : : PullJobHeader on_header; 45 : : PullJobProgress on_progress; 46 : : 47 : : CurlGlue *glue; 48 : : CURL *curl; 49 : : struct curl_slist *request_header; 50 : : 51 : : char *etag; 52 : : char **old_etags; 53 : : bool etag_exists; 54 : : 55 : : uint64_t content_length; 56 : : uint64_t written_compressed; 57 : : uint64_t written_uncompressed; 58 : : 59 : : uint64_t uncompressed_max; 60 : : uint64_t compressed_max; 61 : : 62 : : uint8_t *payload; 63 : : size_t payload_size; 64 : : size_t payload_allocated; 65 : : 66 : : int disk_fd; 67 : : 68 : : usec_t mtime; 69 : : 70 : : ImportCompress compress; 71 : : 72 : : unsigned progress_percent; 73 : : usec_t start_usec; 74 : : usec_t last_status_usec; 75 : : 76 : : bool allow_sparse; 77 : : 78 : : bool calc_checksum; 79 : : gcry_md_hd_t checksum_context; 80 : : 81 : : char *checksum; 82 : : 83 : : VerificationStyle style; 84 : : }; 85 : : 86 : : int pull_job_new(PullJob **job, const char *url, CurlGlue *glue, void *userdata); 87 : : PullJob* pull_job_unref(PullJob *job); 88 : : 89 : : int pull_job_begin(PullJob *j); 90 : : 91 : : void pull_job_curl_on_finished(CurlGlue *g, CURL *curl, CURLcode result); 92 : : 93 [ # # ]: 0 : DEFINE_TRIVIAL_CLEANUP_FUNC(PullJob*, pull_job_unref);