reading code

This commit is contained in:
ssrlive 2023-09-03 22:27:37 +08:00
parent c1b322a01e
commit c723adce4f

View file

@ -176,7 +176,7 @@ const UDP_ASSO_TIMEOUT: u64 = 10; // seconds
const DNS_PORT: u16 = 53;
struct ConnectionState {
smoltcp_handle: Option<SocketHandle>,
smoltcp_handle: SocketHandle,
mio_stream: TcpStream,
token: Token,
proxy_handler: Box<dyn ProxyHandler>,
@ -351,7 +351,8 @@ impl<'a> TunToProxy<'a> {
if let Some(mut state) = self.connection_map.remove(info) {
self.expect_smoltcp_send()?;
if let Some(handle) = state.smoltcp_handle {
{
let handle = state.smoltcp_handle;
let socket = self.sockets.get_mut::<tcp::Socket>(handle);
socket.close();
self.sockets.remove(handle);
@ -369,7 +370,7 @@ impl<'a> TunToProxy<'a> {
}
if let Err(err) = state.mio_stream.shutdown(Shutdown::Both) {
log::trace!("Shutdown {} error \"{}\"", info, err);
log::trace!("Shutdown 0 {} error \"{}\"", info, err);
}
log::info!("Close {}", info);
@ -396,11 +397,10 @@ impl<'a> TunToProxy<'a> {
.proxy_handler
.have_data(Direction::Outgoing(OutgoingDirection::ToClient))
{
if let Some(handle) = state.smoltcp_handle {
// Close tun interface
let socket = self.sockets.get_mut::<tcp::Socket>(handle);
socket.close();
}
// Close tun interface
let socket = self.sockets.get_mut::<tcp::Socket>(state.smoltcp_handle);
socket.close();
closed_ends += 1;
}
@ -414,7 +414,7 @@ impl<'a> TunToProxy<'a> {
{
// Close remote server
if let Err(err) = state.mio_stream.shutdown(Shutdown::Write) {
log::trace!("Shutdown {} error \"{}\"", info, err);
log::trace!("Shutdown 1 {} error \"{}\"", info, err);
}
closed_ends += 1;
}
@ -434,10 +434,7 @@ impl<'a> TunToProxy<'a> {
Some(state) => state,
None => return Ok(()),
};
let socket = match state.smoltcp_handle {
Some(handle) => self.sockets.get_mut::<tcp::Socket>(handle),
None => return Ok(()),
};
let socket = self.sockets.get_mut::<tcp::Socket>(state.smoltcp_handle);
let mut error = Ok(());
while socket.can_recv() && error.is_ok() {
socket.recv(|data| {
@ -796,7 +793,7 @@ impl<'a> TunToProxy<'a> {
(None, None)
};
let state = ConnectionState {
smoltcp_handle: Some(handle),
smoltcp_handle: handle,
mio_stream: client,
token,
proxy_handler,
@ -882,15 +879,11 @@ impl<'a> TunToProxy<'a> {
fn write_to_client(&mut self, token: Token, info: &ConnectionInfo) -> Result<(), Error> {
while let Some(state) = self.connection_map.get_mut(info) {
let handle = match state.smoltcp_handle {
Some(handle) => handle,
None => break,
};
let event = state.proxy_handler.peek_data(OutgoingDirection::ToClient);
let buflen = event.buffer.len();
let consumed;
{
let socket = self.sockets.get_mut::<tcp::Socket>(handle);
let socket = self.sockets.get_mut::<tcp::Socket>(state.smoltcp_handle);
if socket.may_send() {
if let Some(virtual_dns) = &mut self.options.virtual_dns {
// Unwrapping is fine because every smoltcp socket is bound to an.
@ -1057,7 +1050,7 @@ impl<'a> TunToProxy<'a> {
}
// Closes the connection with the proxy
if let Err(err) = state.mio_stream.shutdown(Shutdown::Both) {
log::trace!("Shutdown error \"{}\"", err);
log::trace!("Shutdown 2 error \"{}\"", err);
}
log::info!("RESET {}", conn_info);