int pakfire_xfer_send_message(struct pakfire_xfer* xfer,
const char* message, const size_t length) {
size_t bytes_sent = 0;
+ size_t offset = 0;
int r;
// Send the message
- r = curl_ws_send(xfer->handle, message, length, &bytes_sent, 0, CURLWS_TEXT);
- if (r) {
- ERROR(xfer->ctx, "Could not send message: %s\n", curl_easy_strerror(r));
+ while (offset < length) {
+ r = curl_ws_send(xfer->handle, message + offset, length - offset,
+ &bytes_sent, 0, CURLWS_TEXT);
- return r;
+ // Update offset
+ offset += bytes_sent;
+
+ switch (r) {
+ // All done
+ case CURLE_OK:
+ goto DONE;
+
+ // We could not send all data, try again
+ case CURLE_AGAIN:
+ continue;
+
+ default:
+ ERROR(xfer->ctx, "Could not send message: %s\n", curl_easy_strerror(r));
+ return r;
+ }
}
+DONE:
// Log success
DEBUG(xfer->ctx,
"Successfully sent a WebSocket message of %zu byte(s)\n", bytes_sent);