Fixed failures

This commit is contained in:
Ondrej Babec 2022-02-20 15:49:34 +01:00
parent 7218cb2a06
commit 6f0d2d5de4
No known key found for this signature in database
GPG Key ID: 13E577E3769B2079
5 changed files with 43 additions and 16 deletions

View File

@ -54,11 +54,11 @@ impl VariableByteIntegerEncoder {
loop { loop {
let mut encoded_byte: u8; let mut encoded_byte: u8;
encoded_byte = var_int[i]; encoded_byte = var_int[i];
i = i + 1;
if (encoded_byte & 128) == 0 { if (encoded_byte & 128) == 0 {
break; break;
} }
i = i + 1;
} }
return i; return i;
} }

View File

@ -4,12 +4,21 @@ use rust_mqtt::packet::property::*;*/
use std::fs::File; use std::fs::File;
use std::io::Read;*/ use std::io::Read;*/
use rust_mqtt::packet::mqtt_packet::Packet;
use rust_mqtt::packet::subscription_packet::SubscriptionPacket;
fn main() { fn main() {
env_logger::builder() env_logger::builder()
.filter_level(log::LevelFilter::Info) .filter_level(log::LevelFilter::Info)
.format_timestamp_nanos() .format_timestamp_nanos()
.init(); .init();
let mut pckt: SubscriptionPacket<1> = SubscriptionPacket::new();
let mut res = vec![0; 14];
pckt.encode(&mut res);
println!("{:02X?}", res);
log::info!("xxx");
/*let fl = File::open("/Users/obabec/development/school/rust-mqtt/mqtt_control_example.bin"); /*let fl = File::open("/Users/obabec/development/school/rust-mqtt/mqtt_control_example.bin");
let mut f = File::open("/Users/obabec/development/school/rust-mqtt/mqtt_control_example.bin").expect("no file found"); let mut f = File::open("/Users/obabec/development/school/rust-mqtt/mqtt_control_example.bin").expect("no file found");
@ -17,7 +26,7 @@ fn main() {
f.read(&mut buffer).expect("buffer overflow"); f.read(&mut buffer).expect("buffer overflow");
//let mut txt = Vec::new(); //
let mut payld = *b"xxxxx";*/ let mut payld = *b"xxxxx";*/
//let packet = Packet::clean(txt, &mut payld); //let packet = Packet::clean(txt, &mut payld);
/*let mut buffer_reader = BuffReader::new(&buffer); /*let mut buffer_reader = BuffReader::new(&buffer);

View File

@ -55,7 +55,7 @@ impl Into<u8> for PacketType {
PacketType::Pubrec => 0x50, PacketType::Pubrec => 0x50,
PacketType::Pubrel => 0x60, PacketType::Pubrel => 0x60,
PacketType::Pubcomp => 0x70, PacketType::Pubcomp => 0x70,
PacketType::Subscribe => 0x80, PacketType::Subscribe => 0x82,
PacketType::Suback => 0x90, PacketType::Suback => 0x90,
PacketType::Unsubscribe => 0xA0, PacketType::Unsubscribe => 0xA0,
PacketType::Unsuback => 0xB0, PacketType::Unsuback => 0xB0,

View File

@ -32,9 +32,15 @@ pub struct SubscriptionPacket<'a, const MAX_FILTERS: usize> {
} }
impl<'a, const MAX_FILTERS: usize> SubscriptionPacket<'a, MAX_FILTERS> { impl<'a, const MAX_FILTERS: usize> SubscriptionPacket<'a, MAX_FILTERS> {
/*pub fn new() -> Self { pub fn new() -> Self {
let mut x = Self { fixed_header: PacketType::Subscribe.into(), remain_len: 0, packet_identifier: 1,
}*/ property_len: 0, properties: Vec::<Property<'a>, MAX_PROPERTIES>::new(), topic_filter_len: 1, topic_filters: Vec::<TopicFilter<'a>, MAX_FILTERS>::new() };
let mut p = TopicFilter::new();
p.filter.len = 6;
p.filter.string = "test/#";
x.topic_filters.push(p);
return x;
}
} }
impl<'a, const MAX_FILTERS: usize> Packet<'a> for SubscriptionPacket<'a, MAX_FILTERS> { impl<'a, const MAX_FILTERS: usize> Packet<'a> for SubscriptionPacket<'a, MAX_FILTERS> {
@ -44,14 +50,23 @@ impl<'a, const MAX_FILTERS: usize> Packet<'a> for SubscriptionPacket<'a, MAX_FIL
let mut rm_ln = self.property_len; let mut rm_ln = self.property_len;
let property_len_enc: [u8; 4] = VariableByteIntegerEncoder::encode(self.property_len).unwrap(); let property_len_enc: [u8; 4] = VariableByteIntegerEncoder::encode(self.property_len).unwrap();
let property_len_len = VariableByteIntegerEncoder::len(property_len_enc); let property_len_len = VariableByteIntegerEncoder::len(property_len_enc);
rm_ln = rm_ln + property_len_len as u32 + 4 + self.topic_filter_len as u32;
let mut lt = 0;
let mut filters_len = 0;
loop {
filters_len = filters_len + self.topic_filters.get(lt).unwrap().filter.len + 3;
lt = lt + 1;
if lt == self.topic_filter_len as usize {
break;
}
}
rm_ln = rm_ln + property_len_len as u32 + 2 + filters_len as u32;
buff_writer.write_u8(self.fixed_header); buff_writer.write_u8(self.fixed_header);
buff_writer.write_variable_byte_int(rm_ln); buff_writer.write_variable_byte_int(rm_ln);
buff_writer.write_u16(self.packet_identifier); buff_writer.write_u16(self.packet_identifier);
buff_writer.write_variable_byte_int(self.property_len); buff_writer.write_variable_byte_int(self.property_len);
buff_writer.encode_properties::<MAX_PROPERTIES>(&self.properties); buff_writer.encode_properties::<MAX_PROPERTIES>(&self.properties);
buff_writer.write_u16(self.topic_filter_len);
buff_writer.encode_topic_filters_ref(false, self.topic_filter_len as usize, & self.topic_filters); buff_writer.encode_topic_filters_ref(false, self.topic_filter_len as usize, & self.topic_filters);
} }

View File

@ -107,12 +107,14 @@ impl<'a> BuffWriter<'a> {
pub fn encode_properties<const LEN: usize>(& mut self, properties: & Vec<Property<'a>, LEN>) { pub fn encode_properties<const LEN: usize>(& mut self, properties: & Vec<Property<'a>, LEN>) {
let mut i = 0; let mut i = 0;
loop { if properties.len() != 0 {
let prop: &Property = properties.get(i).unwrap(); loop {
self.encode_property(prop); let prop: &Property = properties.get(i).unwrap();
i = i + 1; self.encode_property(prop);
if i == LEN { i = i + 1;
break; if i == LEN {
break;
}
} }
} }
} }
@ -129,6 +131,7 @@ impl<'a> BuffWriter<'a> {
loop { loop {
let topic_filter: & TopicFilter<'a> = filters.get(i).unwrap(); let topic_filter: & TopicFilter<'a> = filters.get(i).unwrap();
self.encode_topic_filter_ref(sub, topic_filter); self.encode_topic_filter_ref(sub, topic_filter);
i = i + 1;
if i == len { if i == len {
break; break;
} }