Skip to content

Releases

recado-v0.3.0

Choose a tag to compare

@mercurio-release-plz mercurio-release-plz released this 11 Nov 17:06
0b3c28f

Added

  • (server) [breaking] start brokers through Server::builder
  • (cli) log in with SCRAM-SHA-256 in recado and mercurioctl
  • (client) make subscriptions again after a reconnect without session
  • (cli) add --ws and --ws-path to the shared connect arguments
  • (client) trust the OS certificate store and take a rustls config
  • (client) [breaking] mark public structs and struct-like variants non_exhaustive
  • (cli) print shell completion scripts with a completions command
  • (cli) log in with a client certificate using --cert and --key
  • (recado) give pub the will options sub has
  • (recado) publish one message per line of standard input with pub -l
  • (recado) add sub -C/--count and -W/--timeout for scripts
  • (recado) take correlation data as hex with --correlation-data-hex
  • (recado) print messages as JSON lines with sub --format json
  • (cli) read the login password from a variable or a prompt in both tools

Fixed

  • (recado) report why the client gave up reconnecting
  • (recado) [breaking] refuse -c without -i for every protocol version
  • (recado) report arguments the client refuses as usage errors
  • (recado) make up a client id where MQTT 3 refuses an empty one
  • (recado) disconnect cleanly on SIGTERM in sub
  • (recado) publish and print binary payloads byte for byte
  • (recado) [breaking] refuse unknown --protocol-version values
  • (recado) [breaking] fail on refused subscriptions and lost connections
  • (recado) send log output to standard error
  • (client) [breaking] turn TLS on when a CA or client certificate is set

Other

  • share one lint configuration across the workspace
  • inherit shared package metadata from [workspace.package]
  • declare shared third-party dependencies once for the workspace
  • drop the unused tracing dependency from recado
  • move recado to base64 0.23
  • Merge branch 'master' into refactor/codec-api
  • describe SCRAM-SHA-256 logins
  • (core) [breaking] replace QoS and RetainHandling Invalid with TryFrom
  • (recado,mercurioctl) drop direct mercurio-core and bytes dependencies
  • (recado) give pub and sub their own modules and argument structs

mercuriod-v0.5.0

Choose a tag to compare

@mercurio-release-plz mercurio-release-plz released this 11 Nov 17:09
0b3c28f

Added

  • (server) [breaking] start brokers through Server::builder
  • (server) [breaking] hand a departed share member's messages to its group
  • (auth) [breaking] let a failed authentication tell the client why
  • (plugin) [breaking] name the mount point of an expired session in WIT 0.2
  • (server) disconnect clients that stay over their publish rate
  • (mercurioctl) name the mount point of a client
  • (server) [breaking] give each mount point its own client id space
  • (mercuriod) reload the HTTP auth certificate files
  • (server) limit publish rates per client and connection rates per listener
  • (server) [breaking] ban addresses that keep failing to log in
  • (server) per-listener limits and user names as client ids
  • (server) choose how shared subscriptions pick their member
  • (mercuriod) store SCRAM-SHA-256 keys with passwords and offer SCRAM
  • (server) [breaking] cap sessions and let mercuriod sessions expire after a week
  • (server) let a full queue drop its oldest messages instead
  • (plugin) [breaking] hand plugins their settings as a Config with get and require
  • (plugin) let WebAssembly plugins publish messages
  • (plugin) [breaking] move the WebAssembly plugin interface to 0.2
  • (http-auth) add a superuser endpoint
  • (http-auth) verify endpoints with a custom CA and a client certificate
  • (mercuriod) configure bridge sessions, remote state and counters
  • (mercuriod) [breaking] notify systemd of readiness and run as Type=notify
  • (mercuriod) import mosquitto's dynamic-security.json
  • (dynsec) add modifyClient, modifyGroup and modifyRole
  • (server) serve /healthz and Prometheus /metrics on WebSocket listeners
  • (dynsec) [breaking] check roles and groups in mosquitto's priority order
  • (server) [breaking] keep $SYS retained messages in memory
  • (server) choose how far client CRLs reach and what they must cover
  • (server) serve a caller-supplied rustls configuration
  • (server) accept clients without a certificate where it is optional
  • (server) [breaking] count messages the broker drops, by cause and per client
  • (server) [breaking] reload TLS certificates without a restart
  • (client) [breaking] let the connector open the stream asynchronously
  • (mercuriod) add --check and validate everything before binding
  • (mercuriod) give Unix socket listeners a mode and a group
  • (mercuriod) [breaking] make plugin_timeout and the tick interval configurable
  • (client) [breaking] take connect_timeout as a Duration
  • (mercuriod) back off exponentially between bridge connection attempts
  • (client) [breaking] add manual acknowledgement of received messages
  • (storage) [breaking] make the PostgreSQL pool size and wait configurable
  • (mercuriod) disconnect clients a dynamic security change concerns
  • (mercuriod) warn when HTTP auth sends passwords in clear
  • (mercuriod) bind a dynamic security client to its clientid

