Browse Source

dns_over_tcp_expiry

pull/66/head
ssrlive 3 years ago
parent
commit
11995d525b
  1. 18
      src/tun2proxy.rs

18
src/tun2proxy.rs

@ -195,7 +195,7 @@ struct ConnectionState {
udp_token: Option<Token>, udp_token: Option<Token>,
origin_dst: SocketAddr, origin_dst: SocketAddr,
udp_data_cache: LinkedList<Vec<u8>>, udp_data_cache: LinkedList<Vec<u8>>,
udp_over_tcp_expiry: Option<::std::time::Instant>, dns_over_tcp_expiry: Option<::std::time::Instant>,
} }
pub(crate) trait TcpProxy { pub(crate) trait TcpProxy {
@ -555,7 +555,7 @@ impl<'a> TunToProxy<'a> {
let err = "udp over tcp state not find"; let err = "udp over tcp state not find";
let state = self.connection_map.get_mut(info).ok_or(err)?; let state = self.connection_map.get_mut(info).ok_or(err)?;
state.udp_over_tcp_expiry = Some(Self::common_udp_life_timeout()); state.dns_over_tcp_expiry = Some(Self::common_udp_life_timeout());
let data_event = IncomingDataEvent { let data_event = IncomingDataEvent {
direction: IncomingDirection::FromClient, direction: IncomingDirection::FromClient,
@ -568,8 +568,8 @@ impl<'a> TunToProxy<'a> {
fn receive_dns_over_tcp_packet_and_write_to_client(&mut self, info: &ConnectionInfo) -> Result<()> { fn receive_dns_over_tcp_packet_and_write_to_client(&mut self, info: &ConnectionInfo) -> Result<()> {
let err = "udp connection state not found"; let err = "udp connection state not found";
let state = self.connection_map.get_mut(info).ok_or(err)?; let state = self.connection_map.get_mut(info).ok_or(err)?;
assert!(state.udp_over_tcp_expiry.is_some()); assert!(state.dns_over_tcp_expiry.is_some());
state.udp_over_tcp_expiry = Some(Self::common_udp_life_timeout()); state.dns_over_tcp_expiry = Some(Self::common_udp_life_timeout());
// Code similar to the code in parent function. TODO: Cleanup. // Code similar to the code in parent function. TODO: Cleanup.
let mut vecbuf = Vec::<u8>::new(); let mut vecbuf = Vec::<u8>::new();
@ -638,9 +638,9 @@ impl<'a> TunToProxy<'a> {
Ok(()) Ok(())
} }
fn udp_over_tcp_timeout_expired(&self, info: &ConnectionInfo) -> bool { fn dns_over_tcp_timeout_expired(&self, info: &ConnectionInfo) -> bool {
if let Some(state) = self.connection_map.get(info) { if let Some(state) = self.connection_map.get(info) {
if let Some(expiry) = state.udp_over_tcp_expiry { if let Some(expiry) = state.dns_over_tcp_expiry {
return expiry < ::std::time::Instant::now(); return expiry < ::std::time::Instant::now();
} }
} }
@ -650,8 +650,8 @@ impl<'a> TunToProxy<'a> {
fn clearup_expired_dns_over_tcp(&mut self) -> Result<()> { fn clearup_expired_dns_over_tcp(&mut self) -> Result<()> {
let keys = self.connection_map.keys().cloned().collect::<Vec<_>>(); let keys = self.connection_map.keys().cloned().collect::<Vec<_>>();
for key in keys { for key in keys {
if self.udp_over_tcp_timeout_expired(&key) { if self.dns_over_tcp_timeout_expired(&key) {
log::trace!("UDP over TCP timeout: {}", key); log::trace!("DNS over TCP timeout: {}", key);
self.remove_connection(&key)?; self.remove_connection(&key)?;
} }
} }
@ -817,7 +817,7 @@ impl<'a> TunToProxy<'a> {
udp_token, udp_token,
origin_dst: dst, origin_dst: dst,
udp_data_cache: LinkedList::new(), udp_data_cache: LinkedList::new(),
udp_over_tcp_expiry: None, dns_over_tcp_expiry: None,
}; };
Ok(state) Ok(state)
} }

Loading…
Cancel
Save