From 953254e55042b057d3dcf3fa411d19fab412004a Mon Sep 17 00:00:00 2001 From: _ <> Date: Sun, 10 Oct 2021 14:49:02 +0000 Subject: [PATCH] :recycle: refactor: continue extracting end server struct --- .../quic_demo/src/executable_end_server.rs | 44 +++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/prototypes/quic_demo/src/executable_end_server.rs b/prototypes/quic_demo/src/executable_end_server.rs index f0afa11..ebfffb9 100644 --- a/prototypes/quic_demo/src/executable_end_server.rs +++ b/prototypes/quic_demo/src/executable_end_server.rs @@ -19,41 +19,59 @@ struct Opt { pub async fn main (args: &[OsString]) -> anyhow::Result <()> { let opt = Arc::new (Opt::from_iter (args)); - let server_cert: Vec = match opt.cert_url.as_ref () { + let relay_cert: Vec = match opt.cert_url.as_ref () { Some (url) => reqwest::get (url).await?.bytes ().await?.into_iter ().collect (), None => tokio::fs::read ("quic_server.crt").await?, }; let relay_addr: SocketAddr = opt.relay_addr.clone ().unwrap_or_else (|| String::from ("127.0.0.1:30380")).parse ()?; - let end_server = P4EndServer { - relay_addr: relay_addr, - server_cert: server_cert, - }; + let id = opt.server_id.clone ().unwrap_or_else (|| "bogus_server".to_string ()); - let endpoint = make_client_endpoint ("0.0.0.0:0".parse ()?, &[&end_server.server_cert])?; + let endpoint = make_client_endpoint ("0.0.0.0:0".parse ()?, &[&relay_cert])?; trace! ("Connecting to relay server"); - let server_id = opt.server_id.clone ().unwrap_or_else (|| "bogus_server".to_string ()); - let quinn::NewConnection { - mut bi_streams, + bi_streams, .. - } = protocol::p4_connect_to_p3 (&endpoint, &end_server.relay_addr, &server_id).await?; + } = protocol::p4_connect_to_p3 (&endpoint, &relay_addr, &id).await?; + + let mut end_server = P4EndServer { + bi_streams, + id, + relay_addr, + relay_cert, + }; debug! ("Connected to relay server"); trace! ("Accepting bi streams from P3"); loop { - let (relay_send, relay_recv) = bi_streams.next ().await.ok_or_else (|| anyhow::anyhow! ("Relay server didn't open a bi stream"))??; + let (relay_send, relay_recv) = end_server.bi_streams.next ().await.ok_or_else (|| anyhow::anyhow! ("Relay server didn't open a bi stream"))??; tokio::spawn (handle_bi_stream (Arc::clone (&opt), relay_send, relay_recv)); } } -struct P4EndServer { +pub struct P4EndServer { + bi_streams: quinn::IncomingBiStreams, + id: String, relay_addr: SocketAddr, - server_cert: Vec , + relay_cert: Vec , +} + +impl P4EndServer { + pub fn id (&self) -> &str { + &self.id + } + + pub fn relay_addr (&self) -> SocketAddr { + self.relay_addr + } + + pub fn relay_cert (&self) -> &[u8] { + &self.relay_cert + } } async fn handle_bi_stream (