aboutsummaryrefslogtreecommitdiffstats
path: root/src/packet_content.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/packet_content.rs')
-rw-r--r--src/packet_content.rs120
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
+}