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_code
get_result_closed
get_result_fragment
free

View file

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

View file

@ -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;
}

View file

@ -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);

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