From 0c773fbf0ca2024f07baefb0f8678037a088a84a Mon Sep 17 00:00:00 2001 From: Ondrej Babec Date: Wed, 2 Feb 2022 16:15:09 +0100 Subject: [PATCH] Continue work --- src/main.rs | 13 +++--- src/packet/mod.rs | 3 +- src/packet/{mqttpacket.rs => mqtt_packet.rs} | 5 ++- src/packet/packet_type.rs | 46 ++++++++++++++++++++ 4 files changed, 59 insertions(+), 8 deletions(-) rename src/packet/{mqttpacket.rs => mqtt_packet.rs} (83%) create mode 100644 src/packet/packet_type.rs diff --git a/src/main.rs b/src/main.rs index 1b07ac1..3997ed0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ -use rust_mqtt::packet::mqttpacket::Packet; +use rust_mqtt::packet::mqtt_packet::Packet; +use rust_mqtt::packet::packet_type::PacketType; fn main() { - env_logger::builder() .filter_level(log::LevelFilter::Info) .format_timestamp_nanos() @@ -11,10 +11,13 @@ fn main() { let y: u32 = 2; let z: u16 = 3; let p: u32 = 4; - let text: &'a [u8] = "abcde"; - let payld: &'a [u8] = "This is payload"; - let x = Packet::new( l, y, z, p, text, payld ); + let mut txt = *b"abcde"; + let mut payld = *b"xxxxx"; + let f = PacketType::Reserved; + let o: u8 = f.into(); + log::info!("Enum val: {}", o); + let x = Packet::new( l, y, z, p, &mut txt, &mut payld ); log::info!("Hello world"); x.encode(); x.get_reason_code(); diff --git a/src/packet/mod.rs b/src/packet/mod.rs index bd94699..edaf6b7 100644 --- a/src/packet/mod.rs +++ b/src/packet/mod.rs @@ -1 +1,2 @@ -pub mod mqttpacket; \ No newline at end of file +pub mod mqtt_packet; +pub mod packet_type; \ No newline at end of file diff --git a/src/packet/mqttpacket.rs b/src/packet/mqtt_packet.rs similarity index 83% rename from src/packet/mqttpacket.rs rename to src/packet/mqtt_packet.rs index c6f2a4c..fc0ccc1 100644 --- a/src/packet/mqttpacket.rs +++ b/src/packet/mqtt_packet.rs @@ -15,8 +15,9 @@ pub struct Packet<'a> { payload: &'a mut [u8] } -impl<'a> Packet { - pub fn new(header_control: u8, remain_len: u32, packet_identifier: u16, property_len: u32, properties: &'a mut [u8], payload: &'a mut [u8]) -> Self { +impl<'a> Packet<'a> { + pub fn new(header_control: u8, remain_len: u32, packet_identifier: u16, property_len: u32, + properties: &'a mut [u8], payload: &'a mut [u8]) -> Self { Self { header_control, remain_len, packet_identifier, property_len , properties, payload} } diff --git a/src/packet/packet_type.rs b/src/packet/packet_type.rs new file mode 100644 index 0000000..d9a6393 --- /dev/null +++ b/src/packet/packet_type.rs @@ -0,0 +1,46 @@ +// x x x x - - - - + + +pub enum PacketType { + Reserved, + Connect, + Connack, + Publish, + Puback, + Pubrec, + Pubrel, + Pubcomp, + Subscribe, + Suback, + Unsubscribe, + Unsuback, + Pingreq, + Pingresp, + Disconnect, + Auth +} + +impl From for PacketType { + fn from(orig: u8) -> Self { + match orig { + 0x00 => return PacketType::Reserved, + 0x10 => return PacketType::Connect, + 0x20 => return PacketType::Connack, + 0x30 => return PacketType::Publish, + 0x40 => return PacketType::Puback, + 0x50 => return PacketType::Pubrec, + 0x60 => return PacketType::Pubrel, + 0x70 => return PacketType::Pubcomp, + 0x80 => return PacketType::Subscribe, + 0x90 => return PacketType::Suback, + 0xA0 => return PacketType::Unsubscribe, + 0xB0 => return PacketType::Unsuback, + 0xC0 => return PacketType::Pingreq, + 0xD0 => return PacketType::Pingresp, + 0xE0 => return PacketType::Disconnect, + 0xF0 => return PacketType::Auth, + _ => return PacketType::Reserved + }; + } +} +