# Changes

## [6.3.1] - 2025-12-15

* Expose ProtocolViolationError info

## [6.3.0] - 2025-12-14

* Update ntex-io primitives

## [6.2.1] - 2025-12-09

* Drop first handler future on stop

## [6.2.0] - 2025-12-08

* Update bstream

* Allow to configure payload buffer size

## [6.1.1] - 2025-12-04

* Add helper method for Connect message

## [6.1.0] - 2025-12-04

* Refactor service configuration

## [6.0.0] - 2025-12-03

* Update edition

## [6.0.0-pre.0] - 2025-11-28

* Use shared configuration

* Update MSRV to 1.85

## [5.5.0] - 2025-10-07

* Drop payload stream on service error

## [5.4.0] - 2025-10-02

* Cancel packet handling on stop

## [5.3.0] - 2025-08-15

* Added v3::HandshakeAck.max_packet_size(..) to allow overriding maximum supported packet size on per connection basis

## [5.2.1] - 2025-05-21

* Try to fix docs.rs build

## [5.2.0] - 2025-05-08

* Refactor stream support in publish builder

## [5.1.0] - 2025-05-05

* Fix .read_all() method return type

## [5.0.0] - 2025-04-28

* Raise ProtocolError for unexpected PublishRelease

## [5.0.0-beta.2] - 2025-04-21

* Add QoS::ExactlyOnce support

## [5.0.0-beta.1] - 2025-04-16

* Cleanup payload errors

## [5.0.0-beta.0] - 2025-04-15

* Add publish packet streaming

## [4.6.0] - 2025-04-02

* Remove "client-id" check for v5

## [4.5.1] - 2024-12-04

* Check service readiness for every turn

## [4.5.0] - 2024-12-04

* Use updated Service trait

## [4.4.0] - 2024-11-10

* Check service readiness once per decoded item

* Run un-readiness check in separate task

## [4.3.1] - 2024-11-05

* Do not rely on not_ready(), always check service readiness

## [4.3.0] - 2024-11-04

* Use updated Service trait

## [4.2.1] - 2024-11-01

* Better rediness error handling

## [4.2.0] - 2024-10-31

* Call control service on readiness error

## [4.1.1] - 2024-10-15

* Disconnect on error from service readiness check

## [4.1.0] - 2024-10-10

* Do not check readiness for call

* Handle service readiness errors during shutdown

## [4.0.0] - 2024-10-05

* Middlewares support for mqtt server

## [3.1.0] - 2024-08-23

* Derive Hash for the QoS enum #175

## [3.0.0] - 2024-05-28

* Switch to individual ntex_* crates

* Use ntex-service 3.0

## [2.0.2] - 2024-05-15

* Remove non_exhaustive marker

## [2.0.1] - 2024-05-14

* Better naming

## [2.0.0] - 2024-05-1x

* Mark `Control` type as `non exhaustive`

* Rename `ControlMessage` to `Control`

* Remove protocol variant services

* Disable keep-alive timer if not configured

* Add write back-pressure to io dispatcher

## [1.1.0] - 2024-03-07

* Use MqttService::connect_timeout() only for reading protocol version

## [1.0.0] - 2024-01-09

* Release

## [1.0.0-b.0] - 2024-01-07

* Use "async fn" in trait for Service definition

## [0.12.16] - 2023-12-25

* Handle QoS 0 messages when the client disconnect #164

* Use io tags

## [0.12.15] - 2023-12-10

* Fix KEEP-ALIVE timer handling

## [0.12.14] - 2023-12-03

* Optimize KEEP-ALIVE timer

## [0.12.13] - 2023-11-29

* Refactor io timers

## [0.12.12] - 2023-11-25

* Fix keep-alive timeout handling

## [0.12.11] - 2023-11-23

* Refactor slow frame timeout handling

## [0.12.10] - 2023-11-21

* Remove slow frame timer if service is not ready

## [0.12.9] - 2023-11-17

* Do not process data in read buffer after disconnect

