diff --git a/src/lib.rs b/src/lib.rs index 613f79f..9aa6c7d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,6 +4,7 @@ #![allow(dead_code)] pub mod packet; +pub mod encoding; #[allow(unused_variables)] pub fn print_stack(file: &'static str, line: u32) { diff --git a/src/main.rs b/src/main.rs index 3997ed0..14916f2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,7 @@ use rust_mqtt::packet::mqtt_packet::Packet; use rust_mqtt::packet::packet_type::PacketType; +use rust_mqtt::encoding::variable_byte_integer::VariableByteIntegerEncoder; +use rust_mqtt::encoding::variable_byte_integer::VariableByteIntegerDecoder; fn main() { env_logger::builder() @@ -14,11 +16,22 @@ fn main() { let mut txt = *b"abcde"; let mut payld = *b"xxxxx"; - let f = PacketType::Reserved; + + + let f = PacketType::from(0xA0); let o: u8 = f.into(); + + let r = match VariableByteIntegerEncoder::encode(179) { + Ok(r) => r, + Err(_e) => [0; 4], + }; + log::info!("{:02X?}", r); + let d = VariableByteIntegerDecoder::decode(r); 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(); + } \ No newline at end of file diff --git a/src/packet/mod.rs b/src/packet/mod.rs index edaf6b7..198b2a0 100644 --- a/src/packet/mod.rs +++ b/src/packet/mod.rs @@ -1,2 +1,3 @@ pub mod mqtt_packet; -pub mod packet_type; \ No newline at end of file +pub mod packet_type; +pub mod packet_builder; \ No newline at end of file diff --git a/src/packet/packet_builder.rs b/src/packet/packet_builder.rs new file mode 100644 index 0000000..839cbe0 --- /dev/null +++ b/src/packet/packet_builder.rs @@ -0,0 +1,20 @@ +use super::mqtt_packet::Packet; +use super::packet_type::PacketType; + +pub struct PacketBuilder<'a> { + currentPacket: Packet<'a>, +} + +impl<'a> PacketBuilder<'a> { + pub fn build(&self) -> &Packet<'a> { + return &self.currentPacket; + } + + pub fn decode(&self, buffer: &'a mut [u8]) -> &Packet<'a> { + return &self.currentPacket; + } + + pub fn addPacketType(packet_type: PacketType) { + + } +} \ No newline at end of file diff --git a/src/packet/packet_type.rs b/src/packet/packet_type.rs index d9a6393..f01275b 100644 --- a/src/packet/packet_type.rs +++ b/src/packet/packet_type.rs @@ -23,9 +23,9 @@ pub enum PacketType { impl From for PacketType { fn from(orig: u8) -> Self { match orig { - 0x00 => return PacketType::Reserved, 0x10 => return PacketType::Connect, 0x20 => return PacketType::Connack, + 0x00 => return PacketType::Reserved, 0x30 => return PacketType::Publish, 0x40 => return PacketType::Puback, 0x50 => return PacketType::Pubrec, @@ -44,3 +44,27 @@ impl From for PacketType { } } +impl Into for PacketType { + fn into(self) -> u8 { + match self { + PacketType::Connect => return 0x00, + PacketType::Connack => return 0x10, + PacketType::Reserved => return 0x20, + PacketType::Publish => return 0x30, + PacketType::Puback => return 0x40, + PacketType::Pubrec => return 0x50, + PacketType::Pubrel => return 0x60, + PacketType::Pubcomp => return 0x70, + PacketType::Subscribe => return 0x80, + PacketType::Suback => return 0x90, + PacketType::Unsubscribe => return 0xA0, + PacketType::Unsuback => return 0xB0, + PacketType::Pingreq => return 0xC0, + PacketType::Pingresp => return 0xD0, + PacketType::Disconnect => return 0xE0, + PacketType::Auth => return 0xF0, + PacketType::Reserved => return 0x00 + } + } +} +