X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=src%2Fimport%2Fimport-job.c;h=809486500ba55cf6d6b045e5b1fda78956560d3f;hb=4d858e7d9f39038713f760d7acc64acf7bba2aa7;hp=337a5c5a22326f71eeccedf6e7db1e2a0c1ae002;hpb=8af3cf74df03f7528f9e2605ec7896a5daf0f711;p=elogind.git diff --git a/src/import/import-job.c b/src/import/import-job.c index 337a5c5a2..809486500 100644 --- a/src/import/import-job.c +++ b/src/import/import-job.c @@ -63,6 +63,7 @@ static void import_job_finish(ImportJob *j, int ret) { if (ret == 0) { j->state = IMPORT_JOB_DONE; + j->progress_percent = 100; log_info("Download of %s complete.", j->url); } else { j->state = IMPORT_JOB_FAILED; @@ -573,6 +574,12 @@ static size_t import_job_header_callback(void *contents, size_t size, size_t nme return sz; } + if (j->on_header) { + r = j->on_header(j, contents, sz); + if (r < 0) + goto fail; + } + return sz; fail: @@ -615,6 +622,9 @@ static int import_job_progress_callback(void *userdata, curl_off_t dltotal, curl j->progress_percent = percent; j->last_status_usec = n; + + if (j->on_progress) + j->on_progress(j); } return 0; @@ -672,10 +682,22 @@ int import_job_begin(ImportJob *j) { if (!hdr) return -ENOMEM; - j->request_header = curl_slist_new(hdr, NULL); - if (!j->request_header) - return -ENOMEM; + if (!j->request_header) { + j->request_header = curl_slist_new(hdr, NULL); + if (!j->request_header) + return -ENOMEM; + } else { + struct curl_slist *l; + + l = curl_slist_append(j->request_header, hdr); + if (!l) + return -ENOMEM; + + j->request_header = l; + } + } + if (j->request_header) { if (curl_easy_setopt(j->curl, CURLOPT_HTTPHEADER, j->request_header) != CURLE_OK) return -EIO; }