From 8b8b7fb15c3cbbb150bd0e81736b46391a8ce040 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 (cherry picked from commit 99985d234d50fb56a7f0447ff452c6003c953f73) --- daemon/websocket.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/daemon/websocket.c b/daemon/websocket.c index 24e726764..53711dd27 100644 --- a/daemon/websocket.c +++ b/daemon/websocket.c @@ -764,12 +764,17 @@ 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 (final %i, remain %zu) " + "received for '%s': '%.*s'", + name, + 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);