Add licences
This commit is contained in:
@@ -1,3 +1,28 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
use crate::packet::publish_packet::QualityOfService;
|
||||
use crate::utils::buffer_reader::{BinaryData, EncodedString};
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ use crate::packet::mqtt_packet::Packet;
|
||||
use crate::packet::puback_packet::PubackPacket;
|
||||
use crate::packet::publish_packet::QualityOfService::QoS1;
|
||||
use crate::packet::publish_packet::{PublishPacket, QualityOfService};
|
||||
use crate::packet::reason_codes::ReasonCode;
|
||||
use crate::packet::suback_packet::SubackPacket;
|
||||
use crate::packet::subscription_packet::SubscriptionPacket;
|
||||
use crate::utils::buffer_reader::BuffReader;
|
||||
@@ -38,7 +39,7 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn connect_to_broker<'b>(&'b mut self) -> Result<(), NetworkError> {
|
||||
pub async fn connect_to_broker<'b>(&'b mut self) -> Result<(), ReasonCode> {
|
||||
let mut len = {
|
||||
let mut connect = ConnectPacket::<'b, 3, 0>::clean();
|
||||
if self.config.username_flag {
|
||||
@@ -50,7 +51,7 @@ where
|
||||
connect.encode(self.buffer)
|
||||
};
|
||||
|
||||
self.network_driver.send(self.buffer, len).await?;
|
||||
self.network_driver.send(self.buffer, len).await ?;
|
||||
|
||||
//connack
|
||||
let reason: u8 = {
|
||||
@@ -61,14 +62,14 @@ where
|
||||
};
|
||||
|
||||
if reason != 0x00 {
|
||||
Err(NetworkError::Connection)
|
||||
return Err(ReasonCode::from(reason));
|
||||
} else {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pub async fn disconnect<'b>(&'b mut self) -> Result<(), NetworkError> {
|
||||
pub async fn disconnect<'b>(&'b mut self) -> Result<(), ReasonCode> {
|
||||
let mut disconnect = DisconnectPacket::<'b, 5>::new();
|
||||
let mut len = disconnect.encode(self.buffer);
|
||||
self.network_driver.send(self.buffer, len).await?;
|
||||
@@ -79,7 +80,7 @@ where
|
||||
&'b mut self,
|
||||
topic_name: &'b str,
|
||||
message: &'b str,
|
||||
) -> Result<(), NetworkError> {
|
||||
) -> Result<(), ReasonCode> {
|
||||
|
||||
let identifier: u16 = self.rng.next_u32() as u16;
|
||||
let len = {
|
||||
@@ -91,62 +92,58 @@ where
|
||||
packet.encode(self.buffer)
|
||||
};
|
||||
|
||||
let x = self.network_driver.send(self.buffer, len).await;
|
||||
self.network_driver.send(self.buffer, len).await ?;
|
||||
|
||||
if let Err(e) = x {
|
||||
log::error!("Chyba pri prenosu!");
|
||||
return Err(e);
|
||||
}
|
||||
|
||||
//QoS1
|
||||
if <QualityOfService as Into<u8>>::into(self.config.qos ) == <QualityOfService as Into<u8>>::into(QoS1) {
|
||||
let reason = {
|
||||
self.network_driver.receive(self.buffer).await?;
|
||||
self.network_driver.receive(self.buffer).await ?;
|
||||
let mut packet = PubackPacket::<'b, 5>::new();
|
||||
packet.decode(&mut BuffReader::new(self.buffer));
|
||||
[packet.packet_identifier, packet.reason_code as u16]
|
||||
};
|
||||
|
||||
if identifier != reason[0] {
|
||||
return Err(NetworkError::IDNotMatchedOnAck);
|
||||
return Err(ReasonCode::PacketIdentifierNotFound);
|
||||
}
|
||||
|
||||
if reason[1] != 0 {
|
||||
return Err(NetworkError::QoSAck);
|
||||
return Err(ReasonCode::from(reason[1] as u8));
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// TODO - multiple topic subscribe func
|
||||
|
||||
pub async fn subscribe_to_topic<'b>(&'b mut self, topic_name: &'b str) -> Result<(), NetworkError> {
|
||||
|
||||
pub async fn subscribe_to_topic<'b>(&'b mut self, topic_name: &'b str) -> Result<(), ReasonCode> {
|
||||
let len = {
|
||||
let mut subs = SubscriptionPacket::<'b, 1, 1>::new();
|
||||
subs.add_new_filter(topic_name, self.config.qos);
|
||||
subs.encode(self.buffer)
|
||||
};
|
||||
let xx: [u8; 14] = (self.buffer[0..14]).try_into().unwrap();
|
||||
log::info!("{:x?}", xx);
|
||||
self.network_driver.send(self.buffer, len).await?;
|
||||
|
||||
self.network_driver.send(self.buffer, len).await ?;
|
||||
|
||||
let reason = {
|
||||
self.network_driver.receive(self.buffer).await?;
|
||||
self.network_driver.receive(self.buffer).await ?;
|
||||
|
||||
let mut packet = SubackPacket::<'b, 5, 5>::new();
|
||||
packet.decode(&mut BuffReader::new(self.buffer));
|
||||
*packet.reason_codes.get(0).unwrap()
|
||||
};
|
||||
|
||||
if reason == (<QualityOfService as Into<u8>>::into(self.config.qos) >> 1) {
|
||||
Err(NetworkError::Unknown)
|
||||
if reason != (<QualityOfService as Into<u8>>::into(self.config.qos) >> 1) {
|
||||
Err(ReasonCode::from(reason))
|
||||
} else {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pub async fn receive_message<'b>(&'b mut self) -> Result<&'b [u8], NetworkError> {
|
||||
self.network_driver.receive(self.recv_buffer).await?;
|
||||
pub async fn receive_message<'b>(&'b mut self) -> Result<&'b [u8], ReasonCode> {
|
||||
self.network_driver.receive(self.recv_buffer).await ?;
|
||||
let mut packet = PublishPacket::<'b, 5>::new();
|
||||
packet.decode(&mut BuffReader::new(self.recv_buffer));
|
||||
|
||||
|
||||
@@ -1,2 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
pub mod client_v5;
|
||||
pub mod client_config;
|
||||
|
||||
@@ -1 +1,26 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
pub mod variable_byte_integer;
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
MIT License
|
||||
|
||||
Copyright (c) [2022] [Ondrej Babec <ond.babec@gmailc.com>]
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#![crate_name = "doc"]
|
||||
|
||||
use crate::utils::buffer_reader::ParseError;
|
||||
|
||||
52
src/lib.rs
52
src/lib.rs
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#![feature(in_band_lifetimes)]
|
||||
#![macro_use]
|
||||
#![cfg_attr(not(feature = "std"), no_std)]
|
||||
@@ -13,31 +37,3 @@ pub mod network;
|
||||
pub mod packet;
|
||||
pub mod tokio_network;
|
||||
pub mod utils;
|
||||
|
||||
#[allow(unused_variables)]
|
||||
pub fn print_stack(file: &'static str, line: u32) {
|
||||
let _u: u32 = 1;
|
||||
let _uptr: *const u32 = &_u;
|
||||
// log::trace!("[{}:{}] SP: 0x{:p}", file, line, &_uptr);
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
pub fn log_stack(file: &'static str) {
|
||||
let _u: u32 = 1;
|
||||
let _uptr: *const u32 = &_u;
|
||||
//trace!("[{}] SP: 0x{:?}", file, &_uptr);
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
pub fn print_size<T>(name: &'static str) {
|
||||
//log::info!("[{}] size: {}", name, core::mem::size_of::<T>());
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
pub fn print_value_size<T>(name: &'static str, val: &T) {
|
||||
/* log::info!(
|
||||
"[{}] value size: {}",
|
||||
name,
|
||||
core::mem::size_of_val::<T>(val)
|
||||
);*/
|
||||
}
|
||||
|
||||
10
src/main.rs
10
src/main.rs
@@ -19,12 +19,18 @@ async fn receive() {
|
||||
let mut config = ClientConfig::new();
|
||||
config.add_qos(QualityOfService::QoS1);
|
||||
config.add_username("test");
|
||||
config.add_password("testPass");
|
||||
config.add_password("testPass1");
|
||||
let mut res2 = vec![0; 260];
|
||||
let mut res3 = vec![0; 260];
|
||||
let mut client = MqttClientV5::<TokioNetwork, 5>::new(&mut tokio_network, &mut res2, & mut res3, config);
|
||||
|
||||
let mut result = { client.connect_to_broker().await };
|
||||
let mut result = {
|
||||
client.connect_to_broker().await
|
||||
};
|
||||
if let Err(r) = result {
|
||||
log::error!("[ERROR]: {}", r);
|
||||
return;
|
||||
}
|
||||
|
||||
{
|
||||
client.subscribe_to_topic("test/topic").await;
|
||||
|
||||
@@ -1 +1,26 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
pub mod network_trait;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use core::fmt::Error;
|
||||
use core::future::Future;
|
||||
|
||||
use crate::packet::reason_codes::ReasonCode;
|
||||
use crate::packet::mqtt_packet::Packet;
|
||||
|
||||
|
||||
@@ -14,15 +14,15 @@ pub enum NetworkError {
|
||||
}
|
||||
|
||||
pub trait Network {
|
||||
type ConnectionFuture<'m>: Future<Output = Result<(), NetworkError>>
|
||||
type ConnectionFuture<'m>: Future<Output = Result<(), ReasonCode>>
|
||||
where
|
||||
Self: 'm;
|
||||
|
||||
type WriteFuture<'m>: Future<Output = Result<(), NetworkError>>
|
||||
type WriteFuture<'m>: Future<Output = Result<(), ReasonCode>>
|
||||
where
|
||||
Self: 'm;
|
||||
|
||||
type ReadFuture<'m>: Future<Output = Result<usize, NetworkError>>
|
||||
type ReadFuture<'m>: Future<Output = Result<usize, ReasonCode>>
|
||||
where
|
||||
Self: 'm;
|
||||
|
||||
|
||||
@@ -1,3 +1,28 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
use heapless::Vec;
|
||||
|
||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||
@@ -8,20 +33,18 @@ use crate::utils::buffer_writer::BuffWriter;
|
||||
use super::packet_type::PacketType;
|
||||
use super::property::Property;
|
||||
|
||||
/// Auth packets serves MQTTv5 extended authentication. This packet is not currently supported
|
||||
/// by rust-mqtt client but decoding and encoding of packet is prepared for future development.
|
||||
pub struct AuthPacket<'a, const MAX_PROPERTIES: usize> {
|
||||
// 7 - 4 mqtt control packet type, 3-0 flagy
|
||||
pub fixed_header: u8,
|
||||
// 1 - 4 B lenght of variable header + len of payload
|
||||
pub remain_len: u32,
|
||||
|
||||
pub auth_reason: u8,
|
||||
|
||||
pub property_len: u32,
|
||||
|
||||
pub properties: Vec<Property<'a>, MAX_PROPERTIES>,
|
||||
}
|
||||
|
||||
impl<'a, const MAX_PROPERTIES: usize> AuthPacket<'a, MAX_PROPERTIES> {
|
||||
/// Function is decoding auth packet from Byte array (buffer).
|
||||
pub fn decode_auth_packet(&mut self, buff_reader: &mut BuffReader<'a>) {
|
||||
self.decode_fixed_header(buff_reader);
|
||||
self.auth_reason = buff_reader.read_u8().unwrap();
|
||||
@@ -47,11 +70,14 @@ impl<'a, const MAX_PROPERTIES: usize> AuthPacket<'a, MAX_PROPERTIES> {
|
||||
|
||||
impl<'a, const MAX_PROPERTIES: usize> Packet<'a> for AuthPacket<'a, MAX_PROPERTIES> {
|
||||
fn new() -> Self {
|
||||
todo!()
|
||||
Self {
|
||||
fixed_header: PacketType::Auth.into(),
|
||||
remain_len: 0,
|
||||
auth_reason: 0x00,
|
||||
property_len: 0,
|
||||
properties: Vec::<Property<'a>, MAX_PROPERTIES>::new()
|
||||
}
|
||||
}
|
||||
/*fn new() -> Packet<'a, MAX_PROPERTIES> {
|
||||
return AuthPacket { fixed_header: PacketType::Auth.into(), remain_len: 0, auth_reason: 0, property_len: 0, properties: Vec::<Property<'a>, MAX_PROPERTIES>::new() }
|
||||
}*/
|
||||
|
||||
fn encode(&mut self, buffer: &mut [u8]) -> usize {
|
||||
let mut buff_writer = BuffWriter::new(buffer);
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use heapless::Vec;
|
||||
|
||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use heapless::Vec;
|
||||
|
||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use heapless::Vec;
|
||||
|
||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||
|
||||
@@ -1,4 +1,27 @@
|
||||
//pub mod control_packet;
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
pub mod auth_packet;
|
||||
pub mod connack_packet;
|
||||
pub mod mqtt_packet;
|
||||
|
||||
@@ -1,25 +1,55 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use crate::packet::packet_type::PacketType;
|
||||
use crate::utils::buffer_reader::BuffReader;
|
||||
use crate::utils::buffer_reader::ParseError;
|
||||
|
||||
use super::property::Property;
|
||||
|
||||
/// This trait provide interface for mapping MQTTv5 packets to human readable structures
|
||||
/// which can be later modified and used for communication purposes.
|
||||
pub trait Packet<'a> {
|
||||
fn new() -> Self;
|
||||
|
||||
/// Method encode provide way how to transfer Packet struct into Byte array (buffer)
|
||||
fn encode(&mut self, buffer: &mut [u8]) -> usize;
|
||||
// -> Result<Ok(), Err()>
|
||||
/// Decode method is opposite of encode - decoding Byte array and mapping it into corresponding Packet struct
|
||||
fn decode(&mut self, buff_reader: &mut BuffReader<'a>);
|
||||
|
||||
// properties
|
||||
/// Setter method for packet properties len - not all Packet types support this
|
||||
fn set_property_len(&mut self, value: u32);
|
||||
/// Setter method for packet properties len - not all Packet types support this
|
||||
fn get_property_len(&mut self) -> u32;
|
||||
/// Method enables pushing new property into packet properties
|
||||
fn push_to_properties(&mut self, property: Property<'a>);
|
||||
|
||||
// header
|
||||
/// Setter for packet fixed header
|
||||
fn set_fixed_header(&mut self, header: u8);
|
||||
/// Setter for remaining len
|
||||
fn set_remaining_len(&mut self, remaining_len: u32);
|
||||
|
||||
/// Method is decoding Byte array pointing to properties into heapless Vec
|
||||
/// in packet. If decoding goes wrong method is returning Error
|
||||
fn decode_properties(&mut self, buff_reader: &mut BuffReader<'a>) {
|
||||
self.set_property_len(buff_reader.read_variable_byte_int().unwrap());
|
||||
let mut x: u32 = 0;
|
||||
@@ -29,11 +59,10 @@ pub trait Packet<'a> {
|
||||
let mut res: Property;
|
||||
prop = Property::decode(buff_reader);
|
||||
if let Ok(res) = prop {
|
||||
log::info!("Parsed property {:?}", res);
|
||||
log::debug!("Parsed property {:?}", res);
|
||||
x = x + res.len() as u32 + 1;
|
||||
self.push_to_properties(res);
|
||||
} else {
|
||||
// error handler
|
||||
log::error!("Problem during property decoding");
|
||||
}
|
||||
|
||||
@@ -44,6 +73,7 @@ pub trait Packet<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Method is decoding packet header into fixed header part and remaining length
|
||||
fn decode_fixed_header(&mut self, buff_reader: &mut BuffReader) -> PacketType {
|
||||
let first_byte: u8 = buff_reader.read_u8().unwrap();
|
||||
self.set_fixed_header(first_byte);
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
// x x x x - - - -
|
||||
|
||||
#[derive(PartialEq)]
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use crate::packet::mqtt_packet::Packet;
|
||||
use crate::utils::buffer_reader::BuffReader;
|
||||
use crate::utils::buffer_writer::BuffWriter;
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use crate::packet::mqtt_packet::Packet;
|
||||
use crate::utils::buffer_reader::BuffReader;
|
||||
use crate::utils::buffer_writer::BuffWriter;
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use crate::encoding::variable_byte_integer::{VariableByteInteger, VariableByteIntegerEncoder};
|
||||
use crate::utils::buffer_reader::BinaryData;
|
||||
use crate::utils::buffer_reader::BuffReader;
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use heapless::Vec;
|
||||
|
||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use heapless::Vec;
|
||||
|
||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use core::ptr::null;
|
||||
use heapless::Vec;
|
||||
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use heapless::Vec;
|
||||
|
||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use heapless::Vec;
|
||||
|
||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use core::fmt::{Display, Formatter, write};
|
||||
use crate::packet::reason_codes::ReasonCode::ServerMoved;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum ReasonCode {
|
||||
Success,
|
||||
GrantedQoS1,
|
||||
@@ -45,7 +46,7 @@ pub enum ReasonCode {
|
||||
MaximumConnectTime,
|
||||
SubscriptionIdentifiersNotSupported,
|
||||
WildcardSubscriptionNotSupported,
|
||||
Unknown
|
||||
NetworkError,
|
||||
}
|
||||
|
||||
impl Into<u8> for ReasonCode {
|
||||
@@ -94,7 +95,7 @@ impl Into<u8> for ReasonCode {
|
||||
ReasonCode::MaximumConnectTime => 0xA0,
|
||||
ReasonCode::SubscriptionIdentifiersNotSupported => 0xA1,
|
||||
ReasonCode::WildcardSubscriptionNotSupported => 0xA2,
|
||||
ReasonCode::Unknown => 0xFF
|
||||
ReasonCode::NetworkError => 0xFF
|
||||
}
|
||||
|
||||
}
|
||||
@@ -145,7 +146,7 @@ impl From<u8> for ReasonCode {
|
||||
0xA0 => ReasonCode::MaximumConnectTime,
|
||||
0xA1 => ReasonCode::SubscriptionIdentifiersNotSupported,
|
||||
0xA2 => ReasonCode::WildcardSubscriptionNotSupported,
|
||||
_ => ReasonCode::Unknown
|
||||
_ => ReasonCode::NetworkError
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -156,7 +157,7 @@ impl Display for ReasonCode {
|
||||
ReasonCode::Success => write!(f, "Operation was successful!"),
|
||||
ReasonCode::GrantedQoS1 => write!(f, "Granted QoS level 1!"),
|
||||
ReasonCode::GrantedQoS2 => write!(f, "Granted QoS level 2!"),
|
||||
ReasonCode::DisconnectWithWillMessage => {}
|
||||
ReasonCode::DisconnectWithWillMessage => write!(f, "Disconnected with Will message!"),
|
||||
ReasonCode::NoMatchingSubscribers => write!(f, "No matching subscribers on broker!"),
|
||||
ReasonCode::NoSubscriptionExisted => write!(f, "Subscription not exist!"),
|
||||
ReasonCode::ContinueAuth => write!(f, "Broker asks for more AUTH packets!"),
|
||||
@@ -196,7 +197,7 @@ impl Display for ReasonCode {
|
||||
ReasonCode::MaximumConnectTime => write!(f, "Maximum connect time exceeded!"),
|
||||
ReasonCode::SubscriptionIdentifiersNotSupported => write!(f, "Subscription identifier not supported!"),
|
||||
ReasonCode::WildcardSubscriptionNotSupported => write!(f, "Wildcard subscription not supported!"),
|
||||
ReasonCode::Unknown => write!(f, "Unknown error!"),
|
||||
ReasonCode::NetworkError => write!(f, "Unknown error!"),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use heapless::Vec;
|
||||
|
||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use heapless::Vec;
|
||||
|
||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use heapless::Vec;
|
||||
|
||||
use crate::packet::mqtt_packet::Packet;
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use heapless::Vec;
|
||||
|
||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||
|
||||
@@ -8,8 +8,9 @@ use core::ptr::null;
|
||||
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
||||
use tokio::net::{TcpListener, TcpStream};
|
||||
|
||||
use crate::network::network_trait::{Network, NetworkError};
|
||||
use crate::network::network_trait::{Network};
|
||||
use crate::packet::mqtt_packet::Packet;
|
||||
use crate::packet::reason_codes::ReasonCode;
|
||||
|
||||
pub struct TokioNetwork {
|
||||
ip: [u8; 4],
|
||||
@@ -32,15 +33,15 @@ impl Network for TokioNetwork {
|
||||
type ConnectionFuture<'m>
|
||||
where
|
||||
Self: 'm,
|
||||
= impl Future<Output = Result<(), NetworkError>> + 'm;
|
||||
= impl Future<Output = Result<(), ReasonCode>> + 'm;
|
||||
type WriteFuture<'m>
|
||||
where
|
||||
Self: 'm,
|
||||
= impl Future<Output = Result<(), NetworkError>> + 'm;
|
||||
= impl Future<Output = Result<(), ReasonCode>> + 'm;
|
||||
type ReadFuture<'m>
|
||||
where
|
||||
Self: 'm,
|
||||
= impl Future<Output = Result<usize, NetworkError>> + 'm;
|
||||
= impl Future<Output = Result<usize, ReasonCode>> + 'm;
|
||||
|
||||
fn new(ip: [u8; 4], port: u16) -> Self {
|
||||
return Self {
|
||||
@@ -56,7 +57,7 @@ impl Network for TokioNetwork {
|
||||
.await
|
||||
.map(|socket| self.socket = Some(socket))
|
||||
.map(|_| ())
|
||||
.map_err(|_| NetworkError::Connection)
|
||||
.map_err(|_| ReasonCode::NetworkError)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,9 +67,9 @@ impl Network for TokioNetwork {
|
||||
stream
|
||||
.write_all(&buffer[0..len])
|
||||
.await
|
||||
.map_err(|_| NetworkError::Unknown)
|
||||
.map_err(|_| ReasonCode::NetworkError)
|
||||
} else {
|
||||
Err(NetworkError::Unknown)
|
||||
Err(ReasonCode::NetworkError)
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -79,20 +80,10 @@ impl Network for TokioNetwork {
|
||||
stream
|
||||
.read(buffer)
|
||||
.await
|
||||
.map_err(|_| NetworkError::Connection)
|
||||
.map_err(|_| ReasonCode::NetworkError)
|
||||
} else {
|
||||
Err(NetworkError::Unknown)
|
||||
Err(ReasonCode::NetworkError)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/*fn send(&mut self, buffer: &mut [u8], len: usize) -> Result<(), NetworkError> {
|
||||
self.socket.write_all(&buffer[0..len]);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn receive(&mut self, buffer: &mut [u8]) -> Result<usize, NetworkError> {
|
||||
let len = self.socket.read(buffer).await ?;
|
||||
Ok(len)
|
||||
}*/
|
||||
}
|
||||
|
||||
@@ -1,8 +1,33 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use core::mem;
|
||||
use core::str;
|
||||
|
||||
use crate::encoding::variable_byte_integer::VariableByteIntegerDecoder;
|
||||
|
||||
/// Encoded string provides structure representing UTF-8 encoded string in MQTTv5 packets
|
||||
#[derive(Debug)]
|
||||
#[derive(Clone)]
|
||||
pub struct EncodedString<'a> {
|
||||
@@ -14,12 +39,13 @@ impl EncodedString<'_> {
|
||||
pub fn new() -> Self {
|
||||
Self { string: "", len: 0 }
|
||||
}
|
||||
|
||||
/// Return length of string
|
||||
pub fn len(&self) -> u16 {
|
||||
return self.len + 2;
|
||||
}
|
||||
}
|
||||
|
||||
/// Binary data represents `Binary data` in MQTTv5 protocol
|
||||
#[derive(Debug)]
|
||||
#[derive(Clone)]
|
||||
pub struct BinaryData<'a> {
|
||||
@@ -31,12 +57,13 @@ impl BinaryData<'_> {
|
||||
pub fn new() -> Self {
|
||||
Self { bin: &[0], len: 0 }
|
||||
}
|
||||
|
||||
/// Returns length of Byte array
|
||||
pub fn len(&self) -> u16 {
|
||||
return self.len + 2;
|
||||
}
|
||||
}
|
||||
|
||||
/// String pair struct represents `String pair` in MQTTv5 (2 UTF-8 encoded strings name-value)
|
||||
#[derive(Debug)]
|
||||
pub struct StringPair<'a> {
|
||||
pub name: EncodedString<'a>,
|
||||
@@ -44,12 +71,14 @@ pub struct StringPair<'a> {
|
||||
}
|
||||
|
||||
impl StringPair<'_> {
|
||||
/// Returns length which is equal to sum of the lenghts of UTF-8 encoded strings in pair
|
||||
pub fn len(&self) -> u16 {
|
||||
let ln = self.name.len() + self.value.len();
|
||||
return ln;
|
||||
}
|
||||
}
|
||||
|
||||
/// Topic filter serves as bound for topic selection and subscription options for `SUBSCRIPTION` packet
|
||||
#[derive(Debug)]
|
||||
pub struct TopicFilter<'a> {
|
||||
pub filter: EncodedString<'a>,
|
||||
@@ -79,6 +108,8 @@ pub enum ParseError {
|
||||
DecodingError,
|
||||
}
|
||||
|
||||
/// Buff reader is reading corresponding types from buffer (Byte array) and stores current position
|
||||
/// (later as cursor)
|
||||
pub struct BuffReader<'a> {
|
||||
buffer: &'a [u8],
|
||||
pub position: usize,
|
||||
@@ -96,6 +127,8 @@ impl<'a> BuffReader<'a> {
|
||||
};
|
||||
}
|
||||
|
||||
/// Variable byte integer can be 1-4 Bytes long. Buffer reader takes all 4 Bytes at first and
|
||||
/// than check what is true length of varbyteint and increment cursor by that
|
||||
pub fn read_variable_byte_int(&mut self) -> Result<u32, ParseError> {
|
||||
let variable_byte_integer: [u8; 4] = [
|
||||
self.buffer[self.position],
|
||||
@@ -104,6 +137,7 @@ impl<'a> BuffReader<'a> {
|
||||
self.buffer[self.position + 3],
|
||||
];
|
||||
let mut len: usize = 1;
|
||||
/// Everytime checking first bit of Byte which determines whenever there is continous Byte
|
||||
if variable_byte_integer[0] & 0x80 == 1 {
|
||||
len = len + 1;
|
||||
if variable_byte_integer[1] & 0x80 == 1 {
|
||||
@@ -117,33 +151,35 @@ impl<'a> BuffReader<'a> {
|
||||
return VariableByteIntegerDecoder::decode(variable_byte_integer);
|
||||
}
|
||||
|
||||
/// Reading u32 from buffer as `Big endian`
|
||||
pub fn read_u32(&mut self) -> Result<u32, ParseError> {
|
||||
let (int_bytes, rest) = self.buffer[self.position..].split_at(mem::size_of::<u32>());
|
||||
let ret: u32 = u32::from_be_bytes(int_bytes.try_into().unwrap());
|
||||
//let ret: u32 = (((self.buffer[self.position] as u32) << 24) | ((self.buffer[self.position + 1] as u32) << 16) | ((self.buffer[self.position + 2] as u32) << 8) | (self.buffer[self.position + 3] as u32)) as u32;
|
||||
self.increment_position(4);
|
||||
return Ok(ret);
|
||||
}
|
||||
|
||||
/// Reading u16 from buffer as `Big endinan`
|
||||
pub fn read_u16(&mut self) -> Result<u16, ParseError> {
|
||||
let (int_bytes, rest) = self.buffer[self.position..].split_at(mem::size_of::<u16>());
|
||||
let ret: u16 = u16::from_be_bytes(int_bytes.try_into().unwrap());
|
||||
//(((self.buffer[self.position] as u16) << 8) | (self.buffer[self.position + 1] as u16)) as u16;
|
||||
self.increment_position(2);
|
||||
return Ok(ret);
|
||||
}
|
||||
|
||||
/// Reading one byte from buffer as `Big endian`
|
||||
pub fn read_u8(&mut self) -> Result<u8, ParseError> {
|
||||
let ret: u8 = self.buffer[self.position];
|
||||
self.increment_position(1);
|
||||
return Ok(ret);
|
||||
}
|
||||
|
||||
/// Reading UTF-8 encoded string from buffer
|
||||
pub fn read_string(&mut self) -> Result<EncodedString<'a>, ParseError> {
|
||||
let len = self.read_u16();
|
||||
match len {
|
||||
Err(err) => return Err(err),
|
||||
_ => log::debug!("[parseString] let not parsed"),
|
||||
_ => {},
|
||||
}
|
||||
let len_res = len.unwrap();
|
||||
let res_str =
|
||||
@@ -160,6 +196,7 @@ impl<'a> BuffReader<'a> {
|
||||
}
|
||||
|
||||
//TODO: Index out of bounce err !!!!!
|
||||
/// Read Binary data from buffer
|
||||
pub fn read_binary(&mut self) -> Result<BinaryData<'a>, ParseError> {
|
||||
let len = self.read_u16();
|
||||
match len {
|
||||
@@ -174,6 +211,7 @@ impl<'a> BuffReader<'a> {
|
||||
});
|
||||
}
|
||||
|
||||
/// Read string pair from buffer
|
||||
pub fn read_string_pair(&mut self) -> Result<StringPair<'a>, ParseError> {
|
||||
let name = self.read_string();
|
||||
match name {
|
||||
@@ -191,6 +229,7 @@ impl<'a> BuffReader<'a> {
|
||||
});
|
||||
}
|
||||
|
||||
/// Read payload message from buffer
|
||||
pub fn read_message(&mut self, total_len: usize) -> &'a [u8] {
|
||||
return &self.buffer[self.position..total_len];
|
||||
}
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
use core::str;
|
||||
|
||||
use heapless::Vec;
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) [2022] [Ondrej Babec <ond.babec@gmail.com>]
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
pub mod buffer_reader;
|
||||
pub mod buffer_writer;
|
||||
pub mod rng_generator;
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// This code is handed from Embedded Rust documentation and
|
||||
// is accessible from https://docs.rust-embedded.org/cortex-m-rt/0.6.0/rand/trait.RngCore.html
|
||||
|
||||
use rand_core::{RngCore, Error, impls};
|
||||
|
||||
pub struct CountingRng(pub u64);
|
||||
|
||||
Reference in New Issue
Block a user