From 7ab36f8ac32273d2f6f4a2ac8cf662ea953cc800 Mon Sep 17 00:00:00 2001 From: Yash Karandikar Date: Fri, 24 Jun 2022 13:13:29 +0530 Subject: [PATCH] Restructure HashMap code --- .gitignore | 1 + src/main.rs | 24 +++++++++++------------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index ea8c4bf..4a3b37d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +config.toml diff --git a/src/main.rs b/src/main.rs index 81438ee..3304a54 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,29 +6,27 @@ use tokio::net::{TcpListener, TcpStream}; #[tokio::main] async fn main() -> anyhow::Result<()> { let filename = std::env::args() - .next() + .nth(1) .unwrap_or_else(|| "config.toml".to_string()); - let contents = std::fs::read_to_string(filename)?; + let contents = std::fs::read_to_string(filename).unwrap(); - let mut ports: HashMap = toml::from_str(&contents)?; - - let listener = TcpListener::bind("0.0.0.0:8000").await?; - - loop { - let (stream, addr) = listener.accept().await?; - let to_addr = match ports.get(&addr.port()) { - Some(v) => *v, - None => continue, - }; - let to_stream = TcpStream::connect(to_addr).await?; // TODO: remove this placeholder + let ports: HashMap = toml::from_str(&contents)?; + for (&saddr, &port) in &ports { tokio::spawn(async move { + let listener = TcpListener::bind(SocketAddr::new("0.0.0.0".parse()?, port)).await?; + let (stream, _) = listener.accept().await?; + let to_stream = TcpStream::connect(saddr).await?; + proxy(stream, to_stream).await?; Ok::<(), anyhow::Error>(()) }); } + + #[allow(clippy::empty_loop)] + loop {} } async fn proxy(left: TcpStream, right: TcpStream) -> anyhow::Result<()> {