From 99985d234d50fb56a7f0447ff452c6003c953f73 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Fri, 25 Jun 2021 12:21:29 -0400 Subject: [PATCH] TT#14008 fix handling of large WS payloads closes #1294 Change-Id: Icd901009721955be8b56042b2308c6638b89e064 --- daemon/websocket.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/daemon/websocket.c b/daemon/websocket.c index 24e726764..13258dde5 100644 --- a/daemon/websocket.c +++ b/daemon/websocket.c @@ -764,12 +764,18 @@ static int websocket_protocol(struct lws *wsi, enum lws_callback_reasons reason, websocket_conn_cleanup(wc); ilogs(http, LOG_DEBUG, "Websocket protocol '%s' ready for cleanup", name); break; - case LWS_CALLBACK_RECEIVE:; - ilogs(http, LOG_DEBUG, "Websocket protocol '%s' data received for '%s': '%.*s'", - name, wc->uri, (int) len, (const char *) in); + case LWS_CALLBACK_RECEIVE: + ilogs(http, LOG_DEBUG, "Websocket protocol '%s' data (first %i, final %i, remain %zu) " + "received for '%s': '%.*s'", + name, + lws_is_first_fragment(wsi), + lws_is_final_fragment(wsi), + lws_remaining_packet_payload(wsi), + wc->uri, (int) len, (const char *) in); wc->wm->method = M_WEBSOCKET; g_string_append_len(wc->wm->body, in, len); - websocket_message_push(wc, handler_func); + if (lws_is_final_fragment(wsi)) + websocket_message_push(wc, handler_func); break; case LWS_CALLBACK_SERVER_WRITEABLE: return websocket_dequeue(user);