fix receiving large websocket frames

This commit is contained in:
ading2210 2024-01-26 18:54:23 -05:00
parent 17d8c9fa8c
commit b053ec8e77
5 changed files with 10 additions and 4 deletions

View file

@ -11,5 +11,6 @@ get_result_size
get_result_buffer get_result_buffer
get_result_code get_result_code
get_result_closed get_result_closed
get_result_fragment
free free

View file

@ -13,5 +13,6 @@ struct WSResult {
int res; int res;
int buffer_size; int buffer_size;
int closed; int closed;
int fragment;
char* buffer; char* buffer;
}; };

View file

@ -18,7 +18,7 @@ struct WSResult* recv_from_websocket(CURL* http_handle, int buffer_size) {
result->buffer = buffer; result->buffer = buffer;
result->res = (int) res; result->res = (int) res;
result->closed = (ws_meta->flags & CURLWS_CLOSE); result->closed = (ws_meta->flags & CURLWS_CLOSE);
result->fragment = ws_meta->bytesleft;
return result; return result;
} }
@ -55,3 +55,6 @@ int get_result_code (const struct WSResult* result) {
int get_result_closed (const struct WSResult* result) { int get_result_closed (const struct WSResult* result) {
return result->closed; return result->closed;
} }
int get_result_fragment (const struct WSResult* result) {
return result->fragment;
}

View file

@ -32,7 +32,7 @@ class CurlWebSocket extends EventTarget {
let finish_callback = (error, response_info) => { let finish_callback = (error, response_info) => {
this.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(); this.recv_loop();
} }
@ -43,6 +43,7 @@ class CurlWebSocket extends EventTarget {
if (result_code == 0) { //CURLE_OK - data recieved if (result_code == 0) { //CURLE_OK - data recieved
if (_get_result_closed(result_ptr)) { if (_get_result_closed(result_ptr)) {
//this.pass_buffer();
this.close_callback(); this.close_callback();
return; return;
} }
@ -54,7 +55,7 @@ class CurlWebSocket extends EventTarget {
_free(data_ptr); _free(data_ptr);
this.recv_buffer.push(data); 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); let full_data = merge_arrays(this.recv_buffer);
this.recv_buffer = []; this.recv_buffer = [];
this.recv_callback(full_data); this.recv_callback(full_data);

@ -1 +1 @@
Subproject commit 0df32b3910780f4d91fc6f55ab7aab2dc726a770 Subproject commit 0596aefa8206bbb128cab1f4b1ad4241289d2fda