From 954ce1f60b58ad93c6951f97cf39bb160c301ef5 Mon Sep 17 00:00:00 2001 From: ading2210 Date: Sun, 10 Mar 2024 04:07:34 -0400 Subject: [PATCH] fix some logic with converting arraybuffers --- README.md | 2 +- client/javascript/util.js | 42 +++++++++++++++++++++------------------ 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index b502e22..7c26f63 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,7 @@ The `TLSSocket.send` function can be used to send data to the socket. The only a let socket = new libcurl.TLSSocket("ading.dev", 443, {verbose: 1}); socket.onopen = () => { console.log("socket connected!"); - let str = "GET /all HTTP/1.1\r\nHost: ading.dev\r\nConnection: close\r\n\r\n"; + let str = "GET / HTTP/1.1\r\nHost: ading.dev\r\nConnection: close\r\n\r\n"; socket.send(new TextEncoder().encode(str)); }; socket.onmessage = (data) => { diff --git a/client/javascript/util.js b/client/javascript/util.js index 6f0fff5..c5557e6 100644 --- a/client/javascript/util.js +++ b/client/javascript/util.js @@ -39,32 +39,36 @@ function get_error_str(error_code) { return UTF8ToString(error_ptr); } +function merge_arrays(arrays) { + let total_len = arrays.reduce((acc, val) => acc + val.length, 0); + let new_array = new Uint8Array(total_len); + let offset = 0; + for (let array of arrays) { + new_array.set(array, offset); + offset += array.length; + } + return new_array; +} + //convert various data types to a uint8array (blobs excluded) function data_to_array(data) { - let data_array = null; - if (typeof data === "string") { - data_array = new TextEncoder().encode(data); + //data already in correct type + if (data instanceof Uint8Array) { + return data; + } + + else if (typeof data === "string") { + return new TextEncoder().encode(data); } - //any typedarray else if (data instanceof ArrayBuffer) { - //dataview objects - if (ArrayBuffer.isView(data) && data instanceof DataView) { - data_array = new Uint8Array(data.buffer); - } - //regular typed arrays - else if (ArrayBuffer.isView(data)) { - data_array = Uint8Array.from(data); - } - //regular arraybuffers - else { - data_array = new Uint8Array(data); - } + return new Uint8Array(data); } - else { - throw "invalid data type to be sent"; + //dataview objects or any other typedarray + else if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer); } - return data_array; + throw "invalid data type to be sent"; } \ No newline at end of file