Fixed

  • (mercuriod) let plugin publishes wait for the broker to serve
  • (mercuriod) check bridges with --check and before binding
  • (storage) version the SQLite schema and keep one broker per database
  • (mercuriod) keep bridge acknowledgements across cancelled forwarding
  • (server) store a client whole again after a batch is given up
  • (server) [breaking] keep the queues of connected persistent sessions in storage
  • (storage) [breaking] store subscription changes one at a time
  • (server) [breaking] require proxy_from with proxy_protocol on TCP listeners
  • (server) [breaking] refuse unknown admin arguments and log who changes things
  • (server) [breaking] let enhanced authentication send final data on success
  • (mercuriod) refuse to take over an admin socket another process serves
  • (server) [breaking] require the mqtt subprotocol and add allowed_origins
  • (server) [breaking] decide $CONTROL publishes with a hook of their own
  • (mercuriod) never let a plugin's sockets listen
  • (mercuriod) cap a plugin copy's memory across all its memories
  • (mercuriod) count calls the broker cancels as plugin failures
  • (mercuriod) [breaking] refuse password file entries that are not hashes
  • (recado) report arguments the client refuses as usage errors
  • (mercuriod) [breaking] forward bridged QoS 1 and 2 messages at least once
  • (mercuriod) [breaking] refuse bridge settings that collide or can't work
  • (mercuriod) give dynsec-init's file to the owner of its directory
  • (storage) [breaking] require TLS for remote PostgreSQL and when a CA is set
  • (mercuriod) install config.toml readable by root and mercurio only
  • (mercuriod) raise the unit's file limit and tighten its sandbox
  • (mercuriod) reconnect to syslog after the daemon restarts
  • (mercuriod) keep a starting broker alive on SIGHUP
  • (mercuriod) [breaking] deny all access to user names dynsec has no client for
  • (server) [breaking] count connections per address before handshakes, IPv6 by /64
  • (mercuriod) make unknown dynsec users cost a password check
  • (mercuriod) bound HTTP auth requests and share identical ones
  • (mercuriod) [breaking] refuse role and group priorities dynsec does not apply
  • (server) [breaking] cap CONNECT at 64 KiB until the client is authenticated
  • (mercuriod) stop caching HTTP auth failures as denials
  • (mercuriod) flush the dynamic security file to disk before renaming it
  • (mercuriod) apply setDefaultACLAccess only when every entry is valid
  • (mercuriod) bring bridges back when this broker drops their connection
  • (mercuriod) name the file and table in configuration errors
  • (server) [breaking] check sent credentials even when auth is not required
  • (mercurio-server) bound socket writes and the client id takeover wait
  • (server) [breaking] cap unacknowledged messages per client with max_inflight
  • (mercuriod) keep other users when passwd cannot read the password file
  • check that a granted filter covers the filter a client subscribes to
  • (mercuriod) [breaking] refuse authentication settings while auth is disabled
  • (storage) open SQLite databases in WAL mode
  • (mercuriod) [breaking] refuse configuration keys the daemon does not know
  • (mercuriod) keep $CONTROL closed under a permissive dynsec default