## [0.12.8] - 2023-11-12

* Use new ntex-io apis

## [0.12.7] - 2023-11-04

* Fix v5::Subscribe/Unsubscribe packet properties encoding

## [0.12.6] - 2023-10-31

* Send server ConnectAck without io flushing

## [0.12.5] - 2023-10-23

* Fix typo

## [0.12.4] - 2023-10-03

* Fix nested error handling for control service

## [0.12.3] - 2023-10-01

* Fix Publish and Control error type

## [0.12.2] - 2023-09-25

* Drop unneeded HandshakeError::Server

## [0.12.1] - 2023-09-25

* Change handshake timeout behavior (renamed to connect timeout).
  Timeout handles slow client's Control frame.

## [0.12.0] - 2023-09-18

* Refactor MqttError type

## [0.11.4] - 2023-08-10

* Update ntex deps

## [0.11.3] - 2023-06-26

* Update BufferService usage

## [0.11.2] - 2023-06-23

* Fix client connector usage, fixes lifetime constraint

## [0.11.1] - 2023-06-23

* `PipelineCall` is static

## [0.11.0] - 2023-06-22

* Release v0.11.0

## [0.11.0-beta.3] - 2023-06-21

* Use ContainerCall, remove unsafe

## [0.11.0-beta.2] - 2023-06-19

* Fix Dispatcher impl, poll Container<S> instead of S

## [0.11.0-beta.1] - 2023-06-19

* Use ServiceCtx instead of Ctx

## [0.11.0-beta.0] - 2023-06-17

* Migrate to ntex-0.7

## [0.10.4] - 2023-05-12

* Expose size of prepared packet

* Return packet and packet size from decoder

## [0.10.3] - 2023-04-06

* Adds non-blocking qos1 publish sender

