fix websockets, add unit test for tls socket

This commit is contained in:
ading2210 2024-03-09 00:00:27 -05:00
parent 5fedc4b1ca
commit 9504f9d167
4 changed files with 42 additions and 4 deletions

View file

@ -21,8 +21,12 @@ class TLSSocket {
} }
connect() { connect() {
let response_info;
let data_callback = () => {}; let data_callback = () => {};
let finish_callback = (error, response_info) => { let headers_callback = (info) => {
response_info = info;
}
let finish_callback = (error) => {
if (error === 0) { if (error === 0) {
this.connected = true; this.connected = true;
this.event_loop = setInterval(() => { this.event_loop = setInterval(() => {
@ -42,7 +46,7 @@ class TLSSocket {
request_options._libcurl_verbose = 1; 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() { recv() {

View file

@ -22,8 +22,12 @@ class CurlWebSocket {
} }
connect() { connect() {
let response_info;
let data_callback = () => {}; let data_callback = () => {};
let finish_callback = (error, response_info) => { let headers_callback = (info) => {
response_info = info;
}
let finish_callback = (error) => {
if (error === 0) { if (error === 0) {
this.connected = true; this.connected = true;
this.event_loop = setInterval(() => { this.event_loop = setInterval(() => {
@ -45,7 +49,7 @@ class CurlWebSocket {
if (this.options.verbose) { if (this.options.verbose) {
request_options._libcurl_verbose = 1; 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() { recv() {

View file

@ -49,5 +49,8 @@ class JSTest(unittest.TestCase):
def test_redirect_out(self): def test_redirect_out(self):
self.run_test("redirect_out.js") self.run_test("redirect_out.js")
def test_tls_socket(self):
self.run_test("test_tls_socket.js")
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()

View file

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