Other

  • Merge branch 'build/rand-argon2'
  • Merge branch 'feat/mount-point-client-ids'
  • (mercuriod) bump argon2 to 0.6
  • (server) drop rand for getrandom and std's RandomState
  • Merge branch 'chore/workspace-manifests'
  • share one lint configuration across the workspace
  • inherit shared package metadata from [workspace.package]
  • declare shared third-party dependencies once for the workspace
  • move mercuriod to toml 1
  • Merge branch 'master' into refactor/codec-api
  • Merge branch 'fix/storage-read'
  • Merge branch 'feat/limits'
  • Merge branch 'feat/scram'
  • Merge branch 'feat/plugin-interface-0.2'
  • (server) format the limits work and satisfy clippy
  • describe SCRAM-SHA-256 logins
  • (mercuriod) keep the plugin panic log test from losing its log lines
  • (core) [breaking] replace QoS and RetainHandling Invalid with TryFrom
  • (mercuriod) allow for the refill while a publish flood test runs
  • (plugin) describe interface 0.2 and what changes for 0.1 plugins
  • (core) [breaking] give reason code 0x00 a single variant
  • (server) [breaking] report storage health under one $SYS prefix
  • Merge branch 'feat/client-features'
  • Merge branch 'feat/auth-backends'
  • Merge branch 'fix/durability'
  • Merge branch 'feat/observability'
  • (plugins) give every plugin crate its own workspace
  • Merge branch 'feat/tls-reload'
  • Merge branch 'feat/client-api'
  • Merge branch 'fix/auth-admin'
  • Merge branch 'fix/edge'
  • (mercuriod) name ureq as the client that sends URL user info
  • Merge branch 'fix/client-reconnect-bridge'
  • Merge branch 'fix/dynsec'
  • Merge branch 'fix/postgres'
  • Merge branch 'fix/httpauth-packaging'
  • Merge branch 'chore/ci-release-docs'
  • (mercuriod) describe HTTP auth failures, limits and https use
  • (mercuriod) correct the user_url client id and auto_id_prefix notes
  • (mercuriod) list the plugin keys in the sample config and README
  • Merge remote-tracking branch 'origin/master'
  • Merge branch 'fix/client-event-loop'
  • Merge branch 'fix/conn-loop-hardening'
  • Merge branch 'fix/daemon-config'
  • Merge branch 'fix/session-limits'
  • Merge branch 'fix/authorization'

mercurioctl-v0.2.0

Choose a tag to compare

@mercurio-release-plz mercurio-release-plz released this 11 Nov 17:09
0b3c28f

Added

  • (server) [breaking] start brokers through Server::builder
  • (admin) filter listClients by mount point
  • (mercurioctl) name the mount point of a client
  • (server) report the plugin interface a WASM plugin was built for
  • (mercuriod) configure bridge sessions, remote state and counters
  • (client) add a request/response helper and use it in mercurioctl
  • (dynsec) add modifyClient, modifyGroup and modifyRole
  • (dynsec) [breaking] check roles and groups in mosquitto's priority order
  • (cli) add --ws and --ws-path to the shared connect arguments
  • (server) [breaking] count messages the broker drops, by cause and per client
  • (client) trust the OS certificate store and take a rustls config
  • (client) [breaking] mark public structs and struct-like variants non_exhaustive
  • (mercurioctl) [breaking] print failures as JSON on standard error with --json
  • (mercurioctl) [breaking] confirm deleting retained messages by filter and sessions
  • (mercurioctl) read new client passwords from a file or standard input
  • (cli) print shell completion scripts with a completions command
  • (cli) log in with a client certificate using --cert and --key
  • (cli) read the login password from a variable or a prompt in both tools

Fixed

  • (mercurioctl) spot a refused admin socket by its error kind
  • (client) [breaking] turn TLS on when a CA or client certificate is set

Other

  • Merge branch 'feat/mount-point-client-ids'
  • share one lint configuration across the workspace
  • inherit shared package metadata from [workspace.package]
  • declare shared third-party dependencies once for the workspace
  • Merge branch 'feat/scram'
  • Merge branch 'feat/plugin-interface-0.2'
  • describe SCRAM-SHA-256 logins
  • Merge branch 'feat/client-features'
  • Merge branch 'feat/auth-backends'
  • Merge branch 'feat/observability'
  • (recado,mercurioctl) drop direct mercurio-core and bytes dependencies

mercurio-storage-v0.4.0

Choose a tag to compare

@mercurio-release-plz mercurio-release-plz released this 11 Nov 17:06
0b3c28f

Added

  • (server) [breaking] start brokers through Server::builder
  • (server) [breaking] hand a departed share member's messages to its group
  • (storage) [breaking] key stored client state by mount point and client id
  • (core) [breaking] make encoding fallible and refuse what peers must reject
  • (storage) [breaking] make the PostgreSQL pool size and wait configurable
  • (storage) [breaking] tell fenced and transient storage failures apart

