Releases: bytebeamio/rumqtt
rumqttc-0.24.0
What's New?
- π§Ύ Expose
EventLoop::clean
to allow triggering shutdown and subsequent storage of pending requests by @de-sh in #741
You can now shutdown the Eventloop
and drain Request
s, which weren't received from the channel and keep them in pending while doing cleanup to prevent any data loss. Example usage in bytebeamio/uplink.
- π Support for all TLS key formats currently supported by Rustls:
PKCS#1
,PKCS#8
,RFC5915
and new TLS Error variants:NoValidClientCertInChain
,NoValidKeyInChain
by @ijager in #752 and #752
With this, we now practically support all RSA and ECC keys in DER/SEC1 encoding.
-
A websocket request modifier for v4 client by @swanandx in #772
-
Surfaced
AsyncClient
'sfrom_senders
method to theClient
asfrom_sender
by @BKDaugherty in #779
Changes
- π Allow empty Client ID by @arunanshub in #791
MqttOptions::new
now accepts empty client_id
and MqttOptions::set_clean_session
panics if client_id
is empty and clean_session
flag is set to false
.
-
Synchronous client methods take
&self
instead of&mut self
by @BKDaugherty in #646
Users do not need to specify the TLS key variant in the TlsConfiguration
anymore, this is inferred automatically. To update your code simply remove Key::ECC()
or Key::RSA()
from the initialization.
With this, the der
& password
fields are replaced by client_auth
.
-
Make v5
RetainForwardRule
public, in order to allow setting it when constructingFilter
values by @brianmay in #767 -
Use
VecDeque
instead ofIntoIter
to fix unintentional drop of pending requests onEventLoop::clean
by @de-sh in #780 -
Fix typo -
StateError::IncommingPacketTooLarge
=>StateError::IncomingPacketTooLarge
by @swanandx in #786
Update tokio-rustls
to 0.25.0
, rustls-native-certs
to 0.7.0
, rustls-webpki
to 0.102.1
, rusttls-pemfile
to 2.0.0
, async-tungstenite
to 0.24.0
, ws_stream_tungstenite
to 0.12.0
and http
to 1.0.0
. This is a breaking change as types from some of these crates are part of the public API in
Fixes
- Lowered the MSRV to 1.64.0 by @RoastVeg in #762
- Request modifier function should be Send and Sync and removed unnecessary Box by @swanandx in #770
New Contributors π
- @BKDaugherty made their first contribution in #646
- @RoastVeg made their first contribution in #762
- @ijager made their first contribution in #752
Full Changelog: rumqttd-0.19.0...rumqttc-0.24.0
rumqttd-0.19.0
What's New?
- π Extensible external authentication by @nathansizemore in #761
You can hook custom function for authentication using client id, username and password. This custom function can be extended as per need, for e.g. fetching credentials from DB, using tokens or spawning processes, etc. see example for setup.
- π Add support for ECC keys when configuring TLS in rumqttd by @AlexandreCassagne in #743
Previously only RSA keys were accepted, but now you can specify any TLS key formats currently supported by rustls, like ECC, PKCS8 to name a few.
Changes
Configuration related
user can specify v4 and/or v5 config. Specifying [v4.x]
in rumqttd.toml
is no longer mandatory, those who wish to only use v5 can now only include [v5.x]
in config.
specifying [console]
in rumqttd.toml
is now optional and can be safely removed if you don't wish to use console.
- CA certificate is optional if client auth is disabled
capath
in tls
config is only required is client authentication will be used ( see "verify-client-cert" feature below to know more ). Warning will be logged if the feature is disabled and capath
is being ignored.
Feature related
rumqttd will log a warning if [ws.x]
is specified in config but getting ignored due to websocket
feature is disabled.
-
"websockets" feature is removed in favour of "websocket"
-
client auth is featured gated behind "verify-client-cert" by @de-sh in #756
mutual TLS ( mTLS ) or client authentication, which is done verifying by certificates provided client is now optional with use-rustls
. capath
specifying CA certificate must be present in config file if client auth is enabled.
To enable client auth, you need to enable verify-client-cert
features ( disabled by default to match behavior of use-native-tls
)
Others
- Console endpoint
/config
prints Router Config instead of returning console settings by @swanandx in #727 - Update tungstenite and dependencies to fix CVE by @swanandx in #730
Maintainance
-
build(deps): bump webpki from 0.22.1 to 0.22.2 by @dependabot in #720
-
build(deps): bump rustix from 0.38.17 to 0.38.19 by @dependabot in #735
-
update tungstenite and other dependencies by @swanandx in #730
-
build(deps): bump openssl from 0.10.57 to 0.10.60 by @dependabot in #759
-
feat: install cross from git and cleanup by @swanandx in #716
-
chore: move rust-version from workspace to respective crates by @swanandx in #763
-
fix rust-cache with proper key and global RUSTFLAG by @swanandx in #764
New Contributors π
- @AlexandreCassagne made their first contribution in #743
- @nathansizemore made their first contribution in #761
Full Changelog: rumqttd-0.18.0...rumqttd-0.19.0
rumqttc 0.23.0
Added
- Added
bind_device
toNetworkOptions
to enableTCPSocket.bind_device()
- Added
MqttOptions::set_request_modifier
for setting a handler for modifying a websocket request before sending it.
Fixed
- Allow keep alive values <= 5 seconds (#643)
- Verify "mqtt" is present in websocket subprotocol header.
Security
- Remove dependency on webpki. CVE
- Removed dependency vulnerability, see rustsec. Update of
tungstenite
dependency.
Other Changes
- Replace heavy futures dep by @mattfbacon in #645
- Allow modifying websocket requests. by @reitermarkus in #642
- docs: remove invalid docs disclaimer by @carlocorradini in #657
- Disable unsused features from
flume
dependency by @domenicquirl in #653 - build(deps): Bump dependencies to latest by @Dirreke in #666
- rumqttc: Add bind_device to NetworkOptions to enable TCPSocket.bind_device() by @seimonw in #654
- fix(Event Loop): Allow keep-alives <= 5 secs by @danieldougherty in #655
- feat(rumqttc): Replace multi line debug log with single line by @flxo in #688
- build(deps): bump rustls-webpki from 0.101.1 to 0.101.4 by @dependabot in #687
- build(deps): update dependencies by @swanandx in #690
- use patched
ws_stream_tungstenite
to removewebpki
by @swanandx in #704 - chore: cargo update and replace deprecated functions by @swanandx in #710
- Call the bind_device function only if the bind_device network option β¦ by @frank-hivewatch in #713
- fix: validate subprotocol mqtt by @Vilayat-Ali in #724
- fix: clippy lints by @swanandx in #725
- Validate "mqtt" exists in comma delimited subprotocol header by @swanandx in #726
- revert #726: only expect "mqtt" in response header by @de-sh in #729
- update tungstenite dependencies for security purpose by @Arend-Jan in #728
New Contributors π
- @mattfbacon made their first contribution in #645
- @reitermarkus made their first contribution in #642
- @domenicquirl made their first contribution in #653
- @Dirreke made their first contribution in #666
- @seimonw made their first contribution in #654
- @danieldougherty made their first contribution in #655
- @frank-hivewatch made their first contribution in #713
- @Vilayat-Ali made their first contribution in #724
- @Arend-Jan made their first contribution in #728
rumqttd 0.18.0
What's Changed
This release fixes retained and will messages and adds support for will delay interval in MQTTv5. Rumqttd now have an enhanced release profile in Cargo.toml
which would improve performance while reducing the binary size! Here are some of the other changes:
β‘ Added
π¨ Changed
- Non-consuming builder pattern for constructing Connection by @swanandx in #708
- Removed Link and its implementation which were deprecated by @swanandx in #684
π οΈ Fixed
- Will messages by @swanandx in #686
- Retained Messages by @swanandx in #683
- Publish properties in qos2 publishes by @swanandx in #702
π Security
- Remove dependency on webpki to fix CVE
π§ Maintenance changes
- enhance cargo workspace and release build by @carlocorradini in #680
- configure cross to support x86_64 and aarch64 for linux/musl by @carlocorradini in #674
- etc.
Full Changelog: rumqttd-0.17.0...rumqttd-0.18.0
rumqttd-0.17.0
Whats New? π€―
- π Subscription IDs support in broker by @swanandx in #632
- π₯ Shared subscriptions with configurable strategy by @Nickztar in #668
We can configure strategy for shared subscriptions using rumqttd.toml
The available strategies are as follows:
round_robin
(Default): select clients in turns as per the order of their subscription.
random
: randomly choose a client and sent it. ( note: once a client is chosen, we try to send as many msg as we can )
sticky
: stick to a subscriber and keep sending it all the messages until its gone.
Maintenance changes π§
- build(deps): Bump dependencies to latest by @Dirreke in #666
- chore(github): removed stale by @carlocorradini in #675
- chore(mqttverifier): fix typo and better structure with jsdoc type by @carlocorradini in #679
- docs: add AUR package in README.md by @neruyzo in #681
New Contributors π
Full Changelog: rumqttd-0.16.0...rumqttd-0.17.0
rumqttd 0.16.0
Blog Post discussing this release - https://bytebeam.io/blog/qos2-and-websockets-support-rumqttd/
Significant Changes
Changed
- Ability to configure segment size individually (#602)
- LinkBuilder for constructing LinkRx/LinkTx (#659)
Deprecated
- Link and its implementation, use LinkBuilder instead
Fixed
- Include reason code for UnsubAck in v5
New Contributors π
- @Nickztar made their first contribution in #633
- @anirudhRowjee made their first contribution in #635
rumqttc 0.22.0
Added
- Added
outgoing_inflight_upper_limit
to MQTT5MqttOptions
. This sets the upper bound for the number of outgoing publish messages (#615) - Added support for HTTP(s) proxy (#608)
- Added
proxy
feature gate - Refactored
eventloop::network_connect
to allow setting proxy - Added proxy options to
MqttOptions
- Added
- Update
rustls
to0.21
andtokio-rustls
to0.24
(#606)- Adds support for TLS certificates containing IP addresses
- Adds support for RFC8446 C.4 client tracking prevention
Changed
MqttState::new
takesmax_outgoing_packet_size
which was set inMqttOptions
but not used (#622)
rumqttd 0.15.0
rumqttc 0.21.0
Significant Changes
- Added support for MQTT5 features to v5 client
- MQTT5: Remove
Box
onEvent::Incoming