]> git.ipfire.org Git - pakfire.git/commitdiff
xfer: Implement sending a WebSocket message
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 15 Sep 2024 03:36:58 +0000 (03:36 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 15 Sep 2024 03:36:58 +0000 (03:36 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/include/pakfire/xfer.h
src/libpakfire/xfer.c

index 30fa6adeb7d56f57620245a9c8ff4cd1f3cb5632..57250ad888b6f1a388abc27b4dcf78b5b581b07b 100644 (file)
@@ -134,5 +134,7 @@ typedef int (*pakfire_xfer_close_callback)(struct pakfire_xfer* xfer, int code,
 int pakfire_xfer_socket(struct pakfire_xfer* xfer, pakfire_xfer_recv_callback recv,
        pakfire_xfer_send_callback send, pakfire_xfer_close_callback close, void* data);
 
+int pakfire_xfer_send_message(struct pakfire_xfer* xfer, const char* message, const size_t length);
+
 #endif /* PAKFIRE_PRIVATE */
 #endif /* PAKFIRE_XFER_H */
index a932872d6256df9c89b31c073ff4303485d6199c..43e69e7aabd711381e87243e8b29323936f7bd41 100644 (file)
@@ -1517,6 +1517,29 @@ int pakfire_xfer_socket(struct pakfire_xfer* xfer, pakfire_xfer_recv_callback re
        return 0;
 }
 
+/*
+       This function sends a WebSocket message
+*/
+int pakfire_xfer_send_message(struct pakfire_xfer* xfer,
+               const char* message, const size_t length) {
+       size_t bytes_sent = 0;
+       int r;
+
+       // Send the message
+       r = curl_ws_send(xfer->handle, message, length, &bytes_sent, 0, CURLWS_TEXT);
+       if (r) {
+               CTX_ERROR(xfer->ctx, "Could not send message: %s\n", curl_easy_strerror(r));
+
+               return r;
+       }
+
+       // Log success
+       CTX_DEBUG(xfer->ctx,
+               "Successfully sent a WebSocket message of %zu byte(s)\n", bytes_sent);
+
+       return 0;
+}
+
 pakfire_xfer_error_code_t pakfire_xfer_run(struct pakfire_xfer* xfer, int flags) {
        int r;