Fixed

  • (storage) fail every undecodable stored value the same way
  • (storage) version the SQLite schema and keep one broker per database
  • (server) [breaking] keep the queues of connected persistent sessions in storage
  • (storage) [breaking] store subscription changes one at a time
  • (server) [breaking] keep incoming QoS 2 state and record it only once accepted
  • (storage) [breaking] keep RETAIN and the expiry deadline of in-flight messages
  • (storage) keep a PostgreSQL standby waiting and its schema hands off
  • (storage) [breaking] require TLS for remote PostgreSQL and when a CA is set
  • (storage) open SQLite databases in WAL mode
  • (storage) roll back the SQLite transaction when COMMIT fails

Other

  • Merge branch 'feat/mount-point-client-ids'
  • share one lint configuration across the workspace
  • inherit shared package metadata from [workspace.package]
  • declare shared third-party dependencies once for the workspace
  • depend on webpki-roots 1 in the client and storage
  • Merge branch 'master' into refactor/codec-api
  • (storage) [breaking] restore stored sessions in pages with one query per table
  • (storage) [breaking] look retained messages up by topic range, a page at a time
  • (core) [breaking] replace QoS and RetainHandling Invalid with TryFrom
  • (storage) [breaking] make apply the only write and share one conformance suite

mercurio-server-v0.6.0

Choose a tag to compare

@mercurio-release-plz mercurio-release-plz released this 11 Nov 17:07
0b3c28f

Added

  • (server) [breaking] start brokers through Server::builder
  • (server) add with_* setters to the configuration structs
  • (server) [breaking] type the TLS and listener configuration errors
  • (server) [breaking] hand a departed share member's messages to its group
  • (auth) [breaking] let a failed authentication tell the client why
  • (admin) filter listClients by mount point
  • (server) disconnect clients that stay over their publish rate
  • (server) [breaking] give each mount point its own client id space
  • (storage) [breaking] key stored client state by mount point and client id
  • (server) limit publish rates per client and connection rates per listener
  • (server) [breaking] ban addresses that keep failing to log in
  • (core) [breaking] make encoding fallible and refuse what peers must reject
  • (server) per-listener limits and user names as client ids
  • (server) choose how shared subscriptions pick their member
  • (server) [breaking] cap sessions and let mercuriod sessions expire after a week
  • (server) add a built-in SCRAM-SHA-256 enhanced auth mechanism
  • (server) let a full queue drop its oldest messages instead
  • (server) report the plugin interface a WASM plugin was built for
  • (server) [breaking] tell plugins which connection a client came in on
  • (server) serve /healthz and Prometheus /metrics on WebSocket listeners
  • (server) [breaking] keep $SYS retained messages in memory
  • (server) choose how far client CRLs reach and what they must cover
  • (server) serve a caller-supplied rustls configuration
  • (server) accept clients without a certificate where it is optional
  • (server) [breaking] count messages the broker drops, by cause and per client
  • (server) [breaking] reload TLS certificates without a restart
  • (storage) [breaking] tell fenced and transient storage failures apart

