Deduplicate copy method
Signed-off-by: Jacob Kiers <code@kiers.eu>
This commit is contained in:
parent
da46c5873f
commit
8dae1126d5
@ -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),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -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),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -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),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user