From 25d29a48332c5102bba3e2fbb5f8ea27e06b2c7f Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 16 Apr 2025 15:45:29 +0000 Subject: [PATCH] xfer: Use our own buffer implementation for the receive buffer Signed-off-by: Michael Tremer --- src/pakfire/xfer.c | 37 ++++++++----------------------------- 1 file changed, 8 insertions(+), 29 deletions(-) diff --git a/src/pakfire/xfer.c b/src/pakfire/xfer.c index e851d565..9f158fb3 100644 --- a/src/pakfire/xfer.c +++ b/src/pakfire/xfer.c @@ -29,6 +29,7 @@ #include +#include #include #include #include @@ -116,10 +117,7 @@ struct pakfire_xfer { } callbacks; // WebSocket Receive Buffer - struct pakfire_xfer_buffer { - char* data; - size_t length; - } recv_buffer; + struct pakfire_buffer recv_buffer; // WebSocket Send Buffer struct pakfire_send_buffer { @@ -147,8 +145,7 @@ static void pakfire_xfer_free(struct pakfire_xfer* xfer) { sd_event_source_unref(xfer->event); // Receive Buffer - if (xfer->recv_buffer.data) - free(xfer->recv_buffer.data); + pakfire_buffer_free(&xfer->recv_buffer); if (xfer->send_buffer.data) free(xfer->send_buffer.data); @@ -981,22 +978,6 @@ static const char* curl_http_version(long v) { return "unknown"; } -static int pakfire_xfer_allocate(struct pakfire_xfer* xfer, size_t length) { - - // Otherwise, we resize the buffer - xfer->recv_buffer.data = pakfire_realloc(xfer->recv_buffer.data, length); - if (!xfer->recv_buffer.data) { - ERROR(xfer->ctx, "Could not allocate memory: %m\n"); - - return -errno; - } - - // Update the length - xfer->recv_buffer.length = length; - - return 0; -} - static int pakfire_xfer_socket_send(struct pakfire_xfer* self) { int r; @@ -1022,7 +1003,7 @@ static int pakfire_xfer_socket_send(struct pakfire_xfer* self) { static int pakfire_xfer_socket_recv(struct pakfire_xfer* xfer) { const struct curl_ws_frame* meta = NULL; - char* buffer[4096]; + char buffer[4096]; int r; size_t bytes_received = 0; @@ -1053,18 +1034,16 @@ static int pakfire_xfer_socket_recv(struct pakfire_xfer* xfer) { return 0; // Allocate some buffer space - r = pakfire_xfer_allocate(xfer, meta->offset + bytes_received); - if (r) + r = pakfire_buffer_push(&xfer->recv_buffer, buffer, bytes_received); + if (r < 0) return r; - // Copy the received message - memcpy(xfer->recv_buffer.data + meta->offset, buffer, bytes_received); - // Call again if this was not the entire message if (meta->flags & CURLWS_CONT) return pakfire_xfer_socket_recv(xfer); - DEBUG(xfer->ctx, "We have received a message of %zu byte(s)\n", xfer->recv_buffer.length); + DEBUG(xfer->ctx, "We have received a message of %zu byte(s)\n", + pakfire_buffer_length(&xfer->recv_buffer)); if (meta->flags & CURLWS_TEXT) { DEBUG(xfer->ctx, "The message is a text\n"); -- 2.39.5