X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fimport%2Fimport-job.h;h=dcf89cb28c45314a92879b4df88ef546770e1405;hb=6cb8e687f038424ef54b5c5c3c433be974fbe371;hp=843daa217cacb39f041f84b49287a2b57d836ce2;hpb=56ebfaf1ca185a93ffb372b6e1a1fa3a957d93cd;p=elogind.git diff --git a/src/import/import-job.h b/src/import/import-job.h index 843daa217..dcf89cb28 100644 --- a/src/import/import-job.h +++ b/src/import/import-job.h @@ -23,6 +23,8 @@ #include #include +#include +#include #include "macro.h" #include "curl-util.h" @@ -31,6 +33,8 @@ typedef struct ImportJob ImportJob; typedef void (*ImportJobFinished)(ImportJob *job); typedef int (*ImportJobOpenDisk)(ImportJob *job); +typedef int (*ImportJobHeader)(ImportJob *job, const char *header, size_t sz); +typedef void (*ImportJobProgress)(ImportJob *job); typedef enum ImportJobState { IMPORT_JOB_INIT, @@ -42,10 +46,13 @@ typedef enum ImportJobState { _IMPORT_JOB_STATE_INVALID = -1, } ImportJobState; +#define IMPORT_JOB_STATE_IS_COMPLETE(j) (IN_SET((j)->state, IMPORT_JOB_DONE, IMPORT_JOB_FAILED)) + typedef enum ImportJobCompression { IMPORT_JOB_UNCOMPRESSED, IMPORT_JOB_XZ, IMPORT_JOB_GZIP, + IMPORT_JOB_BZIP2, _IMPORT_JOB_COMPRESSION_MAX, _IMPORT_JOB_COMPRESSION_INVALID = -1, } ImportJobCompression; @@ -59,6 +66,8 @@ struct ImportJob { void *userdata; ImportJobFinished on_finished; ImportJobOpenDisk on_open_disk; + ImportJobHeader on_header; + ImportJobProgress on_progress; CurlGlue *glue; CURL *curl; @@ -66,6 +75,7 @@ struct ImportJob { char *etag; char **old_etags; + bool etag_exists; uint64_t content_length; uint64_t written_compressed; @@ -85,12 +95,18 @@ struct ImportJob { ImportJobCompression compressed; lzma_stream xz; z_stream gzip; + bz_stream bzip2; unsigned progress_percent; usec_t start_usec; usec_t last_status_usec; bool allow_sparse; + + bool calc_checksum; + gcry_md_hd_t checksum_context; + + char *checksum; }; int import_job_new(ImportJob **job, const char *url, CurlGlue *glue, void *userdata); @@ -99,3 +115,5 @@ ImportJob* import_job_unref(ImportJob *job); int import_job_begin(ImportJob *j); void import_job_curl_on_finished(CurlGlue *g, CURL *curl, CURLcode result); + +DEFINE_TRIVIAL_CLEANUP_FUNC(ImportJob*, import_job_unref);