Skip to content

1.6.0

Latest

Choose a tag to compare

@github-actions github-actions released this 29 Oct 06:01
bb8a5ac
  • 🚨 Security advisory: an unauthenticated peer could make a TCP or TLS server unavailable. Affects 0.9.0 through 1.5.0. See GHSA-x8fh-359r-wgxm, #213 and #214.
  • πŸ›‘οΈ Hardened against panics. Lints deny common sources of panics, and CI proves that parsing, answering requests and formatting replies can't panic for any input.
  • πŸ”” License update. The license now prohibits using the library to build or test other implementations of the protocol, including by mining it with AI tools or using it as an oracle, and reserves AI training. See #224.
  • πŸ”” MinTlsVersion is a minimum. V1_2 now allows TLS 1.3, and V1_3 no longer allows TLS 1.2. See #212.
  • πŸ”” A request's timeout covers sending it; one that can't be sent in time fails with Io(TimedOut) and the connection is reopened. See #215.
  • πŸ”” A read whose range is empty or runs past address 0xFFFF fails with InvalidRange before anything is sent. See #235.
  • πŸ”” Out-of-range settings, such as a zero timeout or queue size or reversed retry bounds, are adjusted to valid values. See #236, #241 and #302.
  • πŸ”” Servers ignore requests for units they don't serve and validate requests as the standard requires. See #274, #277, #280 and #284.
  • πŸ”” RTU readers resynchronize after a bad frame instead of reopening the port, and frames are separated by the required silence. See #269, #297 and #345.
  • πŸ”” Ordinary traffic no longer logs warnings; received frames log under rodbus::common::frame. See #242, #243 and #346.
  • πŸ›‘οΈ TLS client handshakes time out after 5 seconds, and a request's write is bounded by its timeout. See #215.
  • πŸ›‘οΈ Bindings: a TLS server without an authorization handler applies its address filter, and roles containing NUL are refused. See #220 and #221.
  • πŸ›‘οΈ Each file attached to a GitHub release has a build provenance attestation that gh attestation verify checks, and the jars on Maven Central are signed with a new key, DFD7 6A43 C349 DBF5 46AB 9033 C6FB 909E 94CB 1619. See #384.
  • ⭐ Channel::shutdown() and ServerHandle::shutdown() end a task while handles are still alive. See #198.
  • ⭐ Non-spawning create_*_server_task() functions return a ServerTask for the caller to spawn. See #188.
  • ⭐ Configuration and task types implement Debug, without key material. See #240.
  • ⭐ Prebuilt C/C++ bindings for 32-bit x86 Linux (i686-unknown-linux-gnu). See #370.
  • πŸ› The client ignores responses from a unit it didn't address. See #223.
  • πŸ› IPv4 address filters match IPv4-mapped peers on dual-stack servers. See #260.
  • πŸ› Bindings: a single coil write returns the WriteHandler's exception instead of always ILLEGAL_DATA_ADDRESS. See #364.
  • πŸ› Other fixes. See #218, #222 and #247.
  • πŸ”§ Channel request methods take &self. See #191.
  • πŸ”§ The prebuilt C/C++ and .NET library is about 25% smaller. See #298 and #319.
  • πŸ”§ The prebuilt bindings use AWS-LC for TLS on every platform, which adds post-quantum key exchange to the musl and 32-bit ARM libraries. See #359.
  • πŸ“– The guide is reorganized and corrected, with the same examples in every language. See #362 and #366.