]> git.ipfire.org Git - pakfire.git/commitdiff
xfer: Remove circular dependency to HTTP client
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 1 Feb 2025 13:49:10 +0000 (13:49 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 1 Feb 2025 13:52:48 +0000 (13:52 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/pakfire/httpclient.c
src/pakfire/httpclient.h
src/pakfire/xfer.c
src/pakfire/xfer.h

index 9e66ad72fdb78445f568919232733fddb305593c..f7e61a1c6a73a3b1afa29c8dc188110cdf925f1e 100644 (file)
@@ -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,
index 730f7b4d7ce58ec8e127e95f8bdb29b160a85b37..43be000c998060e11e5ea8eae03be82068577727 100644 (file)
@@ -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(
index ac6375197f54e48438f67f30087ee693307e651a..b2072a3d3c6cad56e52a0ca9f72a83050dae6c1e 100644 (file)
@@ -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)
index a1746a6e97c3f2b139d416c7d9381b49639dfa82..8476704da75fbf2c6de6f44a4ef07682725a2760 100644 (file)
@@ -27,6 +27,8 @@
 
 #include <json.h>
 
+#include <systemd/sd-event.h>
+
 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(