From d5e10a8210a50b059387fcb1e916e4567f373780 Mon Sep 17 00:00:00 2001 From: lubeilin <1791778603@qq.com> Date: Mon, 14 Oct 2024 16:53:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=95=B0=E6=8D=AE=E8=AF=BB?= =?UTF-8?q?=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vnt/packet/src/lib.rs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/vnt/packet/src/lib.rs b/vnt/packet/src/lib.rs index 829c739..56d6d8d 100644 --- a/vnt/packet/src/lib.rs +++ b/vnt/packet/src/lib.rs @@ -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::() { 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::() { 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);