Compare commits

..
3 Commits
Author SHA1 Message Date
vnt-dev 501a9e8198 Merge pull request #99 from vnt-dev/1.2.x
1.2.x
2024-10-20 14:13:57 +08:00
lubeilin 8aa4736b01 Merge remote-tracking branch 'vnt-release/1.2.x' into 1.2.x- 2024-10-14 16:53:45 +08:00
lubeilin d5e10a8210 调整数据读取 2024-10-14 16:53:35 +08:00
+4 -7
View File
@@ -71,14 +71,12 @@ unsigned short getChecksum(unsigned short * iphead, int count)
pub fn cal_checksum(buffer: &[u8]) -> u16 {
use std::io::Cursor;
let mut sum = 0;
let length = buffer.len();
let mut buffer = Cursor::new(buffer);
while let Ok(value) = buffer.read_u16::<BigEndian>() {
sum += u32::from(value);
}
if length & 1 == 1 {
//奇数,说明还有一位,不足的补0
sum += u32c(buffer.read_u8().unwrap(), 0);
if let Ok(l) = buffer.read_u8() {
sum += u32c(l, 0);
}
while sum >> 16 != 0 {
sum = (sum & 0xffff) + (sum >> 16);
@@ -119,9 +117,8 @@ pub fn ipv4_cal_checksum(
while let Ok(value) = buffer.read_u16::<BigEndian>() {
sum += u32::from(value);
}
if length & 1 == 1 {
//奇数,说明还有一位
sum += u32c(buffer.read_u8().unwrap(), 0);
if let Ok(l) = buffer.read_u8() {
sum += u32c(l, 0);
}
while sum >> 16 != 0 {
sum = (sum & 0xffff) + (sum >> 16);