-
- token = dkr_import_name_get_token(name);
- if (token)
- t = strappenda("Authorization: Token ", token);
- else
- t = HEADER_TOKEN " true";
-
- j->request_header = curl_slist_new("Accept: application/json", t, NULL);
- if (!j->request_header)
- return -ENOMEM;
-
- if (curl_easy_setopt(j->curl, CURLOPT_HTTPHEADER, j->request_header) != CURLE_OK)
- return -EIO;
-
- if (curl_easy_setopt(j->curl, CURLOPT_WRITEFUNCTION, dkr_import_job_write_callback) != CURLE_OK)
- return -EIO;
-
- if (curl_easy_setopt(j->curl, CURLOPT_WRITEDATA, j) != CURLE_OK)
- return -EIO;
-
- if (curl_easy_setopt(j->curl, CURLOPT_HEADERFUNCTION, dkr_import_job_header_callback) != CURLE_OK)
- return -EIO;
-
- if (curl_easy_setopt(j->curl, CURLOPT_HEADERDATA, j) != CURLE_OK)
- return -EIO;
-
- r = curl_glue_add(name->import->glue, j->curl);
- if (r < 0)
- return r;
-
- r = hashmap_put(name->import->jobs, j->url, j);
- if (r < 0)
- return r;
-
- r = set_put(j->needed_by, name);
- if (r < 0) {
- hashmap_remove(name->import->jobs, url);
- return r;
- }
-
- *ret = j;
- j = NULL;
-
- return 1;
-}
-
-static int dkr_import_name_begin(DkrImportName *name) {
- const char *url;
-
- assert(name);
- assert(!name->job_images);
-
- url = strappenda(name->import->index_url, "/v1/repositories/", name->name, "/images");
-
- return dkr_import_name_add_job(name, DKR_IMPORT_JOB_IMAGES, url, &name->job_images);
-}
-
-int dkr_import_new(
- DkrImport **import,
- sd_event *event,
- const char *index_url,
- const char *image_root,
- dkr_import_on_finished on_finished,
- void *userdata) {
-
- _cleanup_(dkr_import_unrefp) DkrImport *i = NULL;
- char *e;
- int r;
-
- assert(import);
- assert(dkr_url_is_valid(index_url));
- assert(image_root);
-
- i = new0(DkrImport, 1);
- if (!i)
- return -ENOMEM;
-
- i->on_finished = on_finished;
- i->userdata = userdata;
-
- i->index_url = strdup(index_url);
- if (!i->index_url)
- return -ENOMEM;
-
- i->image_root = strdup(image_root);
- if (!i->image_root)
- return -ENOMEM;
-
- e = endswith(i->index_url, "/");
- if (e)
- *e = 0;
-
- if (event)
- i->event = sd_event_ref(event);
- else {
- r = sd_event_default(&i->event);
- if (r < 0)
- return r;
- }
-
- r = curl_glue_new(&i->glue, i->event);