commit a04238dbcd22f380e989dcee57173c7216fd3334 Author: restitux Date: Tue May 21 16:25:32 2024 -0600 Initial commit...it works? diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..8467175 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,2 @@ +[build] +rustflags = ["--cfg=web_sys_unstable_apis"] diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..8f51c87 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,212 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "mumble-webtransport" +version = "0.1.0" +dependencies = [ + "serde-wasm-bindgen", + "serde_json", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "proc-macro2" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "serde" +version = "1.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_derive" +version = "1.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "syn" +version = "2.0.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..0728eee --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "mumble-webtransport" +version = "0.1.0" +edition = "2021" + +[lib] +crate-type = ["cdylib"] +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +serde-wasm-bindgen = "0.6.5" +serde_json = "1.0.117" +wasm-bindgen = "0.2.92" +wasm-bindgen-futures = "0.4.42" +web-sys = { version = "0.3.69", features = ["WebTransport", "console", "WebTransportOptions", "WebTransportBidirectionalStream", "WebTransportSendStream", "WebTransportReceiveStream"] } diff --git a/index.html b/index.html new file mode 100644 index 0000000..9294242 --- /dev/null +++ b/index.html @@ -0,0 +1,14 @@ + + + + + + + Today's Date + + + + + + + diff --git a/index.js b/index.js new file mode 100644 index 0000000..7177c09 --- /dev/null +++ b/index.js @@ -0,0 +1,41 @@ +import init, { entrypoint } from "./pkg/mumble_webtransport.js"; + + +async function main() { + console.log("Javascript!") + + await init() + let x = await entrypoint() + console.log(x); + await new Promise(r => setTimeout(r, 200000)); + //let y = { + // algorithm: "sha-256", + // value: new Uint8Array([14, 162, 111, 176, 34, 113, 218, 69, 177, 18, 13, 180, 232, 204, 49, 65, 161, 195, 36, 238, 23, 95, 174, 190, 24, 216, 105, 89, 236, 147, 206, 139]), + //}; + //console.log(y); + + + //const transport = new WebTransport("https://localhost:4433/?hostname=ohea.xyz&port=64738&username=test", { + // serverCertificateHashes: [ + // x + // //{ + // // algorithm: "sha-256", + // // value: new Uint8Array([14, 162, 111, 176, 34, 113, 218, 69, 177, 18, 13, 180, 232, 204, 49, 65, 161, 195, 36, 238, 23, 95, 174, 190, 24, 216, 105, 89, 236, 147, 206, 139]), + // //}, + // ] + //}); + + //await transport.ready; + + //stream = await transport.createBidirectionalStream(); + + //return transport; +} + + +main() +//console.log("Test"); +//export default await main +// +// +// diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..acd01d5 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,84 @@ +use wasm_bindgen::prelude::*; +use web_sys::console; +use web_sys::WebTransport; +use web_sys::WebTransportOptions; + +use web_sys::js_sys::Promise; + +#[wasm_bindgen] +extern "C" { + pub fn alert(s: &str); +} + +#[wasm_bindgen] +//pub async fn entrypoint() -> std::result::Result<(), wasm_bindgen::JsValue> { +pub async fn entrypoint() -> JsValue { + console::log_1(&"Rust via WASM!".into()); + + let server_hash = vec![ + 14, 162, 111, 176, 34, 113, 218, 69, 177, 18, 13, 180, 232, 204, 49, 65, 161, 195, 36, 238, + 23, 95, 174, 190, 24, 216, 105, 89, 236, 147, 206, 139, + ]; + let hash = web_sys::js_sys::Uint8Array::from(server_hash.as_slice()); + + let object = web_sys::js_sys::Object::new(); + + web_sys::js_sys::Reflect::set( + &object, + &JsValue::from_str("algorithm"), + &JsValue::from_str("sha-256"), + ) + .unwrap(); + + web_sys::js_sys::Reflect::set(&object, &JsValue::from_str("value"), &hash).unwrap(); + + let array = web_sys::js_sys::Array::new(); + array.push(&object); + + console::log_1(&object.clone().into()); + console::log_1(&"Created option object!".into()); + + let mut options = WebTransportOptions::new(); + options.server_certificate_hashes(&array); + + console::log_1(&"Created WebTransportOptions!".into()); + + let transport = match WebTransport::new_with_options( + "https://localhost:4433/?hostname=ohea.xyz&port=64738&username=test", + &options, + ) { + Ok(x) => x, + Err(e) => { + console::log_1(&e.into()); + panic!(); + } + }; + + console::log_1(&"Created WebTransport connection object.".into()); + + console::log_1(&transport.clone().into()); + + if let Err(e) = wasm_bindgen_futures::JsFuture::from(transport.ready()).await { + console::log_1(&e.into()); + panic!(); + } + + console::log_1(&"Transport is ready.".into()); + + let stream: web_sys::WebTransportBidirectionalStream = + match wasm_bindgen_futures::JsFuture::from(transport.create_bidirectional_stream()).await { + Ok(x) => { + x.into() + } + Err(e) => { + console::log_1(&e.into()); + panic!(); + } + }; + + //let reader = stream.readable(); + //let writer = stream.writable(); + + console::log_1(&"Created bidirectional stream!".into()); + return stream.into(); +}