Skip to content

Commit f54e67e

Browse files
committed
fix(eio): fail properly on connection error
1 parent 857cffd commit f54e67e

File tree

4 files changed

+29
-26
lines changed

4 files changed

+29
-26
lines changed

ci/engine-io-polling.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ const engine = require('engine.io');
55
const http = require('http').createServer().listen(4203);
66
// the engine.io client runs on port 4203
77
const server = engine.attach(http, {
8-
allowUpgrades: false
8+
allowUpgrades: false,
9+
transports: ["polling"]
910
});
1011

1112
console.log("Started")

engineio/src/client/socket.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ impl SocketBuilder {
205205
self.headers
206206
.clone()
207207
.map(|headers| headers.try_into().unwrap()),
208-
);
208+
)?;
209209
if self.handshake.is_some() {
210210
transport.upgrade()?;
211211
} else {
@@ -230,7 +230,7 @@ impl SocketBuilder {
230230
url,
231231
self.tls_config.clone(),
232232
self.headers.clone().map(|v| v.try_into().unwrap()),
233-
);
233+
)?;
234234
if self.handshake.is_some() {
235235
transport.upgrade()?;
236236
} else {
@@ -542,7 +542,8 @@ mod test {
542542
#[test]
543543
fn test_connection_ws() -> Result<()> {
544544
let url = crate::test::engine_io_polling_server()?;
545-
assert!(builder(url).build_websocket().is_err());
545+
assert!(builder(url.clone()).build_websocket().is_err());
546+
assert!(builder(url).build_websocket_with_upgrade().is_err());
546547

547548
let mut url = crate::test::engine_io_server()?;
548549

engineio/src/transports/websocket.rs

+9-12
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,26 @@ pub struct WebsocketTransport {
2020

2121
impl WebsocketTransport {
2222
/// Creates an instance of `WebsocketTransport`.
23-
pub fn new(base_url: Url, headers: Option<Headers>) -> Self {
23+
pub fn new(base_url: Url, headers: Option<Headers>) -> Result<Self> {
2424
let mut url = base_url;
2525
url.query_pairs_mut().append_pair("transport", "websocket");
2626
url.set_scheme("ws").unwrap();
27-
let mut client_builder = WsClientBuilder::new(url[..].as_ref()).unwrap();
27+
let mut client_builder = WsClientBuilder::new(url[..].as_ref())?;
2828
if let Some(headers) = headers {
2929
client_builder = client_builder.custom_headers(&headers);
3030
}
31-
let client = client_builder.connect_insecure().unwrap();
31+
let client = client_builder.connect_insecure()?;
3232

33-
client.set_nonblocking(false).unwrap();
33+
client.set_nonblocking(false)?;
3434

35-
let (receiver, sender) = client.split().unwrap();
35+
let (receiver, sender) = client.split()?;
3636

37-
WebsocketTransport {
37+
Ok(WebsocketTransport {
3838
sender: Arc::new(Mutex::new(sender)),
3939
receiver: Arc::new(Mutex::new(receiver)),
4040
// SAFTEY: already a URL parsing can't fail
41-
base_url: Arc::new(RwLock::new(url::Url::parse(&url.to_string()).unwrap())),
42-
}
41+
base_url: Arc::new(RwLock::new(url::Url::parse(&url.to_string())?)),
42+
})
4343
}
4444

4545
/// Sends probe packet to ensure connection is valid, then sends upgrade
@@ -136,10 +136,7 @@ mod test {
136136

137137
fn new() -> Result<WebsocketTransport> {
138138
let url = crate::test::engine_io_server()?.to_string() + "engine.io/?EIO=4";
139-
Ok(WebsocketTransport::new(
140-
Url::from_str(&url[..]).unwrap(),
141-
None,
142-
))
139+
WebsocketTransport::new(Url::from_str(&url[..])?, None)
143140
}
144141

145142
#[test]

engineio/src/transports/websocket_secure.rs

+14-10
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,27 @@ pub struct WebsocketSecureTransport {
2727

2828
impl WebsocketSecureTransport {
2929
/// Creates an instance of `WebsocketSecureTransport`.
30-
pub fn new(base_url: Url, tls_config: Option<TlsConnector>, headers: Option<Headers>) -> Self {
30+
pub fn new(
31+
base_url: Url,
32+
tls_config: Option<TlsConnector>,
33+
headers: Option<Headers>,
34+
) -> Result<Self> {
3135
let mut url = base_url;
3236
url.query_pairs_mut().append_pair("transport", "websocket");
3337
url.set_scheme("wss").unwrap();
34-
let mut client_builder = WsClientBuilder::new(url[..].as_ref()).unwrap();
38+
let mut client_builder = WsClientBuilder::new(url[..].as_ref())?;
3539
if let Some(headers) = headers {
3640
client_builder = client_builder.custom_headers(&headers);
3741
}
38-
let client = client_builder.connect_secure(tls_config).unwrap();
42+
let client = client_builder.connect_secure(tls_config)?;
3943

40-
client.set_nonblocking(false).unwrap();
44+
client.set_nonblocking(false)?;
4145

42-
WebsocketSecureTransport {
46+
Ok(WebsocketSecureTransport {
4347
client: Arc::new(Mutex::new(client)),
4448
// SAFTEY: already a URL parsing can't fail
45-
base_url: Arc::new(RwLock::new(url::Url::parse(&url.to_string()).unwrap())),
46-
}
49+
base_url: Arc::new(RwLock::new(url::Url::parse(&url.to_string())?)),
50+
})
4751
}
4852

4953
/// Sends probe packet to ensure connection is valid, then sends upgrade
@@ -142,11 +146,11 @@ mod test {
142146
use std::str::FromStr;
143147
fn new() -> Result<WebsocketSecureTransport> {
144148
let url = crate::test::engine_io_server_secure()?.to_string() + "engine.io/?EIO=4";
145-
Ok(WebsocketSecureTransport::new(
146-
Url::from_str(&url[..]).unwrap(),
149+
WebsocketSecureTransport::new(
150+
Url::from_str(&url[..])?,
147151
Some(crate::test::tls_connector()?),
148152
None,
149-
))
153+
)
150154
}
151155
#[test]
152156
fn websocket_secure_transport_base_url() -> Result<()> {

0 commit comments

Comments
 (0)