From 3f4bce85a4e8d90ac7ffce321bad09173796936f Mon Sep 17 00:00:00 2001 From: "(on company time)" <_@_> Date: Mon, 19 Dec 2022 16:25:50 -0600 Subject: [PATCH] :white_check_mark: UDP-over-TCP passes okay Next step is updating the relay and making sure it integrates into (our thing that uses PTTH_QUIC) --- .../src/bin/ptth_quic_relay_server.rs | 2 +- .../ptth_quic/src/executable_relay_server.rs | 38 +++++++++++++------ crates/ptth_quic/src/tests.rs | 34 +++++++++++++++-- crates/udp_over_tcp/src/server.rs | 37 ++++++++++++++---- 4 files changed, 88 insertions(+), 23 deletions(-) diff --git a/crates/ptth_quic/src/bin/ptth_quic_relay_server.rs b/crates/ptth_quic/src/bin/ptth_quic_relay_server.rs index 49b6f9f..d7a9828 100644 --- a/crates/ptth_quic/src/bin/ptth_quic_relay_server.rs +++ b/crates/ptth_quic/src/bin/ptth_quic_relay_server.rs @@ -18,7 +18,7 @@ async fn main () -> anyhow::Result <()> { })?; trace! ("Set Ctrl+C handler"); - let app = relay::App::new (opt)?; + let app = relay::App::new (opt).await?; println! ("Base64 cert: {}", base64::encode (app.server_cert ())); println! ("Listening on {}", app.listen_addr ()); diff --git a/crates/ptth_quic/src/executable_relay_server.rs b/crates/ptth_quic/src/executable_relay_server.rs index 9e149b5..d5cf41d 100644 --- a/crates/ptth_quic/src/executable_relay_server.rs +++ b/crates/ptth_quic/src/executable_relay_server.rs @@ -30,7 +30,7 @@ pub struct App { listen_addr: SocketAddr, pub (crate) metrics: Arc >, server_cert: Vec , - tcp_listen_port: Option , + tcp_listener: Option , } #[derive (Default)] @@ -39,18 +39,30 @@ pub (crate) struct Metrics { } impl App { - pub fn new (opt: Opt) -> anyhow::Result { + pub async fn new (opt: Opt) -> anyhow::Result { let listen_addr = opt.listen_addr.unwrap_or_else (|| String::from ("0.0.0.0:30380")).parse ()?; let (endpoint, server_cert) = make_server_endpoint (listen_addr)?; let listen_addr = endpoint.local_addr ()?; + let tcp_listener = if let Some (tcp_port) = opt.tcp_listen_port { + let cfg = udp_over_tcp::server::Config { + tcp_port, + udp_port: listen_addr.port (), + }; + + Some (udp_over_tcp::server::Listener::new (cfg).await?) + } + else { + None + }; + Ok (Self { endpoint, listen_addr, metrics: Default::default (), server_cert, - tcp_listen_port: opt.tcp_listen_port, + tcp_listener, }) } @@ -62,13 +74,20 @@ impl App { &self.server_cert } + pub fn tcp_listen_port (&self) -> anyhow::Result