From b053ec8e77bb32c2a0b934d071204236883cb1d7 Mon Sep 17 00:00:00 2001 From: ading2210 Date: Fri, 26 Jan 2024 18:54:23 -0500 Subject: [PATCH] fix receiving large websocket frames --- client/exported_funcs.txt | 1 + client/types.h | 1 + client/websocket.c | 5 ++++- client/websocket.js | 5 +++-- client/wisp_client | 2 +- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/client/exported_funcs.txt b/client/exported_funcs.txt index a0f588a..2d2a440 100644 --- a/client/exported_funcs.txt +++ b/client/exported_funcs.txt @@ -11,5 +11,6 @@ get_result_size get_result_buffer get_result_code get_result_closed +get_result_fragment free \ No newline at end of file diff --git a/client/types.h b/client/types.h index ff65919..afe8c85 100644 --- a/client/types.h +++ b/client/types.h @@ -13,5 +13,6 @@ struct WSResult { int res; int buffer_size; int closed; + int fragment; char* buffer; }; \ No newline at end of file diff --git a/client/websocket.c b/client/websocket.c index f0b49a8..1387106 100644 --- a/client/websocket.c +++ b/client/websocket.c @@ -18,7 +18,7 @@ struct WSResult* recv_from_websocket(CURL* http_handle, int buffer_size) { result->buffer = buffer; result->res = (int) res; result->closed = (ws_meta->flags & CURLWS_CLOSE); - + result->fragment = ws_meta->bytesleft; return result; } @@ -54,4 +54,7 @@ int get_result_code (const struct WSResult* result) { } int get_result_closed (const struct WSResult* result) { return result->closed; +} +int get_result_fragment (const struct WSResult* result) { + return result->fragment; } \ No newline at end of file diff --git a/client/websocket.js b/client/websocket.js index f6c6c30..165d538 100644 --- a/client/websocket.js +++ b/client/websocket.js @@ -32,7 +32,7 @@ class CurlWebSocket extends EventTarget { let finish_callback = (error, response_info) => { this.finish_callback(error, response_info); } - this.http_handle = perform_request(this.url, {_libcurl_verbose: 1}, data_callback, finish_callback, null); + this.http_handle = perform_request(this.url, {}, data_callback, finish_callback, null); this.recv_loop(); } @@ -43,6 +43,7 @@ class CurlWebSocket extends EventTarget { if (result_code == 0) { //CURLE_OK - data recieved if (_get_result_closed(result_ptr)) { + //this.pass_buffer(); this.close_callback(); return; } @@ -54,7 +55,7 @@ class CurlWebSocket extends EventTarget { _free(data_ptr); this.recv_buffer.push(data); - if (data_size !== buffer_size) { //message finished + if (data_size !== buffer_size && !_get_result_fragment(result_ptr)) { //message finished let full_data = merge_arrays(this.recv_buffer); this.recv_buffer = []; this.recv_callback(full_data); diff --git a/client/wisp_client b/client/wisp_client index 0df32b3..0596aef 160000 --- a/client/wisp_client +++ b/client/wisp_client @@ -1 +1 @@ -Subproject commit 0df32b3910780f4d91fc6f55ab7aab2dc726a770 +Subproject commit 0596aefa8206bbb128cab1f4b1ad4241289d2fda