All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added Verification Tag validation on incoming packets as per RFC 9260 Section 8.5.
- Validate incoming DATA/IDATA/FORWARD-TSN/I-FORWARD-TSN chunk types match negotiated message interleaving capability.
- Validate incoming FORWARD-TSN/I-FORWARD-TSN to match negotiated partial reliability capability.
- Added prevention of state cookie forging and capability bypass.
- Account payload size of the deferred forward TSN messages.
- Refactored ReassemblyQueue byte tracking into smaller parts, fixing integer underflows and double-counting bugs.
- Discard FORWARD-TSN with invalid TSN.
- Stop heartbeat timeout only after validating nonce in HEARTBEAT-ACK.
- Dropping/truncating oversized Unrecognized or HEARTBEAT chunks.
- Avoid panic on unordered interleaved streams when receiving crafted MIDs.
- Refactored RFC1982 serial number types.
- Explicitly flush buffered packets in the send queue upon receiving a COOKIE-ACK chunk.
- Align sender and receiver to signal advertised receiver window size as payload bytes, excluding any headers.
- Support receiving invalid SACKs causing serial number arithmetic wrapping.
- Possible incorrect RTT calculation on packet loss.
- Possible debug assertion when acknowledging fast retransmit chunks.
- Support receiving invalid and old/crafted SACKs.
- Fixed shutdown timer and duplicate SHUTDOWN handling in SHUTDOWN-ACK-SENT.
- Relaxed sequence number handling for stream reset requests.
- Corrected outgoing requests to be compliant with RFC6525.
- Optimized performance of message reassembly.
- Corrected "Fast Recovery" retransmission logic.
- Corrected outstanding data calculation.
- Added OnLifecycleMessageFullySent lifecycle events when sending message.
- Fixed bug where delayed SACKs would be sent immediately when time advances.
- Replaced
rngcrate dependency with more lightweightfastrand. - Removed dependency on
crc_anycrate. - The
rwndmember in handover state has been renamed toa_rwnd.
- Fixed a wrapping substraction during zero window probing.
- Improved chunk validation
- Fixed a socket handover bug.
- Fixed a bug with simultaneous connection attempts.
DcSctpSocket::send_many()is now implemented and accessible with CXX.- Exposed handover methods and structs in the CXX interface.
- Added
dcsctp_cxx::get_metrics()anddcsctp_cxx::reset_streams()to the CXX interface, making it expose the fullDcSctpSockettrait.
- The code is now compatible with Rust 2024 edition.
- Updated CXX interface for
dcsctp_cxx::send()to avoid copying the message payload. - Handover is now code complete, compatible with the C++ implementation.
- Most of the API methods are exposed in CXX.
- The cxx child crate is now part of the parent crate, as an optional feature.
- Time handling is revised, to use a custom SocketTime instead of Instant.
- Added CXX FFI for time handling.
- Added cxx child crate for C++ interoperability.
- Exposed Socket in the public API.
- A pull-based API for receiving messages, which allows for back-pressure to be applied when the application can't consume messages fast enough.
First release.