#include <systemd/sd-event.h>
+#include <pakfire/buffer.h>
#include <pakfire/ctx.h>
#include <pakfire/hasher.h>
#include <pakfire/hex.h>
} 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 {
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);
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;
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;
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");