Skip to content

Commit 21691a3

Browse files
committed
feat: tunnel fallback support
1 parent f69e54d commit 21691a3

1 file changed

Lines changed: 29 additions & 11 deletions

File tree

src/servers.rs

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,41 @@ pub fn start_all_servers(ctx: Arc<ClientContext>) {
2929
let qos = qos::start_qos_server();
3030
run_server(qos, "qos");
3131

32+
// Spawn tunnel server
33+
let tunnel = start_tunnel_server(ctx.clone());
34+
run_server(tunnel, "tunnel");
35+
36+
// Spawn telemetry server
37+
let telemetry = telemetry::start_telemetry_server(ctx);
38+
run_server(telemetry, "telemetry");
39+
}
40+
41+
/// Runs the tunnel server, if a tunnel port is available a UDP tunnel will be
42+
/// attempted, if that fails or a tunnel port is unavailable an HTTP tunnel
43+
/// will be attempted instead
44+
async fn start_tunnel_server(ctx: Arc<ClientContext>) -> std::io::Result<()> {
3245
// Spawn tunnel server
3346
match ctx.tunnel_port {
3447
// When UDP tunnel server port is available use the faster UDP tunnel server
3548
Some(tunnel_port) => {
36-
let tunnel = udp_tunnel::start_udp_tunnel_server(ctx.clone(), tunnel_port);
37-
run_server(tunnel, "tunnel");
49+
let err = match udp_tunnel::start_udp_tunnel_server(ctx.clone(), tunnel_port).await {
50+
// Encountered error with UDP tunnel
51+
Err(err) => err,
52+
// Server exited normally
53+
Ok(_) => return Ok(()),
54+
};
55+
56+
error!(
57+
"error using UDP tunnel, falling back to HTTP tunnel: {}",
58+
err
59+
);
60+
61+
// Error while connecting UDP tunnel, fallback to HTTP upgrade tunnel
62+
tunnel::start_tunnel_server(ctx).await
3863
}
3964
// When unavailable fallback to the HTTP upgrade tunnel
40-
None => {
41-
let tunnel = tunnel::start_tunnel_server(ctx.clone());
42-
run_server(tunnel, "tunnel");
43-
}
44-
};
45-
46-
// Spawn telemetry server
47-
let telemetry = telemetry::start_telemetry_server(ctx);
48-
run_server(telemetry, "telemetry");
65+
None => tunnel::start_tunnel_server(ctx).await,
66+
}
4967
}
5068

5169
/// Runs the provided server `future` in a background task displaying

0 commit comments

Comments
 (0)