mirror of
https://github.com/tun2proxy/tun2proxy.git
synced 2025-04-23 23:39:10 +00:00
read code
This commit is contained in:
parent
442e752cba
commit
be45bc8a22
2 changed files with 40 additions and 51 deletions
11
src/lib.rs
11
src/lib.rs
|
@ -240,24 +240,21 @@ where
|
||||||
let mut ip_stack = ipstack::IpStack::new(ipstack_config, device);
|
let mut ip_stack = ipstack::IpStack::new(ipstack_config, device);
|
||||||
|
|
||||||
#[cfg(feature = "udpgw")]
|
#[cfg(feature = "udpgw")]
|
||||||
let udpgw_client = match args.udpgw_server {
|
let udpgw_client = args.udpgw_server.as_ref().map(|addr| {
|
||||||
None => None,
|
|
||||||
Some(addr) => {
|
|
||||||
log::info!("UDPGW enabled");
|
log::info!("UDPGW enabled");
|
||||||
let client = Arc::new(UdpGwClient::new(
|
let client = Arc::new(UdpGwClient::new(
|
||||||
mtu,
|
mtu,
|
||||||
args.udpgw_max_connections.unwrap_or(100),
|
args.udpgw_max_connections.unwrap_or(100),
|
||||||
UDPGW_KEEPALIVE_TIME,
|
UDPGW_KEEPALIVE_TIME,
|
||||||
args.udp_timeout,
|
args.udp_timeout,
|
||||||
addr,
|
*addr,
|
||||||
));
|
));
|
||||||
let client_keepalive = client.clone();
|
let client_keepalive = client.clone();
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
client_keepalive.heartbeat_task().await;
|
client_keepalive.heartbeat_task().await;
|
||||||
});
|
});
|
||||||
Some(client)
|
client
|
||||||
}
|
});
|
||||||
};
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let virtual_dns = virtual_dns.clone();
|
let virtual_dns = virtual_dns.clone();
|
||||||
|
|
26
src/udpgw.rs
26
src/udpgw.rs
|
@ -446,20 +446,16 @@ impl UdpGwClient {
|
||||||
/// # Returns
|
/// # Returns
|
||||||
/// - `Result<UdpGwResponse>`: Returns a result type containing the parsed UDP gateway response, or an error if one occurs.
|
/// - `Result<UdpGwResponse>`: Returns a result type containing the parsed UDP gateway response, or an error if one occurs.
|
||||||
pub(crate) async fn recv_udpgw_packet(udp_mtu: u16, udp_timeout: u64, stream: &mut UdpGwClientStreamReader) -> Result<UdpGwResponse> {
|
pub(crate) async fn recv_udpgw_packet(udp_mtu: u16, udp_timeout: u64, stream: &mut UdpGwClientStreamReader) -> Result<UdpGwResponse> {
|
||||||
let result = match tokio::time::timeout(
|
let result = tokio::time::timeout(
|
||||||
tokio::time::Duration::from_secs(udp_timeout + 2),
|
tokio::time::Duration::from_secs(udp_timeout + 2),
|
||||||
stream.inner.read(&mut stream.recv_buf[..2]),
|
stream.inner.read(&mut stream.recv_buf[..2]),
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
{
|
.map_err(std::io::Error::from)?;
|
||||||
Ok(ret) => ret,
|
let n = result?;
|
||||||
Err(_e) => {
|
if n == 0 {
|
||||||
return Err(("wait tcp data timeout").into());
|
return Ok(UdpGwResponse::TcpClose);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
match result {
|
|
||||||
Ok(0) => Ok(UdpGwResponse::TcpClose),
|
|
||||||
Ok(n) => {
|
|
||||||
if n < std::mem::size_of::<PackLenHeader>() {
|
if n < std::mem::size_of::<PackLenHeader>() {
|
||||||
return Err("received PackLenHeader error".into());
|
return Err("received PackLenHeader error".into());
|
||||||
}
|
}
|
||||||
|
@ -470,20 +466,16 @@ impl UdpGwClient {
|
||||||
let mut left_len: usize = packet_len as usize;
|
let mut left_len: usize = packet_len as usize;
|
||||||
let mut recv_len = 0;
|
let mut recv_len = 0;
|
||||||
while left_len > 0 {
|
while left_len > 0 {
|
||||||
if let Ok(len) = stream.inner.read(&mut stream.recv_buf[recv_len..left_len]).await {
|
let Ok(len) = stream.inner.read(&mut stream.recv_buf[recv_len..left_len]).await else {
|
||||||
|
return Ok(UdpGwResponse::TcpClose);
|
||||||
|
};
|
||||||
if len == 0 {
|
if len == 0 {
|
||||||
return Ok(UdpGwResponse::TcpClose);
|
return Ok(UdpGwResponse::TcpClose);
|
||||||
}
|
}
|
||||||
recv_len += len;
|
recv_len += len;
|
||||||
left_len -= len;
|
left_len -= len;
|
||||||
} else {
|
|
||||||
return Ok(UdpGwResponse::TcpClose);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return UdpGwClient::parse_udp_response(udp_mtu, packet_len as usize, stream);
|
|
||||||
}
|
|
||||||
Err(_) => Err("tcp read error".into()),
|
|
||||||
}
|
}
|
||||||
|
UdpGwClient::parse_udp_response(udp_mtu, packet_len as usize, stream)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sends a UDP gateway packet.
|
/// Sends a UDP gateway packet.
|
||||||
|
|
Loading…
Add table
Reference in a new issue