]> git.ipfire.org Git - pakfire.git/commitdiff
buildservice: Move daemon stuff to the daemon
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 13 Aug 2024 17:18:05 +0000 (17:18 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 13 Aug 2024 17:18:05 +0000 (17:18 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/buildservice.c
src/libpakfire/daemon.c
src/libpakfire/include/pakfire/buildservice.h

index fe32f2ae62d0db42ca834d887536604b23742ef7..35dd52c63f217ec8aad03bfd58086a68331f9d60 100644 (file)
@@ -1016,17 +1016,11 @@ ERROR:
        return r;
 }
 
-static int pakfire_buildservice_daemon_recv(struct pakfire_xfer* xfer,
-               const char* message, const size_t size, void* data) {
-       printf("%.*s\n", (int)size, message);
-
-       return 0;
-}
-
 /*
        Called before the daemon's
 */
-int pakfire_buildservice_daemon(struct pakfire_buildservice* service) {
+int pakfire_buildservice_daemon(struct pakfire_buildservice* service, pakfire_xfer_recv_callback recv,
+               pakfire_xfer_send_callback send, pakfire_xfer_close_callback close, void* data) {
        struct pakfire_xfer* xfer = NULL;
        char url[PATH_MAX];
        int r;
@@ -1047,7 +1041,7 @@ int pakfire_buildservice_daemon(struct pakfire_buildservice* service) {
                goto ERROR;
 
        // Make this a WebSocket connection
-       r = pakfire_xfer_socket(xfer, pakfire_buildservice_daemon_recv, NULL, NULL, service);
+       r = pakfire_xfer_socket(xfer, recv, send, close, data);
        if (r)
                goto ERROR;
 
index 0b92b4b4086cfe4cc6c29b21477e6e701693d312..bb5c5d306ef5864d6e8178c08333002abb7c17f5 100644 (file)
@@ -27,8 +27,7 @@
 #include <pakfire/buildservice.h>
 #include <pakfire/ctx.h>
 #include <pakfire/daemon.h>
-
-#define EPOLL_MAX_EVENTS 8
+#include <pakfire/util.h>
 
 struct pakfire_daemon {
        struct pakfire_ctx* ctx;
@@ -147,6 +146,55 @@ struct pakfire_daemon* pakfire_daemon_unref(struct pakfire_daemon* daemon) {
        return NULL;
 }
 
+/*
+       Called when a new job has been received
+*/
+static int pakfire_daemon_job(struct pakfire_daemon* daemon, json_object* m) {
+       return 0;
+}
+
+static int pakfire_daemon_recv(struct pakfire_xfer* xfer,
+               const char* message, const size_t size, void* data) {
+       struct pakfire_daemon* daemon = data;
+       struct json_object* type = NULL;
+       struct json_object* m = NULL;
+       int r;
+
+       // Parse the JSON message
+       m = pakfire_json_parse(daemon->ctx, message, size);
+       if (!m) {
+               r = -errno;
+               goto ERROR;
+       }
+
+       // Fetch the message type
+       if (!json_object_object_get_ex(m, "type", &type)) {
+               CTX_ERROR(daemon->ctx, "Invalid message with missing type\n");
+
+               return -EINVAL;
+       }
+
+       // Fetch the type
+       const char* t = json_object_get_string(type);
+
+       // Handle new jobs
+       if (strcmp(t, "job") == 0) {
+               r = pakfire_daemon_job(daemon, m);
+
+       } else {
+               CTX_ERROR(daemon->ctx, "Unknown message. Ignoring:\n%s\n",
+                       json_object_to_json_string_ext(m, JSON_C_TO_STRING_SPACED | JSON_C_TO_STRING_PRETTY));
+
+               r = 0;
+       }
+
+ERROR:
+       if (m)
+               json_object_put(m);
+
+       return r;
+}
+
 static int pakfire_daemon_loop(struct pakfire_daemon* daemon) {
        int r;
 
@@ -175,7 +223,8 @@ int pakfire_daemon_main(struct pakfire_daemon* daemon) {
        int r;
 
        // Connect to the build service
-       r = pakfire_buildservice_daemon(daemon->service);
+       r = pakfire_buildservice_daemon(daemon->service,
+               pakfire_daemon_recv, NULL, NULL, daemon);
        if (r)
                return r;
 
index 079a613f2fce99d690ed9776c9bebb3a3d6c41bf..313991043a6957091f8efa5d4fd32dc3ddeec302 100644 (file)
@@ -75,8 +75,15 @@ int pakfire_buildservice_submit_stats(struct pakfire_buildservice* service);
 int pakfire_buildservice_job_finished(struct pakfire_buildservice* service,
        const char* uuid, int success, const char* logfile, const char** packages);
 
+#ifdef PAKFIRE_PRIVATE
+
+#include <pakfire/xfer.h>
+
 // Daemon
 
-int pakfire_buildservice_daemon(struct pakfire_buildservice* service);
+int pakfire_buildservice_daemon(struct pakfire_buildservice* service, pakfire_xfer_recv_callback recv,
+               pakfire_xfer_send_callback send, pakfire_xfer_close_callback close, void* data);
+
+#endif /* PAKFIRE_PRIVATE */
 
 #endif /* PAKFIRE_BUILDSERVICE_H */