From: Michael Tremer Date: Sat, 1 Feb 2025 13:49:10 +0000 (+0000) Subject: xfer: Remove circular dependency to HTTP client X-Git-Tag: 0.9.30~204 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e2a76dad102ac3293dad83bba4604bd17b3424b8;p=pakfire.git xfer: Remove circular dependency to HTTP client Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/httpclient.c b/src/pakfire/httpclient.c index 9e66ad72..f7e61a1c 100644 --- a/src/pakfire/httpclient.c +++ b/src/pakfire/httpclient.c @@ -266,7 +266,7 @@ static int pakfire_httpclient_check(struct pakfire_httpclient* self) { return r; // Call the done callback - r = pakfire_xfer_done(xfer, msg->data.result); + r = pakfire_xfer_done(xfer, self->loop, msg->data.result); if (r < 0) { switch (-r) { case EAGAIN: @@ -679,10 +679,6 @@ struct pakfire_httpclient* pakfire_httpclient_unref(struct pakfire_httpclient* s return NULL; } -sd_event* pakfire_httpclient_loop(struct pakfire_httpclient* self) { - return sd_event_ref(self->loop); -} - int pakfire_httpclient_enqueue_xfer(struct pakfire_httpclient* self, struct pakfire_xfer* xfer) { struct pakfire_httpclient_xfer* e = NULL; @@ -699,8 +695,7 @@ int pakfire_httpclient_enqueue_xfer(struct pakfire_httpclient* self, // Keep a reference to the xfer TAILQ_INSERT_TAIL(&self->xfers, e, nodes); - // Transfer enqueued - return pakfire_xfer_enqueued(xfer, self); + return 0; } int pakfire_httpclient_dequeue_xfer(struct pakfire_httpclient* self, diff --git a/src/pakfire/httpclient.h b/src/pakfire/httpclient.h index 730f7b4d..43be000c 100644 --- a/src/pakfire/httpclient.h +++ b/src/pakfire/httpclient.h @@ -35,8 +35,6 @@ int pakfire_httpclient_create(struct pakfire_httpclient** client, struct pakfire_httpclient* pakfire_httpclient_ref(struct pakfire_httpclient* self); struct pakfire_httpclient* pakfire_httpclient_unref(struct pakfire_httpclient* self); -sd_event* pakfire_httpclient_loop(struct pakfire_httpclient* self); - int pakfire_httpclient_enqueue_xfer( struct pakfire_httpclient* self, struct pakfire_xfer* xfer); int pakfire_httpclient_dequeue_xfer( diff --git a/src/pakfire/xfer.c b/src/pakfire/xfer.c index ac637519..b2072a3d 100644 --- a/src/pakfire/xfer.c +++ b/src/pakfire/xfer.c @@ -45,9 +45,6 @@ struct pakfire_xfer { struct pakfire_ctx* ctx; int nrefs; - // Reference to the HTTP client - struct pakfire_httpclient* client; - // Reference to the progress indicator struct pakfire_progress* progress; @@ -145,10 +142,6 @@ static void pakfire_xfer_free(struct pakfire_xfer* xfer) { if (xfer->evp) EVP_MD_CTX_free(xfer->evp); - // Remove the cURL handle - if (xfer->client) - pakfire_httpclient_dequeue_xfer(xfer->client, xfer); - // systemd if (xfer->event) sd_event_source_unref(xfer->event); @@ -179,8 +172,6 @@ static void pakfire_xfer_free(struct pakfire_xfer* xfer) { pakfire_mirrorlist_unref(xfer->mirrors); if (xfer->progress) pakfire_progress_unref(xfer->progress); - if (xfer->client) - pakfire_httpclient_unref(xfer->client); if (xfer->ctx) pakfire_ctx_unref(xfer->ctx); @@ -443,19 +434,6 @@ CURL* pakfire_xfer_handle(struct pakfire_xfer* xfer) { return xfer->handle; } -int pakfire_xfer_enqueued(struct pakfire_xfer* xfer, struct pakfire_httpclient* client) { - // Remove the reference to the old client - if (xfer->client) { - pakfire_httpclient_unref(xfer->client); - xfer->client = NULL; - } - - // Store the new client - xfer->client = pakfire_httpclient_ref(client); - - return 0; -} - int pakfire_xfer_set_method(struct pakfire_xfer* xfer, const pakfire_xfer_method_t method) { const char* m = NULL; @@ -1158,14 +1136,12 @@ static int __pakfire_xfer_socket(sd_event_source* s, int fd, uint32_t events, vo This is being called once a WebSocket connection has connected and is ready to send or receive data. */ -static pakfire_xfer_error_code_t pakfire_xfer_done_socket(struct pakfire_xfer* xfer, int code) { +static pakfire_xfer_error_code_t pakfire_xfer_done_socket( + struct pakfire_xfer* xfer, sd_event* loop, int code) { curl_socket_t socket = -1; int events = 0; int r; - // Fetch the event loop - sd_event* loop = pakfire_httpclient_loop(xfer->client); - // Fetch the socket r = curl_easy_getinfo(xfer->handle, CURLINFO_ACTIVESOCKET, &socket); if (r) { @@ -1306,7 +1282,8 @@ static int pakfire_xfer_save(struct pakfire_xfer* xfer) { return 0; } -pakfire_xfer_error_code_t pakfire_xfer_done(struct pakfire_xfer* xfer, int code) { +pakfire_xfer_error_code_t pakfire_xfer_done( + struct pakfire_xfer* xfer, sd_event* loop, int code) { CURL* h = xfer->handle; int r; const char* scheme = NULL; @@ -1402,7 +1379,7 @@ pakfire_xfer_error_code_t pakfire_xfer_done(struct pakfire_xfer* xfer, int code) #ifdef CURL_HAS_WEBSOCKETS case PAKFIRE_XFER_SOCKET: - r = pakfire_xfer_done_socket(xfer, code); + r = pakfire_xfer_done_socket(xfer, loop, code); if (r < 0) return r; #endif /* CURL_HAS_WEBSOCKETS */ @@ -1778,7 +1755,7 @@ pakfire_xfer_error_code_t pakfire_xfer_run(struct pakfire_xfer* xfer, int flags) r = curl_easy_perform(xfer->handle); // Handle the result - r = pakfire_xfer_done(xfer, r); + r = pakfire_xfer_done(xfer, NULL, r); // Repeat if asked if (r == -EAGAIN) diff --git a/src/pakfire/xfer.h b/src/pakfire/xfer.h index a1746a6e..8476704d 100644 --- a/src/pakfire/xfer.h +++ b/src/pakfire/xfer.h @@ -27,6 +27,8 @@ #include +#include + struct pakfire_xfer; typedef enum pakfire_xfer_error_code { @@ -90,8 +92,6 @@ struct pakfire_xfer* pakfire_xfer_unref(struct pakfire_xfer* xfer); CURL* pakfire_xfer_handle(struct pakfire_xfer* xfer); -int pakfire_xfer_enqueued(struct pakfire_xfer* xfer, struct pakfire_httpclient* client); - int pakfire_xfer_set_method(struct pakfire_xfer* xfer, const pakfire_xfer_method_t method); @@ -127,7 +127,7 @@ int pakfire_xfer_set_input(struct pakfire_xfer* xfer, FILE* f); int pakfire_xfer_auth(struct pakfire_xfer* xfer); int pakfire_xfer_prepare(struct pakfire_xfer* xfer, struct pakfire_progress* progress, int flags); -pakfire_xfer_error_code_t pakfire_xfer_done(struct pakfire_xfer* xfer, int code); +pakfire_xfer_error_code_t pakfire_xfer_done(struct pakfire_xfer* xfer, sd_event* loop, int code); pakfire_xfer_error_code_t pakfire_xfer_run(struct pakfire_xfer* xfer, int flags); pakfire_xfer_error_code_t pakfire_xfer_run_api_request(