From a07ad33576727ea1897c5f8463c52540f979e029 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Apr 2024 08:30:35 +0530 Subject: [PATCH 1/4] * allow clients to publish directly (with non zero pkid) * ignore pkids that are beyond max_inflight (to be handled by library users as per their logic) --- Cargo.lock | 4 ++-- rumqttc/src/client.rs | 2 +- rumqttc/src/state.rs | 6 +++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 75a7ced4c..7e12279d8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2041,9 +2041,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.22.2" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e87c9956bd9807afa1f77e0f7594af32566e830e088a5576d27c5b6f30f49d41" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" dependencies = [ "log", "ring", diff --git a/rumqttc/src/client.rs b/rumqttc/src/client.rs index 15cd5f5ad..a9f83d7e9 100644 --- a/rumqttc/src/client.rs +++ b/rumqttc/src/client.rs @@ -41,7 +41,7 @@ impl From> for ClientError { /// from the broker, i.e. move ahead. #[derive(Clone, Debug)] pub struct AsyncClient { - request_tx: Sender, + pub request_tx: Sender, } impl AsyncClient { diff --git a/rumqttc/src/state.rs b/rumqttc/src/state.rs index 408741e35..f9128b3f1 100644 --- a/rumqttc/src/state.rs +++ b/rumqttc/src/state.rs @@ -221,6 +221,10 @@ impl MqttState { } fn handle_incoming_puback(&mut self, puback: &PubAck) -> Result, StateError> { + if puback.pkid > self.max_inflight { + return Ok(None); + } + let publish = self .outgoing_pub .get_mut(puback.pkid as usize) @@ -319,7 +323,7 @@ impl MqttState { /// Adds next packet identifier to QoS 1 and 2 publish packets and returns /// it buy wrapping publish in packet fn outgoing_publish(&mut self, mut publish: Publish) -> Result, StateError> { - if publish.qos != QoS::AtMostOnce { + if publish.qos != QoS::AtMostOnce || publish.pkid > self.max_inflight { if publish.pkid == 0 { publish.pkid = self.next_pkid(); } From e7b52a44a0e2c8360f468358b1cb1cf09dab8f94 Mon Sep 17 00:00:00 2001 From: amokfa Date: Thu, 28 Nov 2024 16:10:46 +0530 Subject: [PATCH 2/4] cargo fmt --- rumqttc/src/v5/state.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rumqttc/src/v5/state.rs b/rumqttc/src/v5/state.rs index 854aa7b0f..5d415dc3f 100644 --- a/rumqttc/src/v5/state.rs +++ b/rumqttc/src/v5/state.rs @@ -65,7 +65,7 @@ pub enum StateError { #[error("Connection failed with reason '{reason:?}' ")] ConnFail { reason: ConnectReturnCode }, #[error("Connection closed by peer abruptly")] - ConnectionAborted + ConnectionAborted, } impl From for StateError { From 5501afece31e6d7f92f0002b3189527007a8d493 Mon Sep 17 00:00:00 2001 From: amokfa Date: Wed, 11 Dec 2024 11:01:54 +0530 Subject: [PATCH 3/4] * fix logic bug in this pr * log errors properlly in event loop --- rumqttc/src/eventloop.rs | 1 + rumqttc/src/state.rs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/rumqttc/src/eventloop.rs b/rumqttc/src/eventloop.rs index a9b1ce8c5..70b6a34f4 100644 --- a/rumqttc/src/eventloop.rs +++ b/rumqttc/src/eventloop.rs @@ -161,6 +161,7 @@ impl EventLoop { match self.select().await { Ok(v) => Ok(v), Err(e) => { + log::error!("connection error : {e}"); self.clean(); Err(e) } diff --git a/rumqttc/src/state.rs b/rumqttc/src/state.rs index f9128b3f1..e567c6565 100644 --- a/rumqttc/src/state.rs +++ b/rumqttc/src/state.rs @@ -323,7 +323,7 @@ impl MqttState { /// Adds next packet identifier to QoS 1 and 2 publish packets and returns /// it buy wrapping publish in packet fn outgoing_publish(&mut self, mut publish: Publish) -> Result, StateError> { - if publish.qos != QoS::AtMostOnce || publish.pkid > self.max_inflight { + if publish.qos != QoS::AtMostOnce && publish.pkid <= self.max_inflight { if publish.pkid == 0 { publish.pkid = self.next_pkid(); } From b7ae6b5693d8c9c972d5eb857b2293fb901d57d9 Mon Sep 17 00:00:00 2001 From: amokfa Date: Wed, 11 Dec 2024 11:06:05 +0530 Subject: [PATCH 4/4] revert lockfile --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7e12279d8..75a7ced4c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2041,9 +2041,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.22.4" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +checksum = "e87c9956bd9807afa1f77e0f7594af32566e830e088a5576d27c5b6f30f49d41" dependencies = [ "log", "ring",