diff --git a/rumqttc/src/state.rs b/rumqttc/src/state.rs index 90ff77acf..b2ac88a8b 100644 --- a/rumqttc/src/state.rs +++ b/rumqttc/src/state.rs @@ -219,14 +219,14 @@ impl MqttState { &mut self, unsuback: &UnsubAck, ) -> Result, StateError> { - if unsuback.pkid > self.max_inflight { - error!("Unsolicited unsuback packet: {:?}", unsuback.pkid); - return Err(StateError::Unsolicited(unsuback.pkid)); + match self.outgoing_unsub.remove(&unsuback.pkid) { + Some(notice) => { + notice.success(); + } + None => { + debug!("Unsolicited unsuback packet: {:?}", unsuback.pkid); + } } - self.outgoing_sub - .remove(&unsuback.pkid) - .ok_or(StateError::Unsolicited(unsuback.pkid))? - .success(); Ok(None) } diff --git a/rumqttc/src/v5/state.rs b/rumqttc/src/v5/state.rs index e7a99da36..687b4d5e4 100644 --- a/rumqttc/src/v5/state.rs +++ b/rumqttc/src/v5/state.rs @@ -283,23 +283,14 @@ impl MqttState { &mut self, unsuback: &mut UnsubAck, ) -> Result, StateError> { - if unsuback.pkid > self.max_outgoing_inflight { - error!("Unsolicited unsuback packet: {:?}", unsuback.pkid); - return Err(StateError::Unsolicited(unsuback.pkid)); - } - - let tx = self - .outgoing_unsub - .remove(&unsuback.pkid) - .ok_or(StateError::Unsolicited(unsuback.pkid))?; - - for reason in unsuback.reasons.iter() { - if reason != &UnsubAckReason::Success { - tx.error(NoticeError::V5Unsubscribe(*reason)); - return Err(StateError::UnsubFail { reason: *reason }); + match self.outgoing_unsub.remove(&unsuback.pkid) { + Some(notice) => { + notice.success(); + } + None => { + debug!("Unsolicited unsuback packet: {:?}", unsuback.pkid); } } - tx.success(); Ok(None) }