Skip to content

Commit 748141c

Browse files
melekesark0f
authored andcommitted
[client/network] Add support for /wss addresses (paritytech#13152)
* join dns with another instance of WS transport Secure Websocket transport needs unresolved addresses, so we join DNS transport with yet another instance of Websocket transport. Closes paritytech#12024 * WSS transport itself need to wrap DNS transport in order to resolve addresses before passing them down to TCP transport Refs libp2p/rust-libp2p#3330 * reverse order * simplify code: remove WS from WSS inner DNS transport * remove the 2nd instance of WS transport
1 parent eeb490e commit 748141c

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

client/network/src/transport.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,18 +54,27 @@ pub fn build_transport(
5454
) -> (Boxed<(PeerId, StreamMuxerBox)>, Arc<BandwidthSinks>) {
5555
// Build the base layer of the transport.
5656
let transport = if !memory_only {
57+
// Main transport: DNS(TCP)
5758
let tcp_config = tcp::Config::new().nodelay(true);
58-
let desktop_trans = tcp::tokio::Transport::new(tcp_config.clone());
59-
let desktop_trans = websocket::WsConfig::new(desktop_trans)
60-
.or_transport(tcp::tokio::Transport::new(tcp_config.clone()));
61-
let dns_init = dns::TokioDnsConfig::system(desktop_trans);
59+
let tcp_trans = tcp::tokio::Transport::new(tcp_config.clone());
60+
let dns_init = dns::TokioDnsConfig::system(tcp_trans);
61+
6262
EitherTransport::Left(if let Ok(dns) = dns_init {
63-
EitherTransport::Left(dns)
63+
// WS + WSS transport
64+
//
65+
// Main transport can't be used for `/wss` addresses because WSS transport needs
66+
// unresolved addresses (BUT WSS transport itself needs an instance of DNS transport to
67+
// resolve and dial addresses).
68+
let tcp_trans = tcp::tokio::Transport::new(tcp_config);
69+
let dns_for_wss = dns::TokioDnsConfig::system(tcp_trans)
70+
.expect("same system_conf & resolver to work");
71+
EitherTransport::Left(websocket::WsConfig::new(dns_for_wss).or_transport(dns))
6472
} else {
65-
let desktop_trans = tcp::tokio::Transport::new(tcp_config.clone());
66-
let desktop_trans = websocket::WsConfig::new(desktop_trans)
73+
// In case DNS can't be constructed, fallback to TCP + WS (WSS won't work)
74+
let tcp_trans = tcp::tokio::Transport::new(tcp_config.clone());
75+
let desktop_trans = websocket::WsConfig::new(tcp_trans)
6776
.or_transport(tcp::tokio::Transport::new(tcp_config));
68-
EitherTransport::Right(desktop_trans.map_err(dns::DnsErr::Transport))
77+
EitherTransport::Right(desktop_trans)
6978
})
7079
} else {
7180
EitherTransport::Right(OptionalTransport::some(

0 commit comments

Comments
 (0)