Fixed len 0 but index 0

This commit is contained in:
2025-08-16 05:34:30 +02:00
parent 1800f2acea
commit 53449db7c6
+41 -35
View File
@@ -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::<Vec<_>>();
let req = String::from_utf8_lossy(&buf[..buf_len]);
let req = req.lines().collect::<Vec<_>>();
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(_) => {}
}
}
}
}