aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock247
-rw-r--r--Cargo.toml1
-rw-r--r--components/net/Cargo.toml7
-rw-r--r--components/net/websocket_loader.rs102
-rw-r--r--servo-tidy.toml5
5 files changed, 98 insertions, 264 deletions
diff --git a/Cargo.lock b/Cargo.lock
index cdcd328d3c7..d96e8c5364f 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -197,7 +197,7 @@ checksum = "ad445822218ce64be7a341abfb0b1ea43b5c23aa83902542a4542e78309d8e5e"
dependencies = [
"async-stream-impl",
"futures-core",
- "pin-project-lite 0.2.8",
+ "pin-project-lite",
]
[[package]]
@@ -213,17 +213,17 @@ dependencies = [
[[package]]
name = "async-tungstenite"
-version = "0.9.3"
+version = "0.22.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ce503a5cb1e7450af7d211b86b84807791b251f335b2f43f1e26b85a416f315"
+checksum = "ce01ac37fdc85f10a43c43bc582cbd566720357011578a935761075f898baf58"
dependencies = [
"futures-io",
"futures-util",
"log",
"openssl",
- "pin-project",
- "tokio 0.2.24",
- "tokio-openssl 0.4.0",
+ "pin-project-lite",
+ "tokio",
+ "tokio-openssl",
"tungstenite",
]
@@ -394,15 +394,6 @@ dependencies = [
[[package]]
name = "block-buffer"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
-dependencies = [
- "generic-array 0.14.4",
-]
-
-[[package]]
-name = "block-buffer"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
@@ -577,12 +568,6 @@ dependencies = [
[[package]]
name = "bytes"
-version = "0.5.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
-
-[[package]]
-name = "bytes"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
@@ -1067,12 +1052,6 @@ dependencies = [
]
[[package]]
-name = "cpuid-bool"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634"
-
-[[package]]
name = "crc32fast"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1263,6 +1242,12 @@ dependencies = [
]
[[package]]
+name = "data-encoding"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb"
+
+[[package]]
name = "data-url"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1388,15 +1373,6 @@ dependencies = [
[[package]]
name = "digest"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
-dependencies = [
- "generic-array 0.14.4",
-]
-
-[[package]]
-name = "digest"
version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
@@ -1897,7 +1873,7 @@ dependencies = [
"futures-sink",
"futures-task",
"memchr",
- "pin-project-lite 0.2.8",
+ "pin-project-lite",
"pin-utils",
"slab",
]
@@ -2587,7 +2563,7 @@ dependencies = [
"http",
"indexmap",
"slab",
- "tokio 1.25.0",
+ "tokio",
"tokio-util",
"tracing",
]
@@ -2648,7 +2624,7 @@ dependencies = [
"http",
"httpdate",
"mime",
- "sha-1 0.10.0",
+ "sha-1 0.10.1",
]
[[package]]
@@ -2723,7 +2699,7 @@ checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6"
dependencies = [
"bytes 1.1.0",
"http",
- "pin-project-lite 0.2.8",
+ "pin-project-lite",
]
[[package]]
@@ -2760,9 +2736,9 @@ dependencies = [
"httparse",
"httpdate",
"itoa 1.0.1",
- "pin-project-lite 0.2.8",
+ "pin-project-lite",
"socket2",
- "tokio 1.25.0",
+ "tokio",
"tower-service",
"tracing",
"want",
@@ -2781,8 +2757,8 @@ dependencies = [
"openssl",
"openssl-sys",
"parking_lot 0.12.0",
- "tokio 1.25.0",
- "tokio-openssl 0.6.3",
+ "tokio",
+ "tokio-openssl",
"tower-layer",
]
@@ -2878,15 +2854,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67f0347836f3f6362c1e7efdadde2b1c4b4556d211310b70631bae7eb692070b"
[[package]]
-name = "input_buffer"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19a8a95243d5a0398cae618ec29477c6e3cb631152be5c19481f80bc71559754"
-dependencies = [
- "bytes 0.5.6",
-]
-
-[[package]]
name = "instant"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3526,7 +3493,7 @@ dependencies = [
"string_cache",
"thin-slice",
"time 0.1.45",
- "tokio 1.25.0",
+ "tokio",
"url",
"uuid",
"void",
@@ -3882,24 +3849,6 @@ dependencies = [
]
[[package]]
-name = "native-tls"
-version = "0.2.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9"
-dependencies = [
- "lazy_static",
- "libc",
- "log",
- "openssl",
- "openssl-probe",
- "openssl-sys",
- "schannel",
- "security-framework",
- "security-framework-sys",
- "tempfile",
-]
-
-[[package]]
name = "ndk"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3978,9 +3927,8 @@ dependencies = [
"sha2",
"std_test_override",
"time 0.1.45",
- "tokio 0.2.24",
- "tokio 1.25.0",
- "tokio-openssl 0.6.3",
+ "tokio",
+ "tokio-openssl",
"tokio-stream",
"tokio-test",
"tungstenite",
@@ -4296,12 +4244,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
[[package]]
-name = "opaque-debug"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
-
-[[package]]
name = "openssl"
version = "0.10.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4328,12 +4270,6 @@ dependencies = [
]
[[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.85"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4664,12 +4600,6 @@ dependencies = [
[[package]]
name = "pin-project-lite"
-version = "0.1.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b"
-
-[[package]]
-name = "pin-project-lite"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c"
@@ -5160,15 +5090,6 @@ dependencies = [
]
[[package]]
-name = "schannel"
-version = "0.1.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
-dependencies = [
- "windows-sys 0.42.0",
-]
-
-[[package]]
name = "scoped-tls"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -5387,29 +5308,6 @@ dependencies = [
]
[[package]]
-name = "security-framework"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1759c2e3c8580017a484a7ac56d3abc5a6c1feadf88db2f3633f12ae4268c69"
-dependencies = [
- "bitflags",
- "core-foundation 0.9.3",
- "core-foundation-sys 0.8.3",
- "libc",
- "security-framework-sys",
-]
-
-[[package]]
-name = "security-framework-sys"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f99b9d5e26d2a71633cc4f2ebae7cc9f874044e0c351a27e17892d76dce5678b"
-dependencies = [
- "core-foundation-sys 0.8.3",
- "libc",
-]
-
-[[package]]
name = "selectors"
version = "0.24.0"
dependencies = [
@@ -5847,27 +5745,25 @@ dependencies = [
"block-buffer 0.7.3",
"digest 0.8.1",
"fake-simd",
- "opaque-debug 0.2.3",
+ "opaque-debug",
]
[[package]]
name = "sha-1"
-version = "0.9.1"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "170a36ea86c864a3f16dd2687712dd6646f7019f301e57537c7f4dc9f5916770"
+checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
dependencies = [
- "block-buffer 0.9.0",
- "cfg-if 0.1.10",
- "cpuid-bool",
- "digest 0.9.0",
- "opaque-debug 0.3.0",
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.10.6",
]
[[package]]
-name = "sha-1"
-version = "0.10.0"
+name = "sha1"
+version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
dependencies = [
"cfg-if 1.0.0",
"cpufeatures",
@@ -6578,23 +6474,6 @@ dependencies = [
[[package]]
name = "tokio"
-version = "0.2.24"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "099837d3464c16a808060bb3f02263b412f6fafcb5d01c533d309985fbeebe48"
-dependencies = [
- "bytes 0.5.6",
- "fnv",
- "iovec",
- "lazy_static",
- "mio 0.6.22",
- "num_cpus",
- "pin-project-lite 0.1.11",
- "slab",
- "tokio-macros 0.2.6",
-]
-
-[[package]]
-name = "tokio"
version = "1.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af"
@@ -6605,28 +6484,17 @@ dependencies = [
"memchr",
"mio 0.8.6",
"num_cpus",
- "pin-project-lite 0.2.8",
+ "pin-project-lite",
"socket2",
- "tokio-macros 1.7.0",
+ "tokio-macros",
"windows-sys 0.42.0",
]
[[package]]
name = "tokio-macros"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e44da00bfc73a25f814cd8d7e57a68a5c31b74b3152a0a1d1f590c97ed06265a"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "tokio-macros"
-version = "1.7.0"
+version = "1.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7"
+checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8"
dependencies = [
"proc-macro2",
"quote",
@@ -6635,16 +6503,6 @@ dependencies = [
[[package]]
name = "tokio-openssl"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c4b08c5f4208e699ede3df2520aca2e82401b2de33f45e96696a074480be594"
-dependencies = [
- "openssl",
- "tokio 0.2.24",
-]
-
-[[package]]
-name = "tokio-openssl"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08f9ffb7809f1b20c1b398d92acf4cc719874b3b2b2d9ea2f09b4a80350878a"
@@ -6652,7 +6510,7 @@ dependencies = [
"futures-util",
"openssl",
"openssl-sys",
- "tokio 1.25.0",
+ "tokio",
]
[[package]]
@@ -6662,8 +6520,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6edf2d6bc038a43d31353570e27270603f4648d18f5ed10c0e179abe43255af"
dependencies = [
"futures-core",
- "pin-project-lite 0.2.8",
- "tokio 1.25.0",
+ "pin-project-lite",
+ "tokio",
]
[[package]]
@@ -6675,7 +6533,7 @@ dependencies = [
"async-stream",
"bytes 1.1.0",
"futures-core",
- "tokio 1.25.0",
+ "tokio",
"tokio-stream",
]
@@ -6688,8 +6546,8 @@ dependencies = [
"bytes 1.1.0",
"futures-core",
"futures-sink",
- "pin-project-lite 0.2.8",
- "tokio 1.25.0",
+ "pin-project-lite",
+ "tokio",
"tracing",
]
@@ -6722,7 +6580,7 @@ checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105"
dependencies = [
"cfg-if 1.0.0",
"log",
- "pin-project-lite 0.2.8",
+ "pin-project-lite",
"tracing-core",
]
@@ -6764,20 +6622,19 @@ checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633"
[[package]]
name = "tungstenite"
-version = "0.11.1"
+version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0308d80d86700c5878b9ef6321f020f29b1bb9d5ff3cab25e75e23f3a492a23"
+checksum = "15fba1a6d6bb030745759a9a2a588bfe8490fc8b4751a277db3a0be1c9ebbf67"
dependencies = [
- "base64 0.12.0",
"byteorder",
- "bytes 0.5.6",
+ "bytes 1.1.0",
+ "data-encoding",
"http",
"httparse",
- "input_buffer",
"log",
- "native-tls",
- "rand 0.7.3",
- "sha-1 0.9.1",
+ "rand 0.8.5",
+ "sha1",
+ "thiserror",
"url",
"utf-8",
]
@@ -6984,7 +6841,7 @@ dependencies = [
"serde",
"serde_json",
"serde_urlencoded",
- "tokio 1.25.0",
+ "tokio",
"tokio-stream",
"tokio-util",
"tower-service",
@@ -7173,7 +7030,7 @@ dependencies = [
"serde_derive",
"serde_json",
"time 0.3.21",
- "tokio 1.25.0",
+ "tokio",
"tokio-stream",
"unicode-segmentation",
"url",
diff --git a/Cargo.toml b/Cargo.toml
index b3d10eae1ea..9e7b7265ddb 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -73,7 +73,6 @@ surfman-chains-api = "0.2"
thin-slice = "0.1.0"
time = "0.1.41"
tokio = "1"
-tokio2 = "0.2"
unicode-bidi = "0.3.4"
unicode-script = "0.5"
url = "2.0"
diff --git a/components/net/Cargo.toml b/components/net/Cargo.toml
index 5e9481fa599..773546efa7f 100644
--- a/components/net/Cargo.toml
+++ b/components/net/Cargo.toml
@@ -16,7 +16,7 @@ doctest = false
[dependencies]
async-recursion = "0.3.2"
-async-tungstenite = { version = "0.9", features = ["tokio-openssl"] }
+async-tungstenite = { version = "0.22", features = ["tokio-openssl"] }
base64 = { workspace = true }
brotli = "3"
bytes = "1"
@@ -60,10 +60,9 @@ servo_config = { path = "../config" }
servo_url = { path = "../url" }
sha2 = "0.10"
time = { workspace = true }
-tokio = { version = "1", package = "tokio", features = ["sync", "macros", "rt-multi-thread"] }
-tokio2 = { version = "0.2", package = "tokio", features = ["sync", "macros", "rt-threaded", "tcp"] }
+tokio = { workspace = true, features = ["sync", "macros", "rt-multi-thread"] }
tokio-stream = "0.1"
-tungstenite = "0.11"
+tungstenite = "0.19"
url = { workspace = true }
uuid = { workspace = true }
webrender_api = { git = "https://github.com/servo/webrender" }
diff --git a/components/net/websocket_loader.rs b/components/net/websocket_loader.rs
index a73b48e1f41..cc9016cfa7b 100644
--- a/components/net/websocket_loader.rs
+++ b/components/net/websocket_loader.rs
@@ -22,7 +22,7 @@ use embedder_traits::resources::{self, Resource};
use futures::future::TryFutureExt;
use futures::sink::SinkExt;
use futures::stream::StreamExt;
-use http::header::{HeaderMap, HeaderName, HeaderValue};
+use http::header::{self, HeaderName, HeaderValue};
use ipc_channel::ipc::{IpcReceiver, IpcSender};
use ipc_channel::router::ROUTER;
use net_traits::request::{RequestBuilder, RequestMode};
@@ -33,14 +33,13 @@ use servo_url::ServoUrl;
use std::fs;
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::{Arc, Mutex};
-use tokio2::net::TcpStream;
-use tokio2::runtime::Runtime;
-use tokio2::select;
-use tokio2::sync::mpsc::{unbounded_channel, UnboundedReceiver};
-use tungstenite::error::Error;
+use tokio::net::TcpStream;
+use tokio::runtime::Runtime;
+use tokio::select;
+use tokio::sync::mpsc::{unbounded_channel, UnboundedReceiver};
use tungstenite::error::Result as WebSocketResult;
+use tungstenite::error::{Error, ProtocolError, UrlError};
use tungstenite::handshake::client::{Request, Response};
-use tungstenite::http::header::{self as WSHeader, HeaderValue as WSHeaderValue};
use tungstenite::protocol::CloseFrame;
use tungstenite::Message;
use url::Url;
@@ -65,20 +64,32 @@ fn create_request(
) -> WebSocketResult<Request> {
let mut builder = Request::get(resource_url.as_str());
let headers = builder.headers_mut().unwrap();
- headers.insert("Origin", WSHeaderValue::from_str(origin)?);
+ headers.insert("Origin", HeaderValue::from_str(origin)?);
+
+ let origin = resource_url.origin();
+ let host = format!(
+ "{}",
+ origin
+ .host()
+ .ok_or_else(|| Error::Url(UrlError::NoHostName))?
+ );
+ headers.insert("Host", HeaderValue::from_str(&host)?);
+ headers.insert("Connection", HeaderValue::from_static("upgrade"));
+ headers.insert("Upgrade", HeaderValue::from_static("websocket"));
+ headers.insert("Sec-Websocket-Version", HeaderValue::from_static("13"));
+
+ let key = HeaderValue::from_str(&tungstenite::handshake::client::generate_key()).unwrap();
+ headers.insert("Sec-WebSocket-Key", key);
if !protocols.is_empty() {
let protocols = protocols.join(",");
- headers.insert(
- "Sec-WebSocket-Protocol",
- WSHeaderValue::from_str(&protocols)?,
- );
+ headers.insert("Sec-WebSocket-Protocol", HeaderValue::from_str(&protocols)?);
}
let mut cookie_jar = http_state.cookie_jar.write().unwrap();
cookie_jar.remove_expired_cookies_for_url(resource_url);
if let Some(cookie_list) = cookie_jar.cookies_for_url(resource_url, CookieSource::HTTP) {
- headers.insert("Cookie", WSHeaderValue::from_str(&cookie_list)?);
+ headers.insert("Cookie", HeaderValue::from_str(&cookie_list)?);
}
if resource_url.password().is_some() || resource_url.username() != "" {
@@ -89,7 +100,7 @@ fn create_request(
));
headers.insert(
"Authorization",
- WSHeaderValue::from_str(&format!("Basic {}", basic))?,
+ HeaderValue::from_str(&format!("Basic {}", basic))?,
);
}
@@ -110,18 +121,18 @@ fn process_ws_response(
trace!("processing websocket http response for {}", resource_url);
let mut protocol_in_use = None;
if let Some(protocol_name) = response.headers().get("Sec-WebSocket-Protocol") {
- let protocol_name = protocol_name.to_str().unwrap();
+ let protocol_name = protocol_name.to_str().unwrap_or("");
if !protocols.is_empty() && !protocols.iter().any(|p| protocol_name == (*p)) {
- return Err(Error::Protocol(
- "Protocol in use not in client-supplied protocol list".into(),
- ));
+ return Err(Error::Protocol(ProtocolError::InvalidHeader(
+ HeaderName::from_static("sec-websocket-protocol"),
+ )));
}
protocol_in_use = Some(protocol_name.to_string());
}
let mut jar = http_state.cookie_jar.write().unwrap();
// TODO(eijebong): Replace thise once typed headers settled on a cookie impl
- for cookie in response.headers().get_all(WSHeader::SET_COOKIE) {
+ for cookie in response.headers().get_all(header::SET_COOKIE) {
if let Ok(s) = std::str::from_utf8(cookie.as_bytes()) {
if let Some(cookie) =
Cookie::from_cookie_string(s.into(), resource_url, CookieSource::HTTP)
@@ -131,23 +142,11 @@ fn process_ws_response(
}
}
- // We need to make a new header map here because tungstenite depends on
- // a more recent version of http than the rest of the network stack, so the
- // HeaderMap types are incompatible.
- let mut headers = HeaderMap::new();
- for (key, value) in response.headers().iter() {
- if let (Ok(key), Ok(value)) = (
- HeaderName::from_bytes(key.as_ref()),
- HeaderValue::from_bytes(value.as_ref()),
- ) {
- headers.insert(key, value);
- }
- }
http_state
.hsts_list
.write()
.unwrap()
- .update_hsts_list_from_response(resource_url, &headers);
+ .update_hsts_list_from_response(resource_url, &response.headers());
Ok(protocol_in_use)
}
@@ -283,6 +282,10 @@ async fn run_ws_loop(
));
break;
}
+
+ Message::Frame(_) => {
+ warn!("Unexpected websocket frame message");
+ }
}
}
}
@@ -309,20 +312,20 @@ async fn start_websocket(
let host_str = client
.uri()
.host()
- .ok_or_else(|| Error::Url("No host string".into()))?;
+ .ok_or_else(|| Error::Url(UrlError::NoHostName))?;
let host = replace_host(host_str);
- let mut net_url =
- Url::parse(&client.uri().to_string()).map_err(|e| Error::Url(e.to_string().into()))?;
+ let mut net_url = Url::parse(&client.uri().to_string())
+ .map_err(|e| Error::Url(UrlError::UnableToConnect(e.to_string())))?;
net_url
.set_host(Some(&host))
- .map_err(|e| Error::Url(e.to_string().into()))?;
+ .map_err(|e| Error::Url(UrlError::UnableToConnect(e.to_string())))?;
let domain = net_url
.host()
- .ok_or_else(|| Error::Url("No host string".into()))?;
+ .ok_or_else(|| Error::Url(UrlError::NoHostName))?;
let port = net_url
.port_or_known_default()
- .ok_or_else(|| Error::Url("Unknown port".into()))?;
+ .ok_or_else(|| Error::Url(UrlError::UnableToConnect("Unknown port".into())))?;
let try_socket = TcpStream::connect((&*domain.to_string(), port)).await;
let socket = try_socket.map_err(Error::Io)?;
@@ -366,32 +369,13 @@ fn connect(
};
// https://fetch.spec.whatwg.org/#websocket-opening-handshake
- // By standard, we should work with an http(s):// URL (req_url),
- // but as ws-rs expects to be called with a ws(s):// URL (net_url)
- // we upgrade ws to wss, so we don't have to convert http(s) back to ws(s).
http_state
.hsts_list
.read()
.unwrap()
.apply_hsts_rules(&mut req_builder.url);
- let scheme = req_builder.url.scheme();
- let mut req_url = req_builder.url.clone();
- match scheme {
- "ws" => {
- req_url
- .as_mut_url()
- .set_scheme("http")
- .map_err(|()| "couldn't replace scheme".to_string())?;
- },
- "wss" => {
- req_url
- .as_mut_url()
- .set_scheme("https")
- .map_err(|()| "couldn't replace scheme".to_string())?;
- },
- _ => {},
- }
+ let req_url = req_builder.url.clone();
if should_be_blocked_due_to_bad_port(&req_url) {
return Err("Port blocked".to_string());
@@ -403,7 +387,7 @@ fn connect(
};
let client = match create_request(
- &req_builder.url,
+ &req_url,
&req_builder.origin.ascii_serialization(),
&protocols,
&*http_state,
diff --git a/servo-tidy.toml b/servo-tidy.toml
index 43bed5a0b93..1c67e86c387 100644
--- a/servo-tidy.toml
+++ b/servo-tidy.toml
@@ -59,10 +59,6 @@ packages = [
"bytes",
"futures",
"mio",
- "pin-project-lite",
- "tokio",
- "tokio-macros",
- "tokio-openssl",
# https://github.com/servo/servo/pull/23288#issuecomment-494687746
"gl_generator",
@@ -79,7 +75,6 @@ packages = [
"block-buffer",
"digest",
"generic-array",
- "opaque-debug",
"sha-1",
# Duplicated by winit/surfman update.