#include <pakfire/types.h>
#include <pakfire/util.h>
+// XXX for now
+#define BASEURL "https://source.ipfire.org/source-3.x/"
+
#define PAKFIRE_MACROS_DIR "/usr/lib/pakfire/macros"
#define PAKFIRE_MACROS_GLOB_PATTERN PAKFIRE_MACROS_DIR "/*.macro"
return r;
}
- // Set base URL (XXX)
- pakfire_downloader_set_baseurl(*downloader, "https://source.ipfire.org/source-3.x/");
-
// Fetch source_dl
char** source_dls = pakfire_parser_get_split(makefile, NULL, "source_dl", ' ');
// Download the file if it does not exist in the cache
if (access(cache_path, R_OK) != 0) {
- r = pakfire_downloader_retrieve(downloader, mirrorlist, filename, cache_path);
+ r = pakfire_downloader_retrieve(downloader, BASEURL, mirrorlist, filename, cache_path);
if (r)
return r;
}
FILE* f;
// Mirrors
+ char baseurl[PATH_MAX];
struct pakfire_mirrorlist* mirrors;
struct pakfire_mirror* mirror;
};
// cURL multi handle
CURLM* curl;
TAILQ_HEAD(transfers, pakfire_transfer) transfers;
-
- // Mirror stuff
- char baseurl[PATH_MAX];
};
static int pakfire_url_is_absolute(const char* url) {
return NULL;
}
-const char* pakfire_downloader_get_baseurl(struct pakfire_downloader* downloader) {
- return downloader->baseurl;
-}
-
-void pakfire_downloader_set_baseurl(
- struct pakfire_downloader* downloader, const char* baseurl) {
- snprintf(downloader->baseurl, sizeof(downloader->baseurl) - 1, "%s", baseurl);
-}
-
#ifdef ENABLE_DEBUG
static int debug_callback(CURL *handle, curl_infotype type,
char* data, size_t size, void* private) {
#endif
static struct pakfire_transfer* pakfire_downloader_create_transfer(
- struct pakfire_downloader* downloader, struct pakfire_mirrorlist* mirrors,
+ struct pakfire_downloader* downloader, const char* baseurl, struct pakfire_mirrorlist* mirrors,
const char* url, const char* path) {
DEBUG(downloader->pakfire, "Adding download of %s\n", url);
+ // Reset baseurl it points to an empty string
+ if (baseurl && !*baseurl)
+ baseurl = NULL;
+
// Do not allow relative URLs when no mirrors are set
- if (!pakfire_url_is_absolute(url) && !(mirrors || *downloader->baseurl)) {
- ERROR(downloader->pakfire, "Relative URLs cannot be used without a mirrorlist\n");
+ if (!pakfire_url_is_absolute(url) && !(mirrors || baseurl)) {
+ ERROR(downloader->pakfire, "Relative URLs cannot be used without a baseurl and/or mirrorlist\n");
errno = EINVAL;
return NULL;
}
// Copy path
pakfire_string_set(transfer->path, path);
+ // Copy baseurl
+ if (baseurl)
+ pakfire_string_set(transfer->baseurl, baseurl);
+
// Keep a reference to the mirrorlist
if (mirrors)
transfer->mirrors = pakfire_mirrorlist_ref(mirrors);
}
int pakfire_downloader_add_transfer(struct pakfire_downloader* downloader,
- struct pakfire_mirrorlist* mirrors, const char* url, const char* path) {
+ const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* url, const char* path) {
struct pakfire_transfer* transfer = pakfire_downloader_create_transfer(
- downloader, mirrors, url, path);
+ downloader, baseurl, mirrors, url, path);
if (!transfer)
return 1;
free(url);
// Use baseurl
- } else if (*downloader->baseurl) {
- char* url = pakfire_url_join(downloader->baseurl, transfer->url);
+ } else if (*transfer->baseurl) {
+ char* url = pakfire_url_join(transfer->baseurl, transfer->url);
if (!url) {
ERROR(downloader->pakfire, "Error composing download URL: %s\n",
strerror(errno));
}
int pakfire_downloader_retrieve(struct pakfire_downloader* downloader,
- struct pakfire_mirrorlist* mirrors, const char* url, const char* path) {
+ const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* url, const char* path) {
struct pakfire_transfer* transfer = pakfire_downloader_create_transfer(
- downloader, mirrors, url, path);
+ downloader, baseurl, mirrors, url, path);
if (!transfer)
return 1;
struct pakfire_downloader* pakfire_downloader_ref(struct pakfire_downloader* downloader);
struct pakfire_downloader* pakfire_downloader_unref(struct pakfire_downloader* downloader);
-const char* pakfire_downloader_get_baseurl(struct pakfire_downloader* downloader);
-void pakfire_downloader_set_baseurl(struct pakfire_downloader* downloader, const char* baseurl);
-
int pakfire_downloader_retrieve(struct pakfire_downloader* downloader,
- struct pakfire_mirrorlist* mirrors, const char* url, const char* path);
+ const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* url, const char* path);
int pakfire_downloader_add_transfer(struct pakfire_downloader* downloader,
- struct pakfire_mirrorlist* mirrors, const char* url, const char* path);
+ const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* url, const char* path);
int pakfire_downloader_run(struct pakfire_downloader* downloader);
int r = pakfire_downloader_create(&repo->downloader, repo->pakfire);
if (r)
return NULL;
-
- // Set baseurl
- if (repo->appdata->baseurl)
- pakfire_downloader_set_baseurl(repo->downloader, repo->appdata->baseurl);
}
return pakfire_downloader_ref(repo->downloader);
mirrorlist = pakfire_repo_get_mirrorlist(repo);
// Retrieve the database file
- r = pakfire_downloader_retrieve(downloader, mirrorlist, url, path);
+ r = pakfire_downloader_retrieve(downloader, repo->appdata->baseurl, mirrorlist, url, path);
ERROR:
if (downloader)
DEBUG(repo->pakfire, "Using package database %s\n", database_filename);
}
-
// Try loading the database
if (*database_filename) {
pakfire_make_cache_path(repo->pakfire, database_cache_path,