create_new_tcp_proxy_connection

This commit is contained in:
ssrlive 2023-08-10 11:18:15 +08:00
parent 855aaa04fa
commit 507def8f29

View file

@ -452,31 +452,12 @@ impl<'a> TunToProxy<'a> {
continue; continue;
} }
let tcp_proxy_handler = tcp_proxy_handler?; let tcp_proxy_handler = tcp_proxy_handler?;
let mut socket = tcp::Socket::new( self.create_new_tcp_proxy_connection(
tcp::SocketBuffer::new(vec![0; 1024 * 128]), server_addr,
tcp::SocketBuffer::new(vec![0; 1024 * 128]), dst,
);
socket.set_ack_delay(None);
socket.listen(dst)?;
let handle = self.sockets.add(socket);
let mut client = TcpStream::connect(server_addr)?;
let token = self.new_token();
let i = Interest::READABLE;
self.poll.registry().register(&mut client, token, i)?;
let state = TcpConnectState {
smoltcp_handle: Some(handle),
mio_stream: client,
token,
tcp_proxy_handler, tcp_proxy_handler,
close_state: 0, connection_info.clone(),
wait_read: true, )?;
wait_write: false,
};
self.connection_map.insert(connection_info.clone(), state);
self.token_to_info.insert(token, connection_info.clone());
log::info!("Connect done {} ({})", connection_info, dst); log::info!("Connect done {} ({})", connection_info, dst);
done = true; done = true;
@ -536,6 +517,41 @@ impl<'a> TunToProxy<'a> {
Ok(()) Ok(())
} }
fn create_new_tcp_proxy_connection(
&mut self,
server_addr: SocketAddr,
dst: SocketAddr,
tcp_proxy_handler: Box<dyn TcpProxy>,
connection_info: ConnectionInfo,
) -> Result<()> {
let mut socket = tcp::Socket::new(
tcp::SocketBuffer::new(vec![0; 1024 * 128]),
tcp::SocketBuffer::new(vec![0; 1024 * 128]),
);
socket.set_ack_delay(None);
socket.listen(dst)?;
let handle = self.sockets.add(socket);
let mut client = TcpStream::connect(server_addr)?;
let token = self.new_token();
let i = Interest::READABLE;
self.poll.registry().register(&mut client, token, i)?;
let state = TcpConnectState {
smoltcp_handle: Some(handle),
mio_stream: client,
token,
tcp_proxy_handler,
close_state: 0,
wait_read: true,
wait_write: false,
};
self.connection_map.insert(connection_info.clone(), state);
self.token_to_info.insert(token, connection_info.clone());
Ok(())
}
fn write_to_server(&mut self, info: &ConnectionInfo) -> Result<(), Error> { fn write_to_server(&mut self, info: &ConnectionInfo) -> Result<(), Error> {
if let Some(state) = self.connection_map.get_mut(info) { if let Some(state) = self.connection_map.get_mut(info) {
let event = state.tcp_proxy_handler.peek_data(OutgoingDirection::ToServer); let event = state.tcp_proxy_handler.peek_data(OutgoingDirection::ToServer);