Fixed

  • (server) substitute ACL pattern identities in one pass
  • (server) [breaking] end every task of a stopped broker with Server::run
  • (server) read a waiting packet before expiring the keep-alive
  • (server) store MQTT 3.x sessions with their configured expiry
  • (server) keep only the CONNECT settings a session reads later
  • (server) store a starting session's own expiry when reconciling
  • (server) keep a restored will stored until it is published
  • (server) keep a delayed will due when a takeover is abandoned
  • (server) unsubscribe a removed session even if its removal is cancelled
  • (server) set aside stored sessions that can't be read at restore
  • (server) stop blaming the previous connection when admissions are full
  • (storage) version the SQLite schema and keep one broker per database
  • (server) store a client whole again after a batch is given up
  • (server) name the crypto provider for the client certificate verifier
  • (server) [breaking] keep the queues of connected persistent sessions in storage
  • (storage) [breaking] store subscription changes one at a time
  • (server) [breaking] keep incoming QoS 2 state and record it only once accepted
  • (storage) [breaking] keep RETAIN and the expiry deadline of in-flight messages
  • (server) [breaking] publish the will when a client disconnects with an error
  • (server) [breaking] compare built-in plaintext passwords in constant time
  • (server) refuse wildcard mount points and misplaced WebSocket settings
  • (server) hold WebSocket clients to the CONNECT size before auth
  • (server) [breaking] require proxy_from with proxy_protocol on TCP listeners
  • (server) [breaking] refuse unknown admin arguments and log who changes things
  • (server) [breaking] let enhanced authentication send final data on success
  • (server) [breaking] require the mqtt subprotocol and add allowed_origins
  • (server) [breaking] decide $CONTROL publishes with a hook of their own
  • (server) leave a session to expire when its takeover is abandoned
  • (server) log client-caused connection failures below error
  • (server) record a session's expiry before giving its client id back
  • (server) set TCP_NODELAY, keepalive and TCP_USER_TIMEOUT on accept
  • (server) let go of a claim and its admission when start is abandoned
  • (server) stream http_dir files under their own timeout and limit
  • (server) exempt in-process connections from max_connections
  • (server) give the client id back when a connection lease is dropped
  • (server) [breaking] close banned clients with Administrative Action
  • (server) check the client's packet size limit after topic aliasing
  • (server) hold resumed retransmissions to the client's new limits
  • (server) send every retained message to a new subscription in pages
  • (server) keep storage reads out of the session manager's lock
  • (server) free the client id when stacked takeovers all give up
  • (server) end connections still connecting when the server shuts down
  • (server) give the client id back when a session fails to start
  • (server) [breaking] count connections per address before handshakes, IPv6 by /64
  • (server) [breaking] end an expiry-0 session even when a takeover waits
  • (server) make room in a full queue by dropping expired messages
  • (server) [breaking] cap CONNECT at 64 KiB until the client is authenticated
  • (server) send shared subscription messages to members that can take them
  • (server) give up a queued login once its connect time is up
  • (mercurio-server) refuse banned addresses before any handshake
  • (server) cap the session expiry a DISCONNECT asks for
  • (server) [breaking] check sent credentials even when auth is not required
  • (mercurio-server) bound socket writes and the client id takeover wait
  • (server) free superseded will-delay and session-expiry timers at once
  • (server) [breaking] cap unacknowledged messages per client with max_inflight
  • (server) [breaking] refuse a client id that belongs to another owner's session
  • check that a granted filter covers the filter a client subscribes to

Other

  • Merge branch 'refactor/server-structure'
  • (server) replace SessionManagerDropGuard with a constructor
  • (server) move the session manager's tests to their own file
  • (server) move address limits and publish pacing out of server/
  • (server) move the broker's configuration types to server/config.rs
  • (server) have acknowledgements hand back their storage writes
  • (server) give a session's in-flight messages their own type
  • (server) move subscription handling to session/subscriptions.rs
  • (server) move outbound delivery to session/outbound.rs
  • (server) move inbound publish handling to session/inbound.rs
  • (server) move retained delivery to session/retained.rs
  • (server) move session presence to session/presence.rs
  • (server) move the session's will handling to session/will.rs
  • (server) move the session tests out of session.rs
  • (server) drop unreachable ack persistence and restore stray docs
  • (server) [breaking] give the broker its own error type
  • Merge branch 'build/rand-argon2'
  • Merge branch 'feat/mount-point-client-ids'
  • (server) wait for a crashed broker to let go of its database
  • (server) drop rand for getrandom and std's RandomState
  • Merge branch 'chore/workspace-manifests'
  • share one lint configuration across the workspace
  • inherit shared package metadata from [workspace.package]
  • declare shared third-party dependencies once for the workspace
  • ask tokio only for the features mercurio-server uses
  • (mercurio-server) drop the keep-alive from the write timeout test
  • move mercurio-client and mercurio-server to thiserror 2
  • Merge branch 'master' into refactor/codec-api
  • Merge branch 'fix/storage-read'
  • Merge branch 'feat/limits'
  • Merge branch 'feat/scram'
  • Merge branch 'feat/plugin-interface-0.2'
  • (server) format the limits work and satisfy clippy
  • (core) [breaking] check Variable Byte Integer and identifier ranges
  • (storage) [breaking] restore stored sessions in pages with one query per table
  • (storage) [breaking] look retained messages up by topic range, a page at a time
  • (packets) [breaking] pass the protocol version to every encode and decode
  • (packets) [breaking] derive CONNECT flags from the payload
  • (core) [breaking] replace QoS and RetainHandling Invalid with TryFrom
  • (core) [breaking] rename Error::MQTTReasonCode to Error::Reason
  • (storage) [breaking] make apply the only write and share one conformance suite
  • (core) [breaking] give reason code 0x00 a single variant
  • (server) [breaking] report storage health under one $SYS prefix
  • Merge branch 'fix/durability'
  • (server) let the drop counter test's plugin grant admin commands
  • Merge branch 'feat/observability'
  • (server) let a writer held by a journal wait without polling
  • Merge branch 'feat/tls-reload'
  • (server) add a test PKI for TLS integration tests
  • Merge branch 'fix/auth-admin'
  • Merge branch 'fix/edge'
  • Merge branch 'fix/session-manager-cancellation'
  • Merge branch 'fix/delivery'
  • Merge branch 'fix/session-manager'
  • Merge branch 'fix/postgres'
  • Merge branch 'fix/conn-loop-hardening'
  • Merge branch 'fix/session-limits'
  • Merge branch 'fix/authorization'

