// Download the file if it does not exist in the cache
if (access(cache_path, R_OK) != 0) {
r = pakfire_downloader_retrieve(downloader, BASEURL, mirrorlist,
- NULL, filename, cache_path, 0);
+ NULL, filename, cache_path, PAKFIRE_DOWNLOADER_MD_NONE, 0);
if (r)
return r;
}
static struct pakfire_transfer* pakfire_downloader_create_transfer(
struct pakfire_downloader* downloader, const char* baseurl, struct pakfire_mirrorlist* mirrors,
- const char* title, const char* url, const char* path, enum pakfire_transfer_flags flags) {
+ const char* title, const char* url, const char* path,
+ enum pakfire_downloader_message_digest md, enum pakfire_transfer_flags flags) {
struct pakfire_config* config = NULL;
DEBUG(downloader->pakfire, "Adding download of %s\n", url);
transfer->flags = flags;
// Set message digest
- transfer->md = EVP_sha512();
+ switch (md) {
+ case PAKFIRE_DOWNLOADER_MD_SHA512:
+ transfer->md = EVP_sha512();
+ break;
+
+ case PAKFIRE_DOWNLOADER_MD_SHA256:
+ transfer->md = EVP_sha256();
+ break;
+
+ case PAKFIRE_DOWNLOADER_MD_SHA1:
+ transfer->md = EVP_sha1();
+ break;
+
+ case PAKFIRE_DOWNLOADER_MD_NONE:
+ break;
+ }
// Allocate handle
transfer->handle = curl_easy_init();
int pakfire_downloader_add_transfer(struct pakfire_downloader* downloader,
const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title,
- const char* url, const char* path, enum pakfire_transfer_flags flags) {
+ const char* url, const char* path, enum pakfire_downloader_message_digest md,
+ enum pakfire_transfer_flags flags) {
struct pakfire_transfer* transfer = pakfire_downloader_create_transfer(
- downloader, baseurl, mirrors, title, url, path, flags);
+ downloader, baseurl, mirrors, title, url, path, md, flags);
if (!transfer)
return 1;
int pakfire_downloader_retrieve(struct pakfire_downloader* downloader,
const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title,
- const char* url, const char* path, enum pakfire_transfer_flags flags) {
+ const char* url, const char* path, enum pakfire_downloader_message_digest md,
+ enum pakfire_transfer_flags flags) {
struct pakfire_transfer* transfer = pakfire_downloader_create_transfer(
- downloader, baseurl, mirrors, title, url, path, flags);
+ downloader, baseurl, mirrors, title, url, path, md, flags);
if (!transfer)
return 1;
PAKFIRE_TRANSFER_NOTEMP = (1 << 1),
};
+enum pakfire_downloader_message_digest {
+ PAKFIRE_DOWNLOADER_MD_NONE = 0,
+ PAKFIRE_DOWNLOADER_MD_SHA1,
+ PAKFIRE_DOWNLOADER_MD_SHA256,
+ PAKFIRE_DOWNLOADER_MD_SHA512,
+};
+
int pakfire_downloader_create(struct pakfire_downloader** downloader, struct pakfire* pakfire);
struct pakfire_downloader* pakfire_downloader_ref(struct pakfire_downloader* downloader);
int pakfire_downloader_retrieve(struct pakfire_downloader* downloader,
const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title,
- const char* url, const char* path, enum pakfire_transfer_flags flags);
+ const char* url, const char* path, enum pakfire_downloader_message_digest md,
+ enum pakfire_transfer_flags flags);
int pakfire_downloader_add_transfer(struct pakfire_downloader* downloader,
const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title,
- const char* url, const char* path, enum pakfire_transfer_flags flags);
+ const char* url, const char* path, enum pakfire_downloader_message_digest md,
+ enum pakfire_transfer_flags flags);
int pakfire_downloader_run(struct pakfire_downloader* downloader);
}
static int pakfire_repo_retrieve(struct pakfire_repo* repo, const char* title,
- const char* url, const char* path, enum pakfire_transfer_flags flags) {
+ const char* url, const char* path, enum pakfire_downloader_message_digest md,
+ enum pakfire_transfer_flags flags) {
struct pakfire_downloader* downloader;
int r = pakfire_downloader_create(&downloader, repo->pakfire);
if (r)
// Retrieve the database file
r = pakfire_downloader_retrieve(downloader, repo->appdata->baseurl, mirrorlist,
- title, url, path, flags);
+ title, url, path, md, flags);
if (mirrorlist)
pakfire_mirrorlist_unref(mirrorlist);
// Try to download the key
int r = pakfire_repo_retrieve(repo, NULL, url, path,
- PAKFIRE_TRANSFER_NOTEMP|PAKFIRE_TRANSFER_NOPROGRESS);
+ PAKFIRE_DOWNLOADER_MD_NONE, PAKFIRE_TRANSFER_NOTEMP|PAKFIRE_TRANSFER_NOPROGRESS);
if (r)
goto ERROR;
// Make download URL
pakfire_string_format(database_url, "repodata/%s", database);
- return pakfire_repo_retrieve(repo, title, database_url, cache_path, 0);
+ return pakfire_repo_retrieve(repo, title, database_url, cache_path,
+ PAKFIRE_DOWNLOADER_MD_NONE, 0);
}
static int pakfire_repo_read_metadata(struct pakfire_repo* repo, const char* path, int refresh) {
}
return pakfire_repo_retrieve(repo, NULL,
- repo->appdata->mirrorlist_url, repo->appdata->mirrorlist, PAKFIRE_TRANSFER_NOPROGRESS);
+ repo->appdata->mirrorlist_url, repo->appdata->mirrorlist,
+ PAKFIRE_DOWNLOADER_MD_NONE, PAKFIRE_TRANSFER_NOPROGRESS);
}
static int pakfire_repo_refresh_metadata(struct pakfire_repo* repo, const int force) {
}
int r = pakfire_repo_retrieve(repo, NULL,
- "repodata/repomd.json", repo->appdata->metadata, PAKFIRE_TRANSFER_NOPROGRESS);
+ "repodata/repomd.json", repo->appdata->metadata, PAKFIRE_DOWNLOADER_MD_NONE,
+ PAKFIRE_TRANSFER_NOPROGRESS);
if (r)
return r;
// Download the file
r = pakfire_downloader_retrieve(downloader, NULL, NULL, NULL,
- url, path, PAKFIRE_TRANSFER_NOTEMP);
+ url, path, PAKFIRE_DOWNLOADER_MD_NONE, PAKFIRE_TRANSFER_NOTEMP);
if (r)
goto ERROR;
// Add transfer to downloader
r = pakfire_downloader_add_transfer(downloader, baseurl, mirrorlist,
- nevra, filename, path, 0);
+ nevra, filename, path, PAKFIRE_DOWNLOADER_MD_NONE, 0);
ERROR:
if (mirrorlist)