DEBUG(xfer->ctx, "The message is binary\n");
}
- // Once we have received the entire message we call the callback
- if (xfer->callbacks.recv) {
- r = xfer->callbacks.recv(xfer, xfer->recv_buffer.data, xfer->recv_buffer.length, xfer->callbacks.data);
- if (r)
- return r;
+ // If we don't have a callback, we log an error and throw away the message
+ if (!xfer->callbacks.recv) {
+ ERROR(xfer->ctx, "No receive callback set. Ignoring message.\n");
+ r = -ENOTSUP;
+ goto ERROR;
}
- return 0;
+ // Once we have received the entire message we call the callback
+ r = xfer->callbacks.recv(xfer,
+ xfer->recv_buffer.data, xfer->recv_buffer.length, xfer->callbacks.data);
+ if (r < 0)
+ goto ERROR;
+
+ERROR:
+ // Clear the buffer
+ pakfire_buffer_clear(&xfer->recv_buffer);
+
+ return r;
}
static int __pakfire_xfer_socket(sd_event_source* s, int fd, uint32_t events, void* data) {