diff --git a/tuic-server/src/connection/handle_task.rs b/tuic-server/src/connection/handle_task.rs index 7d584baa..850cde8c 100644 --- a/tuic-server/src/connection/handle_task.rs +++ b/tuic-server/src/connection/handle_task.rs @@ -32,7 +32,7 @@ impl Connection { let target_addr = conn.addr().to_string(); info!( - "[{id:#010x}] [{addr}] [{user}] [TCP] {target_addr}", + "[{id:#010x}] [{addr}] [{user}] [TCP] {target_addr} ", id = self.id(), addr = self.inner.remote_address(), user = self.auth, @@ -63,6 +63,7 @@ impl Connection { // a <- b rx let (tx, rx, err) = exchange_tcp(&mut conn, &mut stream, self.ctx.cfg.stream_timeout).await; + // let (tx, rx) = tokio::io::copy_bidirectional(&mut conn, &mut stream).await?; _ = conn.reset(ERROR_CODE); _ = stream.shutdown().await; diff --git a/tuic-server/src/connection/mod.rs b/tuic-server/src/connection/mod.rs index fbc20d23..658fd79e 100644 --- a/tuic-server/src/connection/mod.rs +++ b/tuic-server/src/connection/mod.rs @@ -19,7 +19,7 @@ mod handle_stream; mod handle_task; mod udp_session; -pub const ERROR_CODE: VarInt = VarInt::from_u32(0); +pub const ERROR_CODE: VarInt = VarInt::from_u32(6000); pub const INIT_CONCURRENT_STREAMS: u32 = 32; #[derive(Clone)] diff --git a/tuic-server/src/io.rs b/tuic-server/src/io.rs index 25eb2a52..c184e500 100644 --- a/tuic-server/src/io.rs +++ b/tuic-server/src/io.rs @@ -4,6 +4,7 @@ use tokio::io::{AsyncReadExt, AsyncWriteExt}; const BUFFER_SIZE: usize = 8 * 1024; +#[allow(dead_code)] pub async fn exchange_tcp( a: &mut tuic_quinn::Connect, b: &mut tokio::net::TcpStream, @@ -18,6 +19,7 @@ pub async fn exchange_tcp( let mut last_err = None; let mut timeout = tokio::time::interval(timeout); timeout.reset(); + loop { tokio::select! { _ = timeout.tick() => { @@ -28,7 +30,7 @@ pub async fn exchange_tcp( a2b_res = a.recv.read(&mut a2b) => match a2b_res { Ok(Some(num)) => { a2b_num += num; - if let Err(err) = b.write(&a2b).await { + if let Err(err) = b.write_all(&a2b[..num]).await { last_err = Some(err.into()); break; } @@ -50,7 +52,7 @@ pub async fn exchange_tcp( break; } b2a_num += num; - if let Err(err) = a.send.write(&b2a).await { + if let Err(err) = a.send.write_all(&b2a[..num]).await { last_err = Some(err.into()); break; }