diff --git a/client/javascript/tls_socket.js b/client/javascript/tls_socket.js index 3f4592d..a5249ac 100644 --- a/client/javascript/tls_socket.js +++ b/client/javascript/tls_socket.js @@ -21,8 +21,12 @@ class TLSSocket { } connect() { + let response_info; let data_callback = () => {}; - let finish_callback = (error, response_info) => { + let headers_callback = (info) => { + response_info = info; + } + let finish_callback = (error) => { if (error === 0) { this.connected = true; this.event_loop = setInterval(() => { @@ -42,7 +46,7 @@ class TLSSocket { request_options._libcurl_verbose = 1; } - this.http_handle = perform_request(this.url, request_options, data_callback, finish_callback, null); + this.http_handle = perform_request(this.url, request_options, data_callback, finish_callback, headers_callback, null); } recv() { diff --git a/client/javascript/websocket.js b/client/javascript/websocket.js index 0e2da59..54780de 100644 --- a/client/javascript/websocket.js +++ b/client/javascript/websocket.js @@ -22,8 +22,12 @@ class CurlWebSocket { } connect() { + let response_info; let data_callback = () => {}; - let finish_callback = (error, response_info) => { + let headers_callback = (info) => { + response_info = info; + } + let finish_callback = (error) => { if (error === 0) { this.connected = true; this.event_loop = setInterval(() => { @@ -45,7 +49,7 @@ class CurlWebSocket { if (this.options.verbose) { request_options._libcurl_verbose = 1; } - this.http_handle = perform_request(this.url, request_options, data_callback, finish_callback, null); + this.http_handle = perform_request(this.url, request_options, data_callback, finish_callback, headers_callback, null); } recv() { diff --git a/client/tests/run_tests.py b/client/tests/run_tests.py index 5b14bf5..19c2ad6 100644 --- a/client/tests/run_tests.py +++ b/client/tests/run_tests.py @@ -49,5 +49,8 @@ class JSTest(unittest.TestCase): def test_redirect_out(self): self.run_test("redirect_out.js") + def test_tls_socket(self): + self.run_test("test_tls_socket.js") + if __name__ == "__main__": unittest.main() \ No newline at end of file diff --git a/client/tests/scripts/test_tls_socket.js b/client/tests/scripts/test_tls_socket.js new file mode 100644 index 0000000..9335414 --- /dev/null +++ b/client/tests/scripts/test_tls_socket.js @@ -0,0 +1,27 @@ +function test() { + return new Promise((resolve, reject) => { + let socket = new libcurl.TLSSocket("cloudflare.com", 443, {verbose: 1}); + + socket.onopen = () => { + let str = "GET /cdn-cgi/trace HTTP/1.1\r\nHost: cloudflare.com\r\nConnection: close\r\n\r\n"; + socket.send(new TextEncoder().encode(str)); + }; + + socket.onmessage = (data) => { + let text = new TextDecoder().decode(data); + if (!text.includes("tls=TLSv1.3")) { + reject("cloudflare reported tls version mismatch"); + return; + } + if (!text.includes("HTTP/1.1 200 OK")) { + reject("cloudflare reported http error"); + return; + } + resolve(); + }; + + socket.onerror = (error) => { + reject("socket error occurred " + error); + } + }); +} \ No newline at end of file