|
@@ -41,8 +41,6 @@ pub struct Packet { |
|
|
|
|
|
|
|
|
impl Packet { |
|
|
impl Packet { |
|
|
/// create a new `Packet` |
|
|
/// create a new `Packet` |
|
|
/// |
|
|
|
|
|
/// should not be used when receiving data over a stream |
|
|
|
|
|
pub fn new(kind: PacketKind, contents: Vec<u8>) -> Packet { |
|
|
pub fn new(kind: PacketKind, contents: Vec<u8>) -> Packet { |
|
|
let checksum = digest::digest(&digest::SHA256, &contents).as_ref().to_vec(); |
|
|
let checksum = digest::digest(&digest::SHA256, &contents).as_ref().to_vec(); |
|
|
Packet { |
|
|
Packet { |
|
@@ -52,17 +50,6 @@ impl Packet { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/// creates a new `Packet` from data received over a stream |
|
|
|
|
|
/// |
|
|
|
|
|
/// should not be used when creating a fresh `Packet` |
|
|
|
|
|
pub fn from_network(kind: PacketKind, contents: Vec<u8>, checksum: Vec<u8>) -> Packet { |
|
|
|
|
|
Packet { |
|
|
|
|
|
kind, |
|
|
|
|
|
contents, |
|
|
|
|
|
checksum, |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
fn to_network_packet(&self) -> NetworkPacket { |
|
|
fn to_network_packet(&self) -> NetworkPacket { |
|
|
let mut contents: Vec<u8> = Vec::new(); |
|
|
let mut contents: Vec<u8> = Vec::new(); |
|
|
|
|
|
|
|
@@ -144,7 +131,7 @@ where |
|
|
return Ok(None); |
|
|
return Ok(None); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
let packet_kind = PacketKind::from_u8(info_buf[0]).unwrap(); |
|
|
|
|
|
|
|
|
let kind = PacketKind::from_u8(info_buf[0]).unwrap(); |
|
|
let length = u32::from_le_bytes(info_buf[1..9].try_into().unwrap()) as usize; |
|
|
let length = u32::from_le_bytes(info_buf[1..9].try_into().unwrap()) as usize; |
|
|
|
|
|
|
|
|
let mut checksum: Vec<u8> = vec![0; 32]; |
|
|
let mut checksum: Vec<u8> = vec![0; 32]; |
|
@@ -153,7 +140,11 @@ where |
|
|
let mut contents: Vec<u8> = vec![0; length]; |
|
|
let mut contents: Vec<u8> = vec![0; length]; |
|
|
stream.read(&mut contents).await?; |
|
|
stream.read(&mut contents).await?; |
|
|
|
|
|
|
|
|
let packet = Packet::from_network(packet_kind, contents, checksum); |
|
|
|
|
|
|
|
|
let packet = Packet { |
|
|
|
|
|
kind, |
|
|
|
|
|
contents, |
|
|
|
|
|
checksum, |
|
|
|
|
|
}; |
|
|
packet.verify_integrity()?; |
|
|
packet.verify_integrity()?; |
|
|
|
|
|
|
|
|
Ok(Some(packet)) |
|
|
Ok(Some(packet)) |
|
|