mirror of
https://github.com/MercuryWorkshop/epoxy-tls.git
synced 2025-05-12 14:00:01 -04:00
random fixes
This commit is contained in:
parent
76eeec87dc
commit
d78e6cef0c
5 changed files with 523 additions and 235 deletions
196
Cargo.lock
generated
196
Cargo.lock
generated
|
@ -405,22 +405,6 @@ dependencies = [
|
||||||
"tracing-subscriber",
|
"tracing-subscriber",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "core-foundation"
|
|
||||||
version = "0.9.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
|
|
||||||
dependencies = [
|
|
||||||
"core-foundation-sys",
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "core-foundation-sys"
|
|
||||||
version = "0.8.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cpufeatures"
|
name = "cpufeatures"
|
||||||
version = "0.2.12"
|
version = "0.2.12"
|
||||||
|
@ -594,16 +578,6 @@ version = "1.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "errno"
|
|
||||||
version = "0.3.9"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
"windows-sys 0.52.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "event-listener"
|
name = "event-listener"
|
||||||
version = "5.3.1"
|
version = "5.3.1"
|
||||||
|
@ -615,12 +589,6 @@ dependencies = [
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "fastrand"
|
|
||||||
version = "2.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fastwebsockets"
|
name = "fastwebsockets"
|
||||||
version = "0.8.0"
|
version = "0.8.0"
|
||||||
|
@ -668,21 +636,6 @@ version = "1.0.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "foreign-types"
|
|
||||||
version = "0.3.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
|
|
||||||
dependencies = [
|
|
||||||
"foreign-types-shared",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "foreign-types-shared"
|
|
||||||
version = "0.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures"
|
name = "futures"
|
||||||
version = "0.3.30"
|
version = "0.3.30"
|
||||||
|
@ -1133,12 +1086,6 @@ version = "0.2.155"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
|
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "linux-raw-sys"
|
|
||||||
version = "0.4.14"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lock_api"
|
name = "lock_api"
|
||||||
version = "0.4.12"
|
version = "0.4.12"
|
||||||
|
@ -1220,23 +1167,6 @@ dependencies = [
|
||||||
"getrandom",
|
"getrandom",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "native-tls"
|
|
||||||
version = "0.2.12"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
"log",
|
|
||||||
"openssl",
|
|
||||||
"openssl-probe",
|
|
||||||
"openssl-sys",
|
|
||||||
"schannel",
|
|
||||||
"security-framework",
|
|
||||||
"security-framework-sys",
|
|
||||||
"tempfile",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nom"
|
name = "nom"
|
||||||
version = "7.1.3"
|
version = "7.1.3"
|
||||||
|
@ -1281,50 +1211,6 @@ version = "1.19.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
|
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "openssl"
|
|
||||||
version = "0.10.66"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags 2.6.0",
|
|
||||||
"cfg-if",
|
|
||||||
"foreign-types",
|
|
||||||
"libc",
|
|
||||||
"once_cell",
|
|
||||||
"openssl-macros",
|
|
||||||
"openssl-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "openssl-macros"
|
|
||||||
version = "0.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "openssl-probe"
|
|
||||||
version = "0.1.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "openssl-sys"
|
|
||||||
version = "0.9.103"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6"
|
|
||||||
dependencies = [
|
|
||||||
"cc",
|
|
||||||
"libc",
|
|
||||||
"pkg-config",
|
|
||||||
"vcpkg",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parking"
|
name = "parking"
|
||||||
version = "2.2.0"
|
version = "2.2.0"
|
||||||
|
@ -1392,12 +1278,6 @@ version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pkg-config"
|
|
||||||
version = "0.3.30"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ppv-lite86"
|
name = "ppv-lite86"
|
||||||
version = "0.2.17"
|
version = "0.2.17"
|
||||||
|
@ -1558,19 +1438,6 @@ version = "0.1.24"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
|
checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rustix"
|
|
||||||
version = "0.38.34"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags 2.6.0",
|
|
||||||
"errno",
|
|
||||||
"libc",
|
|
||||||
"linux-raw-sys",
|
|
||||||
"windows-sys 0.52.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustls"
|
name = "rustls"
|
||||||
version = "0.23.11"
|
version = "0.23.11"
|
||||||
|
@ -1617,44 +1484,12 @@ version = "1.0.18"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
|
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "schannel"
|
|
||||||
version = "0.1.23"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
|
|
||||||
dependencies = [
|
|
||||||
"windows-sys 0.52.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scopeguard"
|
name = "scopeguard"
|
||||||
version = "1.2.0"
|
version = "1.2.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "security-framework"
|
|
||||||
version = "2.11.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags 2.6.0",
|
|
||||||
"core-foundation",
|
|
||||||
"core-foundation-sys",
|
|
||||||
"libc",
|
|
||||||
"security-framework-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "security-framework-sys"
|
|
||||||
version = "2.11.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf"
|
|
||||||
dependencies = [
|
|
||||||
"core-foundation-sys",
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "send_wrapper"
|
name = "send_wrapper"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
|
@ -1749,10 +1584,9 @@ dependencies = [
|
||||||
"http-body-util",
|
"http-body-util",
|
||||||
"humantime",
|
"humantime",
|
||||||
"hyper 1.4.1",
|
"hyper 1.4.1",
|
||||||
|
"hyper-util",
|
||||||
"simple_moving_average",
|
"simple_moving_average",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-native-tls",
|
|
||||||
"tokio-util",
|
|
||||||
"wisp-mux",
|
"wisp-mux",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1828,18 +1662,6 @@ version = "0.1.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
|
checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "tempfile"
|
|
||||||
version = "3.10.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"fastrand",
|
|
||||||
"rustix",
|
|
||||||
"windows-sys 0.52.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror"
|
name = "thiserror"
|
||||||
version = "1.0.63"
|
version = "1.0.63"
|
||||||
|
@ -1911,16 +1733,6 @@ dependencies = [
|
||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "tokio-native-tls"
|
|
||||||
version = "0.3.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
|
|
||||||
dependencies = [
|
|
||||||
"native-tls",
|
|
||||||
"tokio",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio-stream"
|
name = "tokio-stream"
|
||||||
version = "0.1.15"
|
version = "0.1.15"
|
||||||
|
@ -2137,12 +1949,6 @@ version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
|
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "vcpkg"
|
|
||||||
version = "0.2.15"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "version_check"
|
name = "version_check"
|
||||||
version = "0.9.4"
|
version = "0.9.4"
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
|
use std::io::Cursor;
|
||||||
|
|
||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
use fastwebsockets::upgrade::UpgradeFut;
|
use fastwebsockets::upgrade::UpgradeFut;
|
||||||
use futures_util::FutureExt;
|
use futures_util::FutureExt;
|
||||||
use hyper_util::rt::TokioIo;
|
use hyper_util::rt::TokioIo;
|
||||||
use tokio::{
|
use tokio::{
|
||||||
io::{AsyncBufReadExt, AsyncWriteExt, BufReader},
|
io::{AsyncBufReadExt, AsyncReadExt, AsyncWriteExt, BufReader},
|
||||||
net::tcp::{OwnedReadHalf, OwnedWriteHalf},
|
net::tcp::{OwnedReadHalf, OwnedWriteHalf},
|
||||||
select,
|
select,
|
||||||
task::JoinSet,
|
task::JoinSet,
|
||||||
|
@ -162,8 +164,8 @@ pub async fn handle_wisp(fut: UpgradeFut, id: String) -> anyhow::Result<()> {
|
||||||
|
|
||||||
let (read, write) = ws.split(|x| {
|
let (read, write) = ws.split(|x| {
|
||||||
let parts = x.into_inner().downcast::<TokioIo<ServerStream>>().unwrap();
|
let parts = x.into_inner().downcast::<TokioIo<ServerStream>>().unwrap();
|
||||||
assert_eq!(parts.read_buf.len(), 0);
|
let (r, w) = parts.io.into_inner().split();
|
||||||
parts.io.into_inner().split()
|
(Cursor::new(parts.read_buf).chain(r), w)
|
||||||
});
|
});
|
||||||
|
|
||||||
let (extensions, buffer_size) = CONFIG.wisp.to_opts();
|
let (extensions, buffer_size) = CONFIG.wisp.to_opts();
|
||||||
|
|
|
@ -13,10 +13,9 @@ futures = "0.3.30"
|
||||||
http-body-util = "0.1.0"
|
http-body-util = "0.1.0"
|
||||||
humantime = "2.1.0"
|
humantime = "2.1.0"
|
||||||
hyper = { version = "1.1.0", features = ["http1", "client"] }
|
hyper = { version = "1.1.0", features = ["http1", "client"] }
|
||||||
|
hyper-util = { version = "0.1.6", features = ["tokio"] }
|
||||||
simple_moving_average = "1.0.2"
|
simple_moving_average = "1.0.2"
|
||||||
tokio = { version = "1.36.0", features = ["full"] }
|
tokio = { version = "1.36.0", features = ["full"] }
|
||||||
tokio-native-tls = "0.3.1"
|
|
||||||
tokio-util = "0.7.10"
|
|
||||||
wisp-mux = { path = "../wisp", features = ["fastwebsockets"]}
|
wisp-mux = { path = "../wisp", features = ["fastwebsockets"]}
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
|
|
491
simple-wisp-client/flamegraph.svg
Normal file
491
simple-wisp-client/flamegraph.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 463 KiB |
|
@ -1,7 +1,7 @@
|
||||||
use atomic_counter::{AtomicCounter, RelaxedCounter};
|
use atomic_counter::{AtomicCounter, RelaxedCounter};
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use fastwebsockets::{handshake, FragmentCollectorRead};
|
use fastwebsockets::handshake;
|
||||||
use futures::future::select_all;
|
use futures::future::select_all;
|
||||||
use http_body_util::Empty;
|
use http_body_util::Empty;
|
||||||
use humantime::format_duration;
|
use humantime::format_duration;
|
||||||
|
@ -9,24 +9,24 @@ use hyper::{
|
||||||
header::{CONNECTION, UPGRADE},
|
header::{CONNECTION, UPGRADE},
|
||||||
Request, Uri,
|
Request, Uri,
|
||||||
};
|
};
|
||||||
|
use hyper_util::rt::TokioIo;
|
||||||
use simple_moving_average::{SingleSumSMA, SMA};
|
use simple_moving_average::{SingleSumSMA, SMA};
|
||||||
use std::{
|
use std::{
|
||||||
error::Error,
|
error::Error,
|
||||||
future::Future,
|
future::Future,
|
||||||
io::{stdout, IsTerminal, Write},
|
io::{stdout, Cursor, IsTerminal, Write},
|
||||||
net::SocketAddr,
|
net::SocketAddr,
|
||||||
process::exit,
|
process::{abort, exit},
|
||||||
sync::Arc,
|
sync::Arc,
|
||||||
time::{Duration, Instant},
|
time::{Duration, Instant},
|
||||||
};
|
};
|
||||||
use tokio::{
|
use tokio::{
|
||||||
|
io::AsyncReadExt,
|
||||||
net::TcpStream,
|
net::TcpStream,
|
||||||
select,
|
select,
|
||||||
signal::unix::{signal, SignalKind},
|
signal::unix::{signal, SignalKind},
|
||||||
time::{interval, sleep},
|
time::{interval, sleep},
|
||||||
};
|
};
|
||||||
use tokio_native_tls::{native_tls, TlsConnector};
|
|
||||||
use tokio_util::either::Either;
|
|
||||||
use wisp_mux::{
|
use wisp_mux::{
|
||||||
extensions::{
|
extensions::{
|
||||||
password::{PasswordProtocolExtension, PasswordProtocolExtensionBuilder},
|
password::{PasswordProtocolExtension, PasswordProtocolExtensionBuilder},
|
||||||
|
@ -103,17 +103,12 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||||
console_subscriber::init();
|
console_subscriber::init();
|
||||||
let opts = Cli::parse();
|
let opts = Cli::parse();
|
||||||
|
|
||||||
let tls = match opts
|
if opts.wisp.scheme_str().unwrap_or_default() != "ws" {
|
||||||
.wisp
|
Err(Box::new(WispClientError::InvalidUriScheme))?;
|
||||||
.scheme_str()
|
}
|
||||||
.ok_or(WispClientError::InvalidUriScheme)?
|
|
||||||
{
|
|
||||||
"wss" => Ok(true),
|
|
||||||
"ws" => Ok(false),
|
|
||||||
_ => Err(WispClientError::InvalidUriScheme),
|
|
||||||
}?;
|
|
||||||
let addr = opts.wisp.host().ok_or(WispClientError::UriHasNoHost)?;
|
let addr = opts.wisp.host().ok_or(WispClientError::UriHasNoHost)?;
|
||||||
let addr_port = opts.wisp.port_u16().unwrap_or(if tls { 443 } else { 80 });
|
let addr_port = opts.wisp.port_u16().unwrap_or(80);
|
||||||
let addr_path = opts.wisp.path();
|
let addr_path = opts.wisp.path();
|
||||||
let addr_dest = opts.tcp.ip().to_string();
|
let addr_dest = opts.tcp.ip().to_string();
|
||||||
let addr_dest_port = opts.tcp.port();
|
let addr_dest_port = opts.tcp.port();
|
||||||
|
@ -131,12 +126,6 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||||
);
|
);
|
||||||
|
|
||||||
let socket = TcpStream::connect(format!("{}:{}", &addr, addr_port)).await?;
|
let socket = TcpStream::connect(format!("{}:{}", &addr, addr_port)).await?;
|
||||||
let socket = if tls {
|
|
||||||
let cx = TlsConnector::from(native_tls::TlsConnector::builder().build()?);
|
|
||||||
Either::Left(cx.connect(addr, socket).await?)
|
|
||||||
} else {
|
|
||||||
Either::Right(socket)
|
|
||||||
};
|
|
||||||
let req = Request::builder()
|
let req = Request::builder()
|
||||||
.method("GET")
|
.method("GET")
|
||||||
.uri(addr_path)
|
.uri(addr_path)
|
||||||
|
@ -152,8 +141,11 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||||
|
|
||||||
let (ws, _) = handshake::client(&SpawnExecutor, req, socket).await?;
|
let (ws, _) = handshake::client(&SpawnExecutor, req, socket).await?;
|
||||||
|
|
||||||
let (rx, tx) = ws.split(tokio::io::split);
|
let (rx, tx) = ws.split(|x| {
|
||||||
let rx = FragmentCollectorRead::new(rx);
|
let parts = x.into_inner().downcast::<TokioIo<TcpStream>>().unwrap();
|
||||||
|
let (r, w) = parts.io.into_inner().into_split();
|
||||||
|
(Cursor::new(parts.read_buf).chain(r), w)
|
||||||
|
});
|
||||||
|
|
||||||
let mut extensions: Vec<Box<(dyn ProtocolExtensionBuilder + Send + Sync)>> = Vec::new();
|
let mut extensions: Vec<Box<(dyn ProtocolExtensionBuilder + Send + Sync)>> = Vec::new();
|
||||||
let mut extension_ids: Vec<u8> = Vec::new();
|
let mut extension_ids: Vec<u8> = Vec::new();
|
||||||
|
@ -182,12 +174,11 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||||
mux.downgraded, mux.supported_extension_ids
|
mux.downgraded, mux.supported_extension_ids
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut threads = Vec::with_capacity(opts.streams + 4);
|
let mut threads = Vec::with_capacity((opts.streams * 2) + 3);
|
||||||
let mut reads = Vec::with_capacity(opts.streams);
|
|
||||||
|
|
||||||
threads.push(tokio::spawn(fut));
|
threads.push(tokio::spawn(fut));
|
||||||
|
|
||||||
let payload = Bytes::from(vec![0; 1024 * opts.packet_size]);
|
let payload = vec![0; 1024 * opts.packet_size];
|
||||||
|
|
||||||
let cnt = Arc::new(RelaxedCounter::new(0));
|
let cnt = Arc::new(RelaxedCounter::new(0));
|
||||||
|
|
||||||
|
@ -201,21 +192,19 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||||
let payload = payload.clone();
|
let payload = payload.clone();
|
||||||
threads.push(tokio::spawn(async move {
|
threads.push(tokio::spawn(async move {
|
||||||
loop {
|
loop {
|
||||||
cw.write(payload.clone()).await?;
|
cw.write(&payload).await?;
|
||||||
cnt.inc();
|
cnt.inc();
|
||||||
}
|
}
|
||||||
#[allow(unreachable_code)]
|
#[allow(unreachable_code)]
|
||||||
Ok::<(), WispError>(())
|
Ok::<(), WispError>(())
|
||||||
}));
|
}));
|
||||||
reads.push(cr);
|
threads.push(tokio::spawn(async move {
|
||||||
|
loop {
|
||||||
|
cr.read().await;
|
||||||
|
}
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
threads.push(tokio::spawn(async move {
|
|
||||||
loop {
|
|
||||||
select_all(reads.iter().map(|x| Box::pin(x.read()))).await;
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
let cnt_avg = cnt.clone();
|
let cnt_avg = cnt.clone();
|
||||||
threads.push(tokio::spawn(async move {
|
threads.push(tokio::spawn(async move {
|
||||||
let mut interval = interval(Duration::from_millis(100));
|
let mut interval = interval(Duration::from_millis(100));
|
||||||
|
@ -289,5 +278,6 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
// force everything to die
|
||||||
|
abort()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue