Remove unnecessary SOCKS buffer

This commit is contained in:
B. Blechschmidt 2023-11-03 22:45:27 +01:00
parent 286ce0ca6d
commit c4ed29b234

View file

@ -27,7 +27,6 @@ struct SocksProxyImpl {
server_inbuf: VecDeque<u8>, server_inbuf: VecDeque<u8>,
client_outbuf: VecDeque<u8>, client_outbuf: VecDeque<u8>,
server_outbuf: VecDeque<u8>, server_outbuf: VecDeque<u8>,
data_buf: VecDeque<u8>,
version: Version, version: Version,
credentials: Option<UserKey>, credentials: Option<UserKey>,
command: protocol::Command, command: protocol::Command,
@ -48,7 +47,6 @@ impl SocksProxyImpl {
server_inbuf: VecDeque::default(), server_inbuf: VecDeque::default(),
client_outbuf: VecDeque::default(), client_outbuf: VecDeque::default(),
server_outbuf: VecDeque::default(), server_outbuf: VecDeque::default(),
data_buf: VecDeque::default(),
version, version,
credentials, credentials,
command, command,
@ -131,8 +129,6 @@ impl SocksProxyImpl {
} }
self.server_inbuf.drain(0..8); self.server_inbuf.drain(0..8);
self.server_outbuf.append(&mut self.data_buf);
self.data_buf.clear();
self.state = SocksState::Established; self.state = SocksState::Established;
self.state_change() self.state_change()
@ -230,13 +226,9 @@ impl SocksProxyImpl {
} }
if self.command == protocol::Command::UdpAssociate { if self.command == protocol::Command::UdpAssociate {
self.udp_associate = Some(SocketAddr::try_from(&response.address)?); self.udp_associate = Some(SocketAddr::try_from(&response.address)?);
assert!(self.data_buf.is_empty());
log::trace!("UDP associate recieved address {}", response.address); log::trace!("UDP associate recieved address {}", response.address);
} }
self.server_outbuf.append(&mut self.data_buf);
self.data_buf.clear();
self.state = SocksState::Established; self.state = SocksState::Established;
self.state_change() self.state_change()
} }
@ -280,11 +272,7 @@ impl ProxyHandler for SocksProxyImpl {
self.server_inbuf.extend(buffer.iter()); self.server_inbuf.extend(buffer.iter());
} }
IncomingDirection::FromClient => { IncomingDirection::FromClient => {
if self.state == SocksState::Established {
self.client_inbuf.extend(buffer.iter()); self.client_inbuf.extend(buffer.iter());
} else {
self.data_buf.extend(buffer.iter());
}
} }
} }
@ -318,7 +306,7 @@ impl ProxyHandler for SocksProxyImpl {
match dir { match dir {
Direction::Incoming(incoming) => match incoming { Direction::Incoming(incoming) => match incoming {
IncomingDirection::FromServer => self.server_inbuf.len(), IncomingDirection::FromServer => self.server_inbuf.len(),
IncomingDirection::FromClient => self.client_inbuf.len().max(self.data_buf.len()), IncomingDirection::FromClient => self.client_inbuf.len(),
}, },
Direction::Outgoing(outgoing) => match outgoing { Direction::Outgoing(outgoing) => match outgoing {
OutgoingDirection::ToServer => self.server_outbuf.len(), OutgoingDirection::ToServer => self.server_outbuf.len(),