From b695d2fa1cda6953f953a56de227c0b0dd63e78b Mon Sep 17 00:00:00 2001 From: 17ms <79069176+17ms@users.noreply.github.com> Date: Mon, 29 May 2023 02:42:38 +0300 Subject: [PATCH] fixed public ip binding --- src/main.rs | 6 +++--- src/server.rs | 10 +++++++--- src/util.rs | 10 ++++++---- tests/sockets_integration.rs | 9 ++++----- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/main.rs b/src/main.rs index 8d455bf..ef8827b 100755 --- a/src/main.rs +++ b/src/main.rs @@ -79,16 +79,16 @@ async fn main() -> Result<(), Box> { let paths = filepaths(source, files)?; let (metadata, index) = metadata(&paths).await?; - let addr = match (local, ipv6) { + let (display_addr, bind_addr) = match (local, ipv6) { (true, _) => Ip::Local.fetch(port)?, (false, true) => Ip::V6.fetch(port)?, (false, false) => Ip::V4.fetch(port)?, }; - let server = Server::new(addr, key, chunksize, metadata, index); + let server = Server::new(display_addr, key, chunksize, metadata, index); tokio::spawn(async move { - match server.start(rx).await { + match server.start(rx, &bind_addr).await { Ok(_) => {} Err(e) => error!("Error during server execution: {}", e), }; diff --git a/src/server.rs b/src/server.rs index 636092f..af5b61e 100644 --- a/src/server.rs +++ b/src/server.rs @@ -39,15 +39,19 @@ impl Server { pub async fn start( self: Arc, mut kill: mpsc::Receiver<()>, + bind_addr: &SocketAddr, ) -> Result<(), Box> { tokio::select! { - _ = self.listen() => Ok(()), + _ = self.listen(bind_addr) => Ok(()), _ = kill.recv() => Ok(()), } } - async fn listen(self: Arc) -> Result<(), Box> { - let listener = TcpListener::bind(self.addr).await?; + async fn listen( + self: Arc, + bind_addr: &SocketAddr, + ) -> Result<(), Box> { + let listener = TcpListener::bind(bind_addr).await?; info!("Listening on {} - Access key: {}", self.addr, self.key); diff --git a/src/util.rs b/src/util.rs index 062e2a8..9fdd279 100644 --- a/src/util.rs +++ b/src/util.rs @@ -16,24 +16,26 @@ pub enum Ip { } impl Ip { - pub fn fetch(self, port: u16) -> Result> { + pub fn fetch(self, port: u16) -> Result<(SocketAddr, SocketAddr), Box> { let addr = match self { Ip::V4 => PUBLIC_IPV4, Ip::V6 => PUBLIC_IPV6, Ip::Local => { let addr_str = format!("127.0.0.1:{}", port); - return Ok(addr_str.parse::()?); + let addr = addr_str.parse::()?; + return Ok((addr, addr)); } }; info!("Fetching IP information from {}", addr); let res = format!("{}:{}", ureq::get(addr).call()?.into_string()?.trim(), port); - let addr = res.parse::()?; + let display_addr = res.parse::()?; + let bind_addr = format!("0.0.0.0:{}", port).parse::()?; debug!("IP: {}", res); - Ok(addr) + Ok((display_addr, bind_addr)) } } diff --git a/tests/sockets_integration.rs b/tests/sockets_integration.rs index d799bcc..b013620 100644 --- a/tests/sockets_integration.rs +++ b/tests/sockets_integration.rs @@ -24,14 +24,13 @@ async fn sockets_integration() { .is_test(true) .try_init() .unwrap(); - //env_logger::builder().is_test(true).try_init().unwrap(); debug!("Initializing and starting the test"); let (testdata, paths) = testdata(); let (metadata, index) = metadata(&paths).await.unwrap(); - let addr = Ip::Local.fetch(8080).unwrap(); + let (display_addr, bind_addr) = Ip::Local.fetch(8080).unwrap(); let outdir = PathBuf::from("./tests/output/"); let key = String::from("testkey"); let c_key = key.clone(); @@ -40,14 +39,14 @@ async fn sockets_integration() { let server_handle = tokio::spawn(async move { debug!("Initializing the asynchronous server task"); - let server = Server::new(addr, key, 8192, metadata, index); + let server = Server::new(display_addr, key, 8192, metadata, index); debug!("Starting to listen to incoming connections"); - server.start(rx).await.unwrap(); + server.start(rx, &bind_addr).await.unwrap(); }); let client_handle = tokio::spawn(async move { debug!("Initializing the asynchronous client task"); - let client = Client::new(addr, c_key, outdir); + let client = Client::new(display_addr, c_key, outdir); debug!("Connecting to the server"); client.connection().await.unwrap(); });