diff options
Diffstat (limited to 'src/packet_content.rs')
| -rw-r--r-- | src/packet_content.rs | 120 |
1 files changed, 64 insertions, 56 deletions
diff --git a/src/packet_content.rs b/src/packet_content.rs index 26230e1..a6fa914 100644 --- a/src/packet_content.rs +++ b/src/packet_content.rs @@ -1,5 +1,15 @@ +use crate::{ + ack::Ack, + advert::Advert, + anon_req::AnonReq, + multipart::MultiPart, + path::Path, + request::Request, + response::Response, + text::{GroupData, GroupText, Text}, + trace::Trace, +}; use bytes::{Buf, Bytes}; -use crate::{ack::Ack, advert::Advert, anon_req::AnonReq, multipart::MultiPart, path::Path, request::Request, response::Response, text::{GroupData, GroupText, Text}, trace::Trace}; #[cfg(feature = "std")] use crate::std_identity::Keystore; @@ -23,41 +33,41 @@ pub enum PacketContent { } impl PacketContent { - fn justified_name(&self) -> &str{ + fn justified_name(&self) -> &str { match self { - PacketContent::Request(_) => " REQUEST | ", - PacketContent::Response(_) => " RESPONSE | ", - PacketContent::Text(_) => " TEXT | ", - PacketContent::Ack(_) => " ACK | ", - PacketContent::Advert(_) => " ADVERT | ", + PacketContent::Request(_) => " REQUEST | ", + PacketContent::Response(_) => " RESPONSE | ", + PacketContent::Text(_) => " TEXT | ", + PacketContent::Ack(_) => " ACK | ", + PacketContent::Advert(_) => " ADVERT | ", PacketContent::GroupText(_) => " GROUP TXT | ", PacketContent::GroupData(_) => " GRP. DATA | ", - PacketContent::AnonReq(_) => " ANON REQ. | ", - PacketContent::Path(_) => " PATH | ", - PacketContent::Trace(_) => " TRACE | ", + PacketContent::AnonReq(_) => " ANON REQ. | ", + PacketContent::Path(_) => " PATH | ", + PacketContent::Trace(_) => " TRACE | ", PacketContent::Multipart(_) => " MULTIPART | ", - PacketContent::Raw(_) => " RAW | ", - PacketContent::Invalid => " INVALID | ", + PacketContent::Raw(_) => " RAW | ", + PacketContent::Invalid => " INVALID | ", } } pub fn new(header: u8, bytes: Bytes) -> PacketContent { // Specialize based on the Payload Type from the header match (header & 0x3C) >> 2 { - 0x00 => PacketContent::Request( Request::from(bytes)), - 0x01 => PacketContent::Response( Response::from(bytes)), - 0x02 => PacketContent::Text( Text::from(bytes)), - 0x03 => PacketContent::Ack( Ack::from(bytes)), - 0x04 => PacketContent::Advert( Advert::from(bytes)), + 0x00 => PacketContent::Request(Request::from(bytes)), + 0x01 => PacketContent::Response(Response::from(bytes)), + 0x02 => PacketContent::Text(Text::from(bytes)), + 0x03 => PacketContent::Ack(Ack::from(bytes)), + 0x04 => PacketContent::Advert(Advert::from(bytes)), 0x05 => PacketContent::GroupText(GroupText::from(bytes)), 0x06 => PacketContent::GroupData(GroupData::from(bytes)), - 0x07 => PacketContent::AnonReq( AnonReq::from(bytes)), - 0x08 => PacketContent::Path( Path::from(bytes)), - 0x09 => PacketContent::Trace( Trace::from(bytes)), + 0x07 => PacketContent::AnonReq(AnonReq::from(bytes)), + 0x08 => PacketContent::Path(Path::from(bytes)), + 0x09 => PacketContent::Trace(Trace::from(bytes)), 0x0A => PacketContent::Multipart(MultiPart::from(bytes)), - 0x0F => PacketContent::Raw( Raw { bytes }), + 0x0F => PacketContent::Raw(Raw { bytes }), - _ => PacketContent::Invalid + _ => PacketContent::Invalid, } } } @@ -67,19 +77,19 @@ impl core::fmt::Display for PacketContent { f.write_str(self.justified_name())?; match self { - PacketContent::Request(c) => core::fmt::Display::fmt(&c, f), - PacketContent::Response(c) => core::fmt::Display::fmt(&c, f), - PacketContent::Text(c) => core::fmt::Display::fmt(&c, f), - PacketContent::Ack(c) => core::fmt::Display::fmt(&c, f), - PacketContent::Advert(c) => core::fmt::Display::fmt(&c, f), + PacketContent::Request(c) => core::fmt::Display::fmt(&c, f), + PacketContent::Response(c) => core::fmt::Display::fmt(&c, f), + PacketContent::Text(c) => core::fmt::Display::fmt(&c, f), + PacketContent::Ack(c) => core::fmt::Display::fmt(&c, f), + PacketContent::Advert(c) => core::fmt::Display::fmt(&c, f), PacketContent::GroupText(c) => core::fmt::Display::fmt(&c, f), PacketContent::GroupData(c) => core::fmt::Display::fmt(&c, f), - PacketContent::AnonReq(c) => core::fmt::Display::fmt(&c, f), - PacketContent::Path(c) => core::fmt::Display::fmt(&c, f), - PacketContent::Trace(c) => core::fmt::Display::fmt(&c, f), + PacketContent::AnonReq(c) => core::fmt::Display::fmt(&c, f), + PacketContent::Path(c) => core::fmt::Display::fmt(&c, f), + PacketContent::Trace(c) => core::fmt::Display::fmt(&c, f), PacketContent::Multipart(c) => core::fmt::Display::fmt(&c, f), - PacketContent::Raw(c) => core::fmt::Display::fmt(&c, f), - PacketContent::Invalid => f.write_str("INVALID") + PacketContent::Raw(c) => core::fmt::Display::fmt(&c, f), + PacketContent::Invalid => f.write_str("INVALID"), } } } @@ -90,7 +100,7 @@ pub enum NodeType { Room, Repeater, Sensor, - Invalid + Invalid, } impl From<u8> for NodeType { @@ -101,7 +111,7 @@ impl From<u8> for NodeType { 0x02 => NodeType::Repeater, 0x03 => NodeType::Room, 0x04 => NodeType::Sensor, - _ => NodeType::Invalid + _ => NodeType::Invalid, } } } @@ -112,7 +122,7 @@ pub struct PeerToPeerCipher { pub source: u8, pub mac: u16, pub ciphertext: Bytes, - pub cleartext: Option<Bytes> + pub cleartext: Option<Bytes>, } impl From<Bytes> for PeerToPeerCipher { @@ -124,11 +134,13 @@ impl From<Bytes> for PeerToPeerCipher { source: 0x00, mac: 0x0000, ciphertext: Bytes::new(), - cleartext: None + cleartext: None, }; // Just check for the whole fixed-size part at once - if bytes.len() < 4 { return response } + if bytes.len() < 4 { + return response; + } response.destination = bytes.get_u8(); response.source = bytes.get_u8(); response.mac = bytes.get_u16(); @@ -141,14 +153,10 @@ impl From<Bytes> for PeerToPeerCipher { impl PeerToPeerCipher { #[cfg(feature = "std")] - pub fn try_decrypt(&mut self, keystore: &Keystore) -> bool { - let decrypt = keystore.decrypt_and_id_p2p( - self.source, - self.destination, - self.mac, - &self.ciphertext - ); - + pub fn try_decrypt(&mut self, keystore: &Keystore) -> bool { + let decrypt = + keystore.decrypt_and_id_p2p(self.source, self.destination, self.mac, &self.ciphertext); + if let Some((cleartext, _, _)) = decrypt { self.cleartext = Some(cleartext); true @@ -160,7 +168,7 @@ impl PeerToPeerCipher { #[derive(PartialEq, Debug, Clone)] pub struct Raw { - pub(crate) bytes: Bytes + pub(crate) bytes: Bytes, } impl core::fmt::Display for Raw { @@ -176,16 +184,16 @@ mod tests { #[test] fn node_type() { - assert_eq!(NodeType::Invalid, NodeType::from(0x00)); - assert_eq!(NodeType::Invalid, NodeType::from(0xF8)); - assert_eq!(NodeType::Chat, NodeType::from(0x01)); - assert_eq!(NodeType::Chat, NodeType::from(0xF9)); + assert_eq!(NodeType::Invalid, NodeType::from(0x00)); + assert_eq!(NodeType::Invalid, NodeType::from(0xF8)); + assert_eq!(NodeType::Chat, NodeType::from(0x01)); + assert_eq!(NodeType::Chat, NodeType::from(0xF9)); assert_eq!(NodeType::Repeater, NodeType::from(0x02)); assert_eq!(NodeType::Repeater, NodeType::from(0xFA)); - assert_eq!(NodeType::Room, NodeType::from(0x03)); - assert_eq!(NodeType::Room, NodeType::from(0xFB)); - assert_eq!(NodeType::Sensor, NodeType::from(0x04)); - assert_eq!(NodeType::Sensor, NodeType::from(0xFC)); - assert_eq!(NodeType::Invalid, NodeType::from(0x05)); + assert_eq!(NodeType::Room, NodeType::from(0x03)); + assert_eq!(NodeType::Room, NodeType::from(0xFB)); + assert_eq!(NodeType::Sensor, NodeType::from(0x04)); + assert_eq!(NodeType::Sensor, NodeType::from(0xFC)); + assert_eq!(NodeType::Invalid, NodeType::from(0x05)); } -}
\ No newline at end of file +} |
