// The number of concurrent downloads
#define DEFAULT_MAX_PARALLEL 4
-struct pakfire_httpclient_xfer {
+typedef struct pakfire_httpclient_xfer {
TAILQ_ENTRY(pakfire_httpclient_xfer) nodes;
struct pakfire_xfer* xfer;
PAKFIRE_XFER_RUNNING,
PAKFIRE_XFER_FINISHED,
} status;
-};
+} pakfire_httpclient_xfer;
struct pakfire_httpclient {
pakfire_ctx* ctx;
unsigned int total_downloadsize;
};
-static int pakfire_httpclient_has_flag(struct pakfire_httpclient* self, int flags) {
+static int pakfire_httpclient_has_flag(pakfire_httpclient* self, int flags) {
return self->flags & flags;
}
static int pakfire_httpclient_xfer_create(
- struct pakfire_httpclient_xfer** x, struct pakfire_xfer* xfer) {
- struct pakfire_httpclient_xfer* e = NULL;
+ pakfire_httpclient_xfer** x, struct pakfire_xfer* xfer) {
+ pakfire_httpclient_xfer* e = NULL;
// Allocate some space
e = calloc(1, sizeof(*e));
return 0;
}
-static void pakfire_httpclient_xfer_free(struct pakfire_httpclient_xfer* x) {
+static void pakfire_httpclient_xfer_free(pakfire_httpclient_xfer* x) {
if (x->xfer)
pakfire_xfer_unref(x->xfer);
free(x);
}
static size_t pakfire_httpclient_count_xfers(
- struct pakfire_httpclient* self, const enum pakfire_httpclient_xfer_status status) {
- struct pakfire_httpclient_xfer* e = NULL;
+ pakfire_httpclient* self, const enum pakfire_httpclient_xfer_status status) {
+ pakfire_httpclient_xfer* e = NULL;
size_t counter = 0;
TAILQ_FOREACH(e, &self->xfers, nodes) {
return counter;
}
-static size_t pakfire_httpclient_num_running_xfers(struct pakfire_httpclient* self) {
+static size_t pakfire_httpclient_num_running_xfers(pakfire_httpclient* self) {
return pakfire_httpclient_count_xfers(self, PAKFIRE_XFER_RUNNING);
}
-static size_t pakfire_httpclient_num_queued_xfers(struct pakfire_httpclient* self) {
+static size_t pakfire_httpclient_num_queued_xfers(pakfire_httpclient* self) {
return pakfire_httpclient_count_xfers(self, PAKFIRE_XFER_QUEUED);
}
/*
Returns the next queued xfer or NULL
*/
-static struct pakfire_httpclient_xfer* pakfire_httpclient_get_queued_xfer(struct pakfire_httpclient* self) {
- struct pakfire_httpclient_xfer* e = NULL;
+static pakfire_httpclient_xfer* pakfire_httpclient_get_queued_xfer(pakfire_httpclient* self) {
+ pakfire_httpclient_xfer* e = NULL;
TAILQ_FOREACH(e, &self->xfers, nodes) {
if (e->status == PAKFIRE_XFER_QUEUED)
return NULL;
}
-static struct pakfire_httpclient_xfer* pakfire_httpclient_xfer_find(
- struct pakfire_httpclient* self, struct pakfire_xfer* xfer) {
- struct pakfire_httpclient_xfer* e = NULL;
+static pakfire_httpclient_xfer* pakfire_httpclient_xfer_find(
+ pakfire_httpclient* self, struct pakfire_xfer* xfer) {
+ pakfire_httpclient_xfer* e = NULL;
TAILQ_FOREACH(e, &self->xfers, nodes) {
if (e->xfer == xfer)
}
static int pakfire_httpclient_remove(
- struct pakfire_httpclient* self, struct pakfire_httpclient_xfer* e) {
+ pakfire_httpclient* self, pakfire_httpclient_xfer* e) {
int r;
// Nothing to do if not running
}
static int pakfire_httpclient_launch_one(
- struct pakfire_httpclient* self, struct pakfire_httpclient_xfer* e) {
+ pakfire_httpclient* self, pakfire_httpclient_xfer* e) {
int r;
// Remove the handle if we ware launching again
return 0;
}
-static int pakfire_httpclient_launch(struct pakfire_httpclient* self) {
- struct pakfire_httpclient_xfer* e = NULL;
+static int pakfire_httpclient_launch(pakfire_httpclient* self) {
+ pakfire_httpclient_xfer* e = NULL;
int r;
while (pakfire_httpclient_num_running_xfers(self) < self->max_parallel) {
return 0;
}
-static int pakfire_httpclient_check(struct pakfire_httpclient* self) {
- struct pakfire_httpclient_xfer* e = NULL;
+static int pakfire_httpclient_check(pakfire_httpclient* self) {
+ pakfire_httpclient_xfer* e = NULL;
struct pakfire_xfer* xfer = NULL;
int r;
}
static int __pakfire_httpclient_timer(sd_event_source* s, uint64_t usec, void* data) {
- struct pakfire_httpclient* self = data;
+ pakfire_httpclient* self = data;
int r;
DEBUG(self->ctx, "cURL timer fired\n");
}
static int pakfire_httpclient_timer(CURLM* multi, long timeout_ms, void* data) {
- struct pakfire_httpclient* self = data;
+ pakfire_httpclient* self = data;
int r;
// A negative value indicates that we should remove the timer
}
static int __pakfire_httpclient_socket(sd_event_source* s, int fd, uint32_t events, void* data) {
- struct pakfire_httpclient* self = data;
+ pakfire_httpclient* self = data;
int r;
int action = 0;
}
static int pakfire_httpclient_socket(CURL* e, curl_socket_t fd, int what, void* data, void* data2) {
- struct pakfire_httpclient* self = data;
+ pakfire_httpclient* self = data;
sd_event_source* s = data2;
uint32_t events = 0;
int r;
static int pakfire_httpclient_loop_exited(sd_event_source* event, void* data);
static int pakfire_httpclient_loop_started(sd_event_source* event, void* data) {
- struct pakfire_httpclient* self = data;
+ pakfire_httpclient* self = data;
int r;
// Start the progress
}
static int pakfire_httpclient_loop_exited(sd_event_source* event, void* data) {
- struct pakfire_httpclient* self = data;
+ pakfire_httpclient* self = data;
int r;
// Finish the progress
&self->events.loop_started, pakfire_httpclient_loop_started, self);
}
-static int pakfire_httpclient_setup_loop(struct pakfire_httpclient* self) {
+static int pakfire_httpclient_setup_loop(pakfire_httpclient* self) {
int r;
// Fetch the context's loop
return 0;
}
-static int pakfire_httpclient_setup_curl(struct pakfire_httpclient* self) {
+static int pakfire_httpclient_setup_curl(pakfire_httpclient* self) {
int r;
// Initialize cURL
return 0;
}
-static int pakfire_httpclient_setup_progress(struct pakfire_httpclient* self, int flags) {
+static int pakfire_httpclient_setup_progress(pakfire_httpclient* self, int flags) {
int r;
// Use some sensible defaults
return 0;
}
-static void pakfire_httpclient_free(struct pakfire_httpclient* self) {
- struct pakfire_httpclient_xfer* e = NULL;
+static void pakfire_httpclient_free(pakfire_httpclient* self) {
+ pakfire_httpclient_xfer* e = NULL;
// Free any xfers that we still hold
while (!TAILQ_EMPTY(&self->xfers)) {
free(self);
}
-int pakfire_httpclient_create(struct pakfire_httpclient** client,
+int pakfire_httpclient_create(pakfire_httpclient** client,
pakfire_ctx* ctx, int progress_flags) {
- struct pakfire_httpclient* self = NULL;
+ pakfire_httpclient* self = NULL;
int r;
// Allocate a new object
return r;
}
-struct pakfire_httpclient* pakfire_httpclient_ref(struct pakfire_httpclient* self) {
+pakfire_httpclient* pakfire_httpclient_ref(pakfire_httpclient* self) {
++self->nrefs;
return self;
}
-struct pakfire_httpclient* pakfire_httpclient_unref(struct pakfire_httpclient* self) {
+pakfire_httpclient* pakfire_httpclient_unref(pakfire_httpclient* self) {
if (--self->nrefs > 0)
return self;
return NULL;
}
-int pakfire_httpclient_enqueue(struct pakfire_httpclient* self, struct pakfire_xfer* xfer) {
- struct pakfire_httpclient_xfer* e = NULL;
+int pakfire_httpclient_enqueue(pakfire_httpclient* self, struct pakfire_xfer* xfer) {
+ pakfire_httpclient_xfer* e = NULL;
int r;
// Create a new object
return 0;
}
-int pakfire_httpclient_dequeue(struct pakfire_httpclient* self, struct pakfire_xfer* xfer) {
- struct pakfire_httpclient_xfer* e = NULL;
+int pakfire_httpclient_dequeue(pakfire_httpclient* self, struct pakfire_xfer* xfer) {
+ pakfire_httpclient_xfer* e = NULL;
int r;
// Find reference
return 0;
}
-int pakfire_httpclient_run(struct pakfire_httpclient* self, const char* title) {
+int pakfire_httpclient_run(pakfire_httpclient* self, const char* title) {
int r = 0;
// This function will start the event loop (usually used when we are running