* Adds validation of topic filters in SUBSCRIBE and UNSUBSCRIBE (#136)

## [0.10.2] - 2023-03-15

* Sink readiness depends on write back-pressure

## [0.10.1] - 2023-01-31

* Fix missing ready wakes up from InFlightService

* Register Dispatcher waker when service is not ready

## [0.10.0] - 2023-01-24

* Change ConnectAck session_expiry_interval_secs type to Option<u32>

* Introduce EncodeError::OverMaxPacketSize to differentiate failure to encode due to going over peer's Maximum packet size

## [0.10.0-beta.3] - 2023-01-20

* Revert builders refactoring

## [0.10.0-beta.2] - 2023-01-20

* Fix dispatcher leak during stop process

* Refactor client error

* Drop derive_more dep

* Exposed QoS at crate's level, disbanded types module

* Added v5::Sink::force_close()

* Added v5::Client::into_inner()

* packet properties with clear defaults per spec are represented without Option, use default when absent; for example, Session Expiry Interval, Maximum QoS, Retain Available, etc. in Connect and ConnectAck

* server-level settings for Maximum QoS, Topic Alias Maximum and Receive Maximum are now applied at ConnectAck construction. Any changes to ConnectAck in Handshake service are honored on connection level.

* Setting RETAIN on PUBLISH when CONNACK stated `Retain Available: 0` triggers Protocol Error

* Setting Subscription Identifier on SUBSCRIBE when CONNACK stated `Subscription Identifier Available: 0` triggers Protocol Error

* Topic name with `+` or `#` in it will trigger Protocol Error

* Protocol violation errors are now grouped under opaque ProtocolViolationError

* Removed Client re-export under v3 module. Use v3::client::Client instead.

## [0.10.0-beta.1] - 2023-01-04

* Migrate to ntex-0.6

* Use thiserror::Error for error definitions

## [0.10.0-beta.0] - 2022-12-28

* Migrate to ntex-service 1.0

## [0.9.2] - 2022-12-16

* v5: Fix topic alias handling #122

* v3: Allow to change outgoing in-flight limit

* v3/v5: Fix sink inflight messages handling after local codec error #123

## [0.9.1] - 2022-11-17

* v5: allow omitting properties length if it is 0 in packets without payload regardless of reason code or its presence.

## [0.9.0] - 2022-11-01

* Rename `Level` to `TopicFilterLevel` for better spec compliance

* v5: Use correct reason code for MaxQosViolated error #117

## [0.9.0-b.2] - 2022-10-28

* v3/v5: MqttSink::ready() is not ready until CONNACK get sent to peer

## [0.9.0-b.1] - 2022-10-17

* Remove deprecated methods

## [0.9.0-b.0] - 2022-10-10

* Renamed Topic into TopicFilter, TopicError into TopicFilterError
* Changes to topic filter validation: levels starting with `$` are allowed at any level and are recognized as system
  only at first position
* Changes to topic matching logic: when topic filter is matched against another topic filter via TopicFilter.match_filter(),
  left hand side topic filter must be strict superset of all topics allowed with topic filter on right hand side
* Changes to topic matching logic: having `+/#` in the end of topic filter does not wrongly recover failed match on `+` level
* Validation is now part of TopicFilter instantiation, e.g. it is impossible to create non-validated topic filter from
  set of Levels.
* Level API is removed completely as level itself is not a valuable concept.

## [0.8.11] - 2022-10-07

* v3/v5: Allow to create `PublishBuilder` with predefined Publish packet

* v3: Allow to specify max allowed qos for server publishes

* v5: Check max qos violations in server dispatcher

## [0.8.10] - 2022-09-25

* Add .into_inner() client's helper for publish control message

## [0.8.9] - 2022-09-16

* v3: Send disconnect packet on sink close

* v3: Treat disconnect packet as error on client side

## [0.8.8] - 2022-08-22

* Allow to get inner io stream and codec for negotiated clients

* Remove inflight limit for client's control service

* v3: Add Debug trait for client's ControlMessage

## [0.8.7] - 2022-06-09

* v5: Encoding missing will properties: will_delay_interval_sec, is_utf8_payload, message_expiry_interval, content_type, response_topic, correlation_data, user_properties

## [0.8.6] - 2022-05-05

* v5: Account for property type byte in property length when encoding Subscribe packet

* v5: Add Router::finish() helper method, it converts router to service factory

* v3/v3: Clearify session type for Router

## [0.8.5] - 2022-04-20

* v3: Make topic generic type for MqttSink::publish() method

* v5: Correct receive max value for v5 connector when broker omits value #100

## [0.8.4] - 2022-03-14

* Add support in-flight messages size back-pressure

* Refactor handshake timeout handling

* Add serializer and deserializer derive (#89)

* Correct spelling of SubscribeAckReason::SharedSubsriptionNotSupported and DisconnectReasonCode::SharedSubsriptionNotSupported (#93)

* Removed PubAckReason::ReceiveMaximumExceeded as this error code is only valid for DISCONNECT packets (#95)

* Update subs.rs example to use confirm instead of subscribe (#97)

## [0.8.3] - 2022-01-10

* Cleanup v3/v5 client connectors

## [0.8.2] - 2022-01-04

* Optimize compilation times

## [0.8.1] - 2022-01-03

* Cleanup MqttError types

## [0.8.0] - 2021-12-30

* Upgrade to ntex 0.5.0

## [0.8.0-b.6] - 2021-12-30

* Update to ntex-io 0.1.0-b.10

## [0.8.0-b.5] - 2021-12-28

* Shutdown io stream after failed handshake

## [0.8.0-b.4] - 2021-12-27

* Use IoBoxed for all server interfaces

## [0.8.0-b.3] - 2021-12-27

* Upgrade to ntex 0.5 b4

## [0.8.0-b.2] - 2021-12-24

* Upgrade to ntex-service 0.3.0

## [0.8.0-b.1] - 2021-12-22

* Better handling for io::Error

* Upgrade to ntex 0.5.0-b.2

## [0.8.0-b.0] - 2021-12-21

* Upgrade to ntex 0.5

## [0.7.7] - 2021-12-17

* Wait for close control message and inner services on dispatcher shutdown #78

* Use default keepalive from Connect packet. #75

## [0.7.6] - 2021-12-02

* Add memory pools support

## [0.7.5] - 2021-11-04

* v5: Use variable length byte to encode the subscription ID #73

## [0.7.4] - 2021-10-29

* Expose some control plane type constructors

## [0.7.3] - 2021-10-20

* Do not poll service for readiness if it failed before

## [0.7.2] - 2021-10-01

* Serialize control message handling

## [0.7.1] - 2021-09-18

* Allow to extract error from control message

## [0.7.0] - 2021-09-17

* Update ntex to 0.4

## [0.7.0-b.10] - 2021-09-07

* v3: add ControlMessage::Error and ControlMessage::ProtocolError

## [0.7.0-b.9] - 2021-09-07

* v5: add helper methods to client control publish message

## [0.7.0-b.8] - 2021-08-28

* use new ntex's timer api

## [0.7.0-b.7] - 2021-08-16

* v3: Boxed Packet::Connect to trim down Packet size
* v5: Boxed Packet::Connect and Packet::ConnAck variants to trim down Packet size

## [0.7.0-b.6] - 2021-07-28

* v3/v5: Fixed nested with_queues calls in sink impl

## [0.7.0-b.5] - 2021-07-15

* v3/v5: PublishBuilder::send_at_least_once initiates publish synchronously

* v3/v5: Publish::take_payload() replaces payload with empty bytes, returns existing

## [0.7.0-b.4] - 2021-07-12

* v3: avoid nested borrow_mut() calls in sink on puback mismatch

## [0.7.0-b.3] - 2021-07-04

* Re-export ClientRouter, SubscribeBuilder, UnsubscribeBuilder

## [0.7.0-b.2] - 2021-06-30

* v3: Remove special treatment for "?" in publish's topic

## [0.7.0-b.1] - 2021-06-27

* Upgrade to ntex-0.4

## [0.6.9] - 2021-06-17

* Use `Handshake<Io>` instead of `codec::Connect` for selector

## [0.6.8] - 2021-06-17

* Add coonditional mqtt server selector

## [0.6.7] - 2021-05-17

* Process unhandled data on disconnect #51

* Fix for panic while parsing MQTT version #52

## [0.6.6] - 2021-04-29

* v5: Fix reason string encoding

* v5: Allow to set reason and properties to SUBACK

## [0.6.5] - 2021-04-03

* v5: Add a `packet()` function to `Subscribe` and `Unsubscribe`

* upgrade ntex, drop direct futures dependency

## [0.6.4] - 2021-03-15

* `HandshakeAck::buffer_params()` replaces individual methods for buffer sizes

## [0.6.2] - 2021-03-04

* Allow to override io buffer params

## [0.6.1] - 2021-02-25

* Cleanup dependencies

## [0.6.0] - 2021-02-24

* Upgrade to ntex v0.3

## [0.5.0] - 2021-02-21

* Upgrade to ntex v0.2

## [0.5.0-b.5] - 2021-01-25

* Upgrade to ntex v0.2-b.7

## [0.5.0-b.4] - 2021-01-23

* Use ntex v0.2-b.5 framed types

## [0.5.0-b.3] - 2021-01-21

* v5: Flush io stream before disconnect

## [0.5.0-b.2] - 2021-01-20

* v5: Restore `set_properties` sink method

## [0.5.0-b.1] - 2021-01-19

* Use ntex 0.2

## [0.4.7] - 2021-01-13

* v5: Add ping and disconnect support to default control service

## [0.4.6] - 2021-01-12

* Use pin-project-lite instead of pin-project

## [0.4.5] - 2021-01-12

* v5: Check publish service readiness error

* io: Fix potential BorrowMut error in io dispatcher

## [0.4.4] - 2021-01-09

* Fix public re-exports

## [0.4.3] - 2021-01-09

* Fix out of bounds panic

## [0.4.2] - 2021-01-05

* Better read back-pressure support

## [0.4.1] - 2021-01-04

* Use ashash instead on fxhash

* Drop unneeded InOrder service usage

## [0.4.0] - 2021-01-03

* Refactor io dispatcher

* Rename Connect/ConnectAck to Handshake/HandshakeAck

## [0.3.17] - 2020-11-04

* v5: Allow to configure ConnectAck::max_qos value

## [0.3.16] - 2020-10-28

* Do not print publish payload in debug fmt

* v5: Create topic handlers on firse use

## [0.3.15] - 2020-10-20

* v5: Handle "Request Problem Information" flag

## [0.3.14] - 2020-10-07

* v3: Fix borrow error in sink impl

## [0.3.13] - 2020-10-07

* Allow to set packet id for sink operations

## [0.3.12] - 2020-10-05

* v5: Add helper method Connect::fail_with()

* v5: Better name SubscribeIter::confirm()

## [0.3.11] - 2020-09-29

* v5: Fix borrow error in MqttSink::close_with_reason()

## [0.3.10] - 2020-09-22

* Add async fn `MqttSink::ready()` returns when there is available client credit.

## [0.3.9] - 2020-09-18

* `ControlMessage` (v3/v5) and referenced types have `#[derive(Debug)]` added

* Add `Deref` impl for `Session<_>`

* v5: Do not override `max_packet_size`, `receive_max` and `topic_alias_max`

## [0.3.8] - 2020-09-03

* Fix packet ordering

* Check default router service readiness

* v5: Fix in/out bound frame size checks in codec

## [0.3.7] - 2020-09-02

* v5: Add PublishBuilder::set_properties() helper method

* v3: Fix PublishBuilder methods

## [0.3.6] - 2020-09-02

* v5: Add Error::ack_with() helper method

## [0.3.5] - 2020-08-31

* v3: New client api

* v5: New client api

* v5: Send publish packet returns ack or publish error

## [0.3.4] - 2020-08-14

* v5: set `max_qos` to `AtLeastOnce` for server `ConnectAck` response

* v5: do not set `session_expiry_interval_secs` prop

## [0.3.3] - 2020-08-13

* v5: do not convert publish error to ack for QoS0 packets

## [0.3.2] - 2020-08-13

* v5: Handle packet id in use for publish, subscribe and unsubscribe packets

* v5: Handle 16 concurrent control service requests

* v3: Handle packet id in use for subscribe and unsubscribe packets

* v3: Handle 16 concurrent control service requests

* Removed ProtocolError::DuplicatedPacketId error

## [0.3.1] - 2020-08-12

* v5: Fix max inflight check

## [0.3.0] - 2020-08-12

* v5: Add topic aliases support

* v5: Forward publish errors to control service

* Move keep-alive timeout to Framed dispatcher

* Rename PublishBuilder::at_most_once/at_least_once into send_at_most_once/send_at_least_once

* Replace ConnectAck::properties with ConnectAck::with

## [0.2.1] - 2020-08-03

* Fix v5 decoding for properties going beyond properties boundary

## [0.2.0] - 2020-07-28

* Fix v5 server constraints

* Add v3::Connect::service_unavailable()

* Refactor Topics matching

## [0.2.0-beta.2] - 2020-07-22

* Add Publish::packet_mut() method

## [0.2.0-beta.1] - 2020-07-06

* Add mqtt v5 protocol support

* Refactor control packets handling

## [0.1.3] - 2020-05-26

* Check for duplicated in-flight packet ids

## [0.1.2] - 2020-04-20

* Update ntex

## [0.1.1] - 2020-04-07

* Add disconnect timeout

## [0.1.0] - 2020-04-01

* For to ntex namespace

## [0.2.3] - 2020-03-10

* Add server handshake timeout

## [0.2.2] - 2020-02-04

* Fix server keep-alive impl

## [0.2.1] - 2019-12-25

* Allow to specify multi-pattern for topics

## [0.2.0] - 2019-12-11

* Migrate to `std::future`

* Support publish with QoS 1

## [0.1.0] - 2019-09-25

* Initial release
