diff --git a/src/server.rs b/src/server.rs index 636fddc..7d3f8de 100644 --- a/src/server.rs +++ b/src/server.rs @@ -10,54 +10,60 @@ pub fn run() { )) .unwrap(); - for stream in server.incoming() { - match stream { - Ok(mut client) => { - println!("Client connected"); - let mut buf = [0; 1024]; + loop { + for stream in server.incoming() { + match stream { + Ok(mut client) => { + println!("Client connected"); + let mut buf = [0; 1024]; - let buf_len = client.read(&mut buf).unwrap(); + let buf_len = client.read(&mut buf).unwrap(); - let req = String::from_utf8_lossy(&buf[..buf_len]); - let req = req.lines().collect::>(); + let req = String::from_utf8_lossy(&buf[..buf_len]); + let req = req.lines().collect::>(); - if req[0].starts_with("ROUTE") { - println!("Route mode"); - let addr = req[0].split_once(' ').unwrap().1; - println!("Connecting to {addr}"); - let mut target = TcpStream::connect(addr).unwrap(); - let mut target_t = target.try_clone().unwrap(); - let mut client_t = client.try_clone().unwrap(); - println!("Connected to {addr}"); - client.write_all("CONN EST".as_bytes()).unwrap(); + if req.len() == 0 { + continue; + } + + if req[0].starts_with("ROUTE") { + println!("Route mode"); + let addr = req[0].split_once(' ').unwrap().1; + println!("Connecting to {addr}"); + let mut target = TcpStream::connect(addr).unwrap(); + let mut target_t = target.try_clone().unwrap(); + let mut client_t = client.try_clone().unwrap(); + println!("Connected to {addr}"); + client.write_all("CONN EST".as_bytes()).unwrap(); + + std::thread::spawn(move || { + loop { + let mut buf = [0; 2048]; + let buf_len = client_t.read(&mut buf).unwrap(); + if buf_len == 0 { + target_t.shutdown(std::net::Shutdown::Both).unwrap(); + break; + } + println!("Client -> Target {:?}", &buf[..buf_len]); + target_t.write_all(&buf[..buf_len]).unwrap(); + } + }); - std::thread::spawn(move || { loop { let mut buf = [0; 2048]; - let buf_len = client_t.read(&mut buf).unwrap(); + let buf_len = target.read(&mut buf).unwrap(); if buf_len == 0 { - target_t.shutdown(std::net::Shutdown::Both).unwrap(); + client.shutdown(std::net::Shutdown::Both).unwrap(); break; } - println!("Client -> Target {:?}", &buf[..buf_len]); - target_t.write_all(&buf[..buf_len]).unwrap(); + println!("Target -> Client {:?}", &buf[..buf_len]); + client.write_all(&buf[..buf_len]).unwrap(); } - }); - - loop { - let mut buf = [0; 2048]; - let buf_len = target.read(&mut buf).unwrap(); - if buf_len == 0 { - client.shutdown(std::net::Shutdown::Both).unwrap(); - break; - } - println!("Target -> Client {:?}", &buf[..buf_len]); - client.write_all(&buf[..buf_len]).unwrap(); } } - } - Err(_) => {} + Err(_) => {} + } } } }