调整代码结构

This commit is contained in:
lbl8603
2024-05-29 22:47:48 +08:00
parent 90ff03e27c
commit a76280c53b
2 changed files with 19 additions and 54 deletions
+6 -10
View File
@@ -54,11 +54,9 @@ impl XORCipher {
return Err(anyhow!("not encrypt")); return Err(anyhow!("not encrypt"));
} }
let key = &self.key; let key = &self.key;
net_packet for (i, byte) in net_packet.payload_mut().iter_mut().enumerate() {
.payload_mut() *byte ^= key[i & 31];
.iter_mut() }
.enumerate()
.for_each(|(i, byte)| *byte = *byte ^ key[i & 31]);
net_packet.set_encrypt_flag(false); net_packet.set_encrypt_flag(false);
Ok(()) Ok(())
} }
@@ -68,11 +66,9 @@ impl XORCipher {
) -> anyhow::Result<()> { ) -> anyhow::Result<()> {
net_packet.set_encrypt_flag(true); net_packet.set_encrypt_flag(true);
let key = &self.key; let key = &self.key;
net_packet for (i, byte) in net_packet.payload_mut().iter_mut().enumerate() {
.payload_mut() *byte ^= key[i & 31];
.iter_mut() }
.enumerate()
.for_each(|(i, byte)| *byte = *byte ^ key[i & 31]);
Ok(()) Ok(())
} }
} }
+13 -44
View File
@@ -45,47 +45,6 @@ fn icmp(device_writer: &Device, mut ipv4_packet: IpV4Packet<&mut [u8]>) -> anyho
Ok(()) Ok(())
} }
/// 接收tun数据,并且转发到udp上
pub(crate) fn handle(
context: &ChannelContext,
data: &mut [u8],
len: usize,
extend: &mut [u8],
device_writer: &Device,
current_device: CurrentDeviceInfo,
ip_route: &ExternalRoute,
#[cfg(feature = "ip_proxy")] proxy_map: &Option<IpProxyMap>,
client_cipher: &Cipher,
server_cipher: &Cipher,
device_list: &Mutex<(u16, Vec<PeerDeviceInfo>)>,
compressor: &Compressor,
) -> anyhow::Result<()> {
//忽略掉结构不对的情况(ipv6数据、win tap会读到空数据),不然日志打印太多了
let ipv4_packet = match IpV4Packet::new(&mut data[12..len]) {
Ok(packet) => packet,
Err(_) => return Ok(()),
};
let src_ip = ipv4_packet.source_ip();
let dest_ip = ipv4_packet.destination_ip();
if src_ip == dest_ip {
return icmp(&device_writer, ipv4_packet);
}
return base_handle(
context,
data,
len,
extend,
current_device,
ip_route,
#[cfg(feature = "ip_proxy")]
proxy_map,
client_cipher,
server_cipher,
device_list,
compressor,
);
}
pub fn start( pub fn start(
stop_manager: StopManager, stop_manager: StopManager,
context: ChannelContext, context: ChannelContext,
@@ -265,15 +224,16 @@ fn broadcast(
Ok(()) Ok(())
} }
/// 接收tun数据,并且转发到udp上
/// 实现一个原地发送,必须保证是如下结构 /// 实现一个原地发送,必须保证是如下结构
/// |12字节开头|ip报文|至少1024字节结尾| /// |12字节开头|ip报文|至少1024字节结尾|
/// ///
#[inline] pub(crate) fn handle(
fn base_handle(
context: &ChannelContext, context: &ChannelContext,
buf: &mut [u8], buf: &mut [u8],
data_len: usize, //数据总长度=12+ip包长度 data_len: usize, //数据总长度=12+ip包长度
extend: &mut [u8], extend: &mut [u8],
device_writer: &Device,
current_device: CurrentDeviceInfo, current_device: CurrentDeviceInfo,
ip_route: &ExternalRoute, ip_route: &ExternalRoute,
#[cfg(feature = "ip_proxy")] proxy_map: &Option<IpProxyMap>, #[cfg(feature = "ip_proxy")] proxy_map: &Option<IpProxyMap>,
@@ -282,7 +242,16 @@ fn base_handle(
device_list: &Mutex<(u16, Vec<PeerDeviceInfo>)>, device_list: &Mutex<(u16, Vec<PeerDeviceInfo>)>,
compressor: &Compressor, compressor: &Compressor,
) -> anyhow::Result<()> { ) -> anyhow::Result<()> {
let ipv4_packet = IpV4Packet::new(&buf[12..data_len])?; //忽略掉结构不对的情况(ipv6数据、win tap会读到空数据),不然日志打印太多了
let ipv4_packet = match IpV4Packet::new(&mut buf[12..data_len]) {
Ok(packet) => packet,
Err(_) => return Ok(()),
};
let src_ip = ipv4_packet.source_ip();
let dest_ip = ipv4_packet.destination_ip();
if src_ip == dest_ip {
return icmp(&device_writer, ipv4_packet);
}
let protocol = ipv4_packet.protocol(); let protocol = ipv4_packet.protocol();
let src_ip = ipv4_packet.source_ip(); let src_ip = ipv4_packet.source_ip();
let mut dest_ip = ipv4_packet.destination_ip(); let mut dest_ip = ipv4_packet.destination_ip();