Deduplicate copy method

Signed-off-by: Jacob Kiers <code@kiers.eu>
This commit is contained in:
Jacob Kiers 2023-10-04 20:50:40 +02:00
parent da46c5873f
commit 8dae1126d5
3 changed files with 19 additions and 31 deletions

View File

@ -2,6 +2,8 @@ use log::{error, info};
use std::collections::{HashMap, HashSet}; use std::collections::{HashMap, HashSet};
use std::net::SocketAddr; use std::net::SocketAddr;
use std::sync::Arc; use std::sync::Arc;
use tokio::io;
use tokio::io::{AsyncRead, AsyncWrite, AsyncWriteExt};
use tokio::task::JoinHandle; use tokio::task::JoinHandle;
mod protocol; mod protocol;
@ -210,3 +212,17 @@ mod tests {
// conn.shutdown().await.unwrap(); // conn.shutdown().await.unwrap();
} }
} }
async fn copy<'a, R, W>(reader: &'a mut R, writer: &'a mut W) -> io::Result<u64>
where
R: AsyncRead + Unpin + ?Sized,
W: AsyncWrite + Unpin + ?Sized,
{
match io::copy(reader, writer).await {
Ok(u64) => {
let _ = writer.shutdown().await;
Ok(u64)
}
Err(_) => Ok(0),
}
}

View File

@ -1,6 +1,6 @@
use crate::config::Upstream; use crate::config::Upstream;
use crate::plugins::kcp::{KcpConfig, KcpListener, KcpStream}; use crate::plugins::kcp::{KcpConfig, KcpListener, KcpStream};
use crate::servers::Proxy; use crate::servers::{copy, Proxy};
use futures::future::try_join; use futures::future::try_join;
use log::{debug, error, warn}; use log::{debug, error, warn};
use std::net::SocketAddr; use std::net::SocketAddr;
@ -96,17 +96,3 @@ async fn process(
}; };
Ok(()) Ok(())
} }
async fn copy<'a, R, W>(reader: &'a mut R, writer: &'a mut W) -> io::Result<u64>
where
R: AsyncRead + Unpin + ?Sized,
W: AsyncWrite + Unpin + ?Sized,
{
match io::copy(reader, writer).await {
Ok(u64) => {
let _ = writer.shutdown().await;
Ok(u64)
}
Err(_) => Ok(0),
}
}

View File

@ -1,11 +1,11 @@
use crate::config::Upstream; use crate::config::Upstream;
use crate::servers::protocol::tls::get_sni; use crate::servers::protocol::tls::get_sni;
use crate::servers::Proxy; use crate::servers::{copy, Proxy};
use futures::future::try_join; use futures::future::try_join;
use log::{debug, error, info, warn}; use log::{debug, error, info, warn};
use std::sync::Arc; use std::sync::Arc;
use tokio::io; use tokio::io;
use tokio::io::{AsyncRead, AsyncWrite, AsyncWriteExt}; use tokio::io::AsyncWriteExt;
use tokio::net::{TcpListener, TcpStream}; use tokio::net::{TcpListener, TcpStream};
pub(crate) async fn proxy(config: Arc<Proxy>) -> Result<(), Box<dyn std::error::Error>> { pub(crate) async fn proxy(config: Arc<Proxy>) -> Result<(), Box<dyn std::error::Error>> {
@ -120,17 +120,3 @@ async fn process(
}; };
Ok(()) Ok(())
} }
async fn copy<'a, R, W>(reader: &'a mut R, writer: &'a mut W) -> io::Result<u64>
where
R: AsyncRead + Unpin + ?Sized,
W: AsyncWrite + Unpin + ?Sized,
{
match io::copy(reader, writer).await {
Ok(u64) => {
let _ = writer.shutdown().await;
Ok(u64)
}
Err(_) => Ok(0),
}
}