feat: pending implement quic qinn
This commit is contained in:
@@ -4,7 +4,6 @@ use std::time::Duration;
|
||||
use futures::future::try_join;
|
||||
use rust_util::util_msg;
|
||||
use rust_util::util_msg::MessageType;
|
||||
use s2n_quic::stream::BidirectionalStream;
|
||||
use tokio::{select, time};
|
||||
use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt};
|
||||
use tokio::net::TcpStream;
|
||||
@@ -15,33 +14,33 @@ enum StreamDirection {
|
||||
Down,
|
||||
}
|
||||
|
||||
pub async fn transfer_for_server_to_remote(inbound: BidirectionalStream, proxy_addr: String, conn_count: String) -> Result<(), String> {
|
||||
let mut outbound = match TcpStream::connect(&proxy_addr).await {
|
||||
Ok(outbound) => outbound,
|
||||
Err(e) => {
|
||||
return Err(format!("[conn {}] Failed to connect to: {}, err: {}", &conn_count, &proxy_addr, e));
|
||||
}
|
||||
};
|
||||
if let (Ok(ref in_peer_addr), Ok(ref in_local_addr), Ok(ref out_local_addr), Ok(ref out_peer_addr))
|
||||
= (inbound.connection().remote_addr(), inbound.connection().local_addr(), outbound.local_addr(), outbound.peer_addr()) {
|
||||
let peer = format!("{} -> [{} * {}] -> {}", in_peer_addr, in_local_addr, out_local_addr, out_peer_addr);
|
||||
information!("[conn {}] New server-remote tcp connection: {}", &conn_count, peer);
|
||||
}
|
||||
let (mut ri, mut wi) = inbound.split();
|
||||
let (mut ro, mut wo) = outbound.split();
|
||||
inner_transfer(&mut ri, &mut wi, &mut ro, &mut wo, conn_count).await
|
||||
}
|
||||
|
||||
pub async fn transfer_for_client_to_server(mut inbound: TcpStream, outbound: BidirectionalStream, conn_count: String) -> Result<(), String> {
|
||||
if let (Ok(ref in_peer_addr), Ok(ref in_local_addr), Ok(ref out_local_addr), Ok(ref out_peer_addr))
|
||||
= (inbound.peer_addr(), inbound.local_addr(), outbound.connection().local_addr(), outbound.connection().remote_addr()) {
|
||||
let peer = format!("{} -> [{} * {}] -> {}", in_peer_addr, in_local_addr, out_local_addr, out_peer_addr);
|
||||
information!("[conn {}] New client-server tcp connection: {}", &conn_count, peer);
|
||||
}
|
||||
let (mut ri, mut wi) = inbound.split();
|
||||
let (mut ro, mut wo) = outbound.split();
|
||||
inner_transfer(&mut ri, &mut wi, &mut ro, &mut wo, conn_count).await
|
||||
}
|
||||
// pub async fn transfer_for_server_to_remote(inbound: BidirectionalStream, proxy_addr: String, conn_count: String) -> Result<(), String> {
|
||||
// let mut outbound = match TcpStream::connect(&proxy_addr).await {
|
||||
// Ok(outbound) => outbound,
|
||||
// Err(e) => {
|
||||
// return Err(format!("[conn {}] Failed to connect to: {}, err: {}", &conn_count, &proxy_addr, e));
|
||||
// }
|
||||
// };
|
||||
// if let (Ok(ref in_peer_addr), Ok(ref in_local_addr), Ok(ref out_local_addr), Ok(ref out_peer_addr))
|
||||
// = (inbound.connection().remote_addr(), inbound.connection().local_addr(), outbound.local_addr(), outbound.peer_addr()) {
|
||||
// let peer = format!("{} -> [{} * {}] -> {}", in_peer_addr, in_local_addr, out_local_addr, out_peer_addr);
|
||||
// information!("[conn {}] New server-remote tcp connection: {}", &conn_count, peer);
|
||||
// }
|
||||
// let (mut ri, mut wi) = inbound.split();
|
||||
// let (mut ro, mut wo) = outbound.split();
|
||||
// inner_transfer(&mut ri, &mut wi, &mut ro, &mut wo, conn_count).await
|
||||
// }
|
||||
//
|
||||
// pub async fn transfer_for_client_to_server(mut inbound: TcpStream, outbound: BidirectionalStream, conn_count: String) -> Result<(), String> {
|
||||
// if let (Ok(ref in_peer_addr), Ok(ref in_local_addr), Ok(ref out_local_addr), Ok(ref out_peer_addr))
|
||||
// = (inbound.peer_addr(), inbound.local_addr(), outbound.connection().local_addr(), outbound.connection().remote_addr()) {
|
||||
// let peer = format!("{} -> [{} * {}] -> {}", in_peer_addr, in_local_addr, out_local_addr, out_peer_addr);
|
||||
// information!("[conn {}] New client-server tcp connection: {}", &conn_count, peer);
|
||||
// }
|
||||
// let (mut ri, mut wi) = inbound.split();
|
||||
// let (mut ro, mut wo) = outbound.split();
|
||||
// inner_transfer(&mut ri, &mut wi, &mut ro, &mut wo, conn_count).await
|
||||
// }
|
||||
|
||||
async fn inner_transfer<'a, R1, W1, R2, W2>(mut ri: &'a mut R1, mut wi: &'a mut W1, mut ro: &'a mut R2, mut wo: &'a mut W2, conn_count: String) -> Result<(), String>
|
||||
where R1: AsyncRead + Unpin + ?Sized, W1: AsyncWrite + Unpin + ?Sized,
|
||||
|
||||
Reference in New Issue
Block a user