Skip to content

Commit

Permalink
调整代码结构
Browse files Browse the repository at this point in the history
  • Loading branch information
vnt-dev committed May 29, 2024
1 parent 90ff03e commit a76280c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 54 deletions.
16 changes: 6 additions & 10 deletions vnt/src/cipher/xor/xor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,9 @@ impl XORCipher {
return Err(anyhow!("not encrypt"));
}
let key = &self.key;
net_packet
.payload_mut()
.iter_mut()
.enumerate()
.for_each(|(i, byte)| *byte = *byte ^ key[i & 31]);
for (i, byte) in net_packet.payload_mut().iter_mut().enumerate() {
*byte ^= key[i & 31];
}
net_packet.set_encrypt_flag(false);
Ok(())
}
Expand All @@ -68,11 +66,9 @@ impl XORCipher {
) -> anyhow::Result<()> {
net_packet.set_encrypt_flag(true);
let key = &self.key;
net_packet
.payload_mut()
.iter_mut()
.enumerate()
.for_each(|(i, byte)| *byte = *byte ^ key[i & 31]);
for (i, byte) in net_packet.payload_mut().iter_mut().enumerate() {
*byte ^= key[i & 31];
}
Ok(())
}
}
Expand Down
57 changes: 13 additions & 44 deletions vnt/src/handle/tun_tap/tun_handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,47 +45,6 @@ fn icmp(device_writer: &Device, mut ipv4_packet: IpV4Packet<&mut [u8]>) -> anyho
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(
stop_manager: StopManager,
context: ChannelContext,
Expand Down Expand Up @@ -265,15 +224,16 @@ fn broadcast(
Ok(())
}

/// 接收tun数据,并且转发到udp上
/// 实现一个原地发送,必须保证是如下结构
/// |12字节开头|ip报文|至少1024字节结尾|
///
#[inline]
fn base_handle(
pub(crate) fn handle(
context: &ChannelContext,
buf: &mut [u8],
data_len: usize, //数据总长度=12+ip包长度
extend: &mut [u8],
device_writer: &Device,
current_device: CurrentDeviceInfo,
ip_route: &ExternalRoute,
#[cfg(feature = "ip_proxy")] proxy_map: &Option<IpProxyMap>,
Expand All @@ -282,7 +242,16 @@ fn base_handle(
device_list: &Mutex<(u16, Vec<PeerDeviceInfo>)>,
compressor: &Compressor,
) -> 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 src_ip = ipv4_packet.source_ip();
let mut dest_ip = ipv4_packet.destination_ip();
Expand Down

0 comments on commit a76280c

Please sign in to comment.