mercurio-plugin-v0.3.0

Choose a tag to compare

@mercurio-release-plz mercurio-release-plz released this 11 Nov 17:07
0b3c28f

Added

  • (auth) [breaking] let a failed authentication tell the client why
  • (plugin) [breaking] name the mount point of an expired session in WIT 0.2
  • (plugin) [breaking] hand plugins their settings as a Config with get and require
  • (plugin) [breaking] move the WebAssembly plugin interface to 0.2

Fixed

  • (server) [breaking] decide $CONTROL publishes with a hook of their own

Other

  • Merge branch 'chore/workspace-manifests'
  • share one lint configuration across the workspace
  • inherit shared package metadata from [workspace.package]
  • (plugin) say which SDK releases speak which interface
  • (plugin) describe interface 0.2 and what changes for 0.1 plugins

mercurio-packets-v0.3.0

Choose a tag to compare

@mercurio-release-plz mercurio-release-plz released this 11 Nov 17:05
0b3c28f

Added

  • (core) [breaking] make encoding fallible and refuse what peers must reject
  • (packets) derive Clone on every packet and add packet_type()

Fixed

  • (packets) accept DUP on PUBREL, SUBSCRIBE and UNSUBSCRIBE in MQTT 3.1
  • (packets) [breaking] refuse reason codes their packet type does not list
  • (packets) [breaking] refuse an MQTT 3.x SUBACK without return codes
  • (packets) [breaking] refuse packet identifier 0 in every packet that carries one
  • (packets) [breaking] refuse Authentication Data without Authentication Method
  • (core) [breaking] require every Encoder to compute its encoded size
  • (packets) [breaking] make the per-packet decoders safe to call on any input

Other

  • Merge branch 'chore/workspace-manifests'
  • (packets) copy payloads and binary data as slices when encoding
  • share one lint configuration across the workspace
  • inherit shared package metadata from [workspace.package]
  • declare shared third-party dependencies once for the workspace
  • (packets) [breaking] keep property decoding helpers private
  • (core) [breaking] check Variable Byte Integer and identifier ranges
  • (packets) [breaking] pass the protocol version to every encode and decode
  • (packets) [breaking] derive CONNECT flags from the payload
  • (core) [breaking] replace QoS and RetainHandling Invalid with TryFrom
  • (core) [breaking] rename Error::MQTTReasonCode to Error::Reason
  • (core) [breaking] give reason code 0x00 a single variant
  • (packets) decode every property list through one helper
  • build the core and packets tests without std

mercurio-core-v0.3.0

Choose a tag to compare

@mercurio-release-plz mercurio-release-plz released this 11 Nov 17:05
0b3c28f

Added

  • (server) [breaking] hand a departed share member's messages to its group
  • (core) [breaking] make encoding fallible and refuse what peers must reject
  • (packets) derive Clone on every packet and add packet_type()

Fixed

  • (packets) [breaking] refuse reason codes their packet type does not list
  • (packets) [breaking] refuse Authentication Data without Authentication Method
  • (core) [breaking] refuse Variable Byte Integers longer than their value needs
  • (core) [breaking] require every Encoder to compute its encoded size
  • check that a granted filter covers the filter a client subscribes to

Other

  • (server) [breaking] give the broker its own error type
  • Merge branch 'chore/workspace-manifests'
  • (packets) copy payloads and binary data as slices when encoding
  • share one lint configuration across the workspace
  • inherit shared package metadata from [workspace.package]
  • declare shared third-party dependencies once for the workspace
  • (packets) [breaking] keep property decoding helpers private
  • (core) [breaking] check Variable Byte Integer and identifier ranges
  • (core) [breaking] replace QoS and RetainHandling Invalid with TryFrom
  • (core) [breaking] rename Error::MQTTReasonCode to Error::Reason
  • (core) [breaking] give reason code 0x00 a single variant
  • (packets) decode every property list through one helper
  • build the core and packets tests without std

mercurio-client-v0.5.0

Choose a tag to compare

@mercurio-release-plz mercurio-release-plz released this 11 Nov 17:06
0b3c28f

Added

  • (server) [breaking] start brokers through Server::builder
  • (auth) [breaking] let a failed authentication tell the client why
  • (core) [breaking] make encoding fallible and refuse what peers must reject
  • (cli) log in with SCRAM-SHA-256 in recado and mercurioctl
  • (client) add a SCRAM-SHA-256 authenticator
  • (client) add a request/response helper and use it in mercurioctl
  • (client) follow Server References with a hop limit
  • (client) make subscriptions again after a reconnect without session
  • (client) send repeated topics as outbound topic aliases
  • (cli) add --ws and --ws-path to the shared connect arguments
  • (client) send DISCONNECT with a reason and session expiry
  • (client) [breaking] expose the client id and what CONNACK settled
  • (client) add a WebSocket transport behind a websocket feature
  • (client) [breaking] let the connector open the stream asynchronously
  • (client) trust the OS certificate store and take a rustls config
  • (client) put TLS behind a default-on tls feature
  • (client) [breaking] mark public structs and struct-like variants non_exhaustive
  • (client) re-export the foreign types its public API uses
  • (client) [breaking] keep error sources and tell transient errors apart
  • (client) [breaking] take connect_timeout as a Duration
  • (client) start publishes without waiting for the previous one
  • (client) [breaking] add manual acknowledgement of received messages
  • (client) [breaking] back off exponentially with jitter between reconnections
  • (client) end with a Stopped event when reconnecting gives up
  • (cli) log in with a client certificate using --cert and --key
  • (cli) read the login password from a variable or a prompt in both tools

Fixed

  • (mercuriod) check bridges with --check and before binding
  • (server) name the crypto provider for the client certificate verifier
  • (server) [breaking] let enhanced authentication send final data on success
  • (server) set TCP_NODELAY, keepalive and TCP_USER_TIMEOUT on accept
  • (client) [breaking] cap inbound packets at 1 MiB and refuse them from the header
  • (client) [breaking] validate topics, filters and subscription ids before sending
  • (client) refuse a CONNACK with Session Present after a clean start
  • (client) check Maximum QoS and Retain Available for queued publishes
  • (client) fail a resent publish the broker's new size limit refuses
  • (client) keep reconnecting through transient CONNACK refusals
  • (client) [breaking] bound every socket write and treat a stalled one as lost
  • (recado) make up a client id where MQTT 3 refuses an empty one
  • (client) do not time out the broker for a stall of the client itself
  • (client) fail a pending re-authentication when the connection drops
  • (client) [breaking] turn TLS on when a CA or client certificate is set
  • (client) keep the event loop running while the event queue is full
  • (client) disconnect when the last client handle is dropped

Other

  • Merge branch 'chore/workspace-manifests'
  • share one lint configuration across the workspace
  • inherit shared package metadata from [workspace.package]
  • declare shared third-party dependencies once for the workspace
  • depend on webpki-roots 1 in the client and storage
  • move mercurio-client and mercurio-server to thiserror 2
  • Merge branch 'master' into refactor/codec-api
  • (core) [breaking] check Variable Byte Integer and identifier ranges
  • (packets) [breaking] pass the protocol version to every encode and decode
  • (packets) [breaking] derive CONNECT flags from the payload
  • (core) [breaking] replace QoS and RetainHandling Invalid with TryFrom
  • (core) [breaking] give reason code 0x00 a single variant
  • Merge branch 'feat/client-features'
  • Merge branch 'feat/client-api'
  • Merge branch 'fix/auth-admin'
  • (client) drop the unused tokio-util dependency
  • Merge branch 'fix/client-reconnect-bridge'
  • (client) list backoff and manual acknowledgement among the features
  • (client) format the tests added for the reconnect and limit fixes

recado-v0.2.4

Choose a tag to compare

@mercurio-release-plz mercurio-release-plz released this 10 Nov 21:19
0aaafd5

Added

  • (recado) connect through Unix sockets with --unix

Other

  • point the READMEs at mercurioctl and the admin guide