diff --git a/Cargo.toml b/Cargo.toml index 95d2152..a85d575 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ cargo-features = ["edition"] [package] name = "mqttrs" -version = "0.1.3" +version = "0.1.4" authors = ["00imvj00 "] edition = "2018" description = "mqttrs is encoding & decoding library for mqtt protocol, it can work with both sync as well as async apps" @@ -13,4 +13,5 @@ license = "Apache-2.0" [dependencies] -bytes = "0.4.11" +bytes = "0.4" + diff --git a/src/decoder.rs b/src/decoder.rs index 518e2e7..cd8e3c4 100644 --- a/src/decoder.rs +++ b/src/decoder.rs @@ -6,9 +6,10 @@ use std::io; #[allow(dead_code)] pub fn decode(buffer: &mut BytesMut) -> Result, io::Error> { if let Some((header, header_size)) = read_header(buffer) { - buffer.split_to(header_size); - if buffer.len() >= header.len() { - let p = read_packet(header, buffer)?; + if buffer.len() >= header.len() + header_size { + //NOTE: Check if buffer has, header bytes + remaining length bytes in buffer. + buffer.split_to(header_size); //NOTE: Remove header bytes from buffer. + let p = read_packet(header, buffer)?; //NOTE: Read remaining packet. Ok(Some(p)) } else { Ok(None) diff --git a/src/decoder_test.rs b/src/decoder_test.rs index 26366e8..7b01b5b 100644 --- a/src/decoder_test.rs +++ b/src/decoder_test.rs @@ -86,15 +86,18 @@ fn test_disconnect() { #[test] fn test_publish() { let mut data = BytesMut::from(vec![ - 0b00110000, 12, 0x00, 0x03, 'a' as u8, '/' as u8, 'b' as u8, 0x00, 0x10, 'h' as u8, - 'e' as u8, 'l' as u8, 'l' as u8, 'o' as u8, 0b00111000, 12, 0x00, 0x03, 'a' as u8, - '/' as u8, 'b' as u8, 0x00, 0x10, 'h' as u8, 'e' as u8, 'l' as u8, 'l' as u8, 'o' as u8, + 0b00110000, 10, 0x00, 0x03, 'a' as u8, '/' as u8, 'b' as u8, 'h' as u8, 'e' as u8, + 'l' as u8, 'l' as u8, 'o' as u8, // + 0b00111000, 10, 0x00, 0x03, 'a' as u8, '/' as u8, 'b' as u8, 'h' as u8, 'e' as u8, + 'l' as u8, 'l' as u8, 'o' as u8, // 0b00111101, 12, 0x00, 0x03, 'a' as u8, '/' as u8, 'b' as u8, 0 as u8, 10 as u8, 'h' as u8, 'e' as u8, 'l' as u8, 'l' as u8, 'o' as u8, ]); let d1 = decoder::decode(&mut data).unwrap(); let d2 = decoder::decode(&mut data).unwrap(); let d3 = decoder::decode(&mut data).unwrap(); + + println!("{:?}", d1); match d1 { Some(Packet::Publish(p)) => { assert_eq!(p.dup, false); diff --git a/src/encoder_test.rs b/src/encoder_test.rs index 516dd25..26aa7e9 100644 --- a/src/encoder_test.rs +++ b/src/encoder_test.rs @@ -59,6 +59,7 @@ fn test_publish() { let mut buffer = BytesMut::with_capacity(1024); let _ = encoder::encode(&Packet::Publish(packet), &mut buffer); let decoded = decoder::decode(&mut buffer).unwrap(); + println!("{:?}", decoded); match decoded { Some(Packet::Publish(_c)) => { assert!(true); @@ -101,6 +102,7 @@ fn test_pubrel() { let mut buffer = BytesMut::with_capacity(1024); let _ = encoder::encode(&packet, &mut buffer); let decoded = decoder::decode(&mut buffer).unwrap(); + println!("{:?}", decoded); match decoded { Some(Packet::Pubrel(_c)) => { assert!(true); diff --git a/src/publish.rs b/src/publish.rs index 0e2690f..9923524 100644 --- a/src/publish.rs +++ b/src/publish.rs @@ -21,6 +21,7 @@ impl Publish { } else { Some(PacketIdentifier(buffer.split_to(2).into_buf().get_u16_be())) }; + let payload = buffer.to_vec(); Ok(Publish { dup: header.dup(),