chiark / gitweb /
import: support downloading bzip2-encoded images
[elogind.git] / src / import / import-job.h
index 843daa217cacb39f041f84b49287a2b57d836ce2..b10b0ec0d9d767f2c659f3f0278e2d2d394cdd26 100644 (file)
@@ -23,6 +23,8 @@
 
 #include <lzma.h>
 #include <zlib.h>
+#include <bzlib.h>
+#include <gcrypt.h>
 
 #include "macro.h"
 #include "curl-util.h"
@@ -42,10 +44,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;
@@ -66,6 +71,7 @@ struct ImportJob {
 
         char *etag;
         char **old_etags;
+        bool etag_exists;
 
         uint64_t content_length;
         uint64_t written_compressed;
@@ -85,12 +91,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 +111,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);