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.
- Buffer undecryptable Handshake and OneRtt packets during the handshake phase
- Update some comments about stream
- Fix the closure of the stream that was reset by the peer
- Fix the suboptimal performance in multipath transmission caused by pacing
v1.0.0 - 2024-08-01
- Support building on Windows
- Optimize the initial RTT of the newly validated path
- Add API for deferring idle timeout
- Rename PathStats to quic_path_stats_t in FFI
- Change prototype of quic_set_logger in FFI
v0.15.0 - 2024-07-18
- Support building for the
aarch64-apple-ios-sim
target - Support customized connection id generators
- Add
quic_packet_header_info()
to extract cid-related info from quic packets - Add
quic_conn_path_stats
to get path level stats - Add configuration for pacing granularity
- Tweak packet number encoding
- Replace the hashlru crate with the lru crate
v0.14.0 - 2024-07-11
- Update config API for congestion control
- Update cbindgen.toml and the generated header file
- Tweak comments for application protos in FFI
- Rename enum members of
quic_multipath_algorithm
intquic.h
- Fix stream operations that should mark conn as tickable
- Fix the issue with sending MAX_DATA frames
- Fix the issue with pacer timer that occasionally leads to a connection timeout error
v0.13.0 - 2024-06-25
- Add pacing to smooth the flow of packets sent onto the network
- Add more C APIs for the quic connection
- Tweak maximum MTU for paths using IPv4-mapped IPv6 addresses
- Remove useless sfv flag in ffi
- Update
stream_bidi_new
/stream_uni_new
to work likestream_new
v0.12.0 - 2024-05-27
- Buffer disordered zero rtt packets on the server endpoint
- Add dummy congestion controller for testing and expriments
- Tweak configurations and initialization of flow control
- Improve comments of bbr congestion control algorithm
- Add workflow and plot tools for benchmarking
- tquic_tools: add the
version
option
- Fix dropping datagrams from unknown connections on the client endpoint
- Fix handling restart from idle for bbr/bbr3 algorithms
- tquic_tools: resolve minor issues
v0.11.0 - 2024-05-08
- tquic_tools: group different options by category and prioritize commonly used options
- Add the header file of BoringSSL library in tquic.h
- Resolve new issues found by cargo clippy
- Add integration testing for multipath
- Update run_endpoint.sh to enable keyupdate/chacha20 testcase for server
- tquic_tools: rename
max_requests_per_thread
tototal_requests_per_thread
- Fix RangeSet::filter() used by Redundant multipath scheduler
- Fix injected stream frames for Redundant multipath scheduler
v0.10.0 - 2024-04-26
- Add support for responding to key updates
- Add datagram packetization layer PMTU discovery
- Improve API for stream creation
- Limit configuration value of type varint
- Add pacing_rate to PathStats
- tquic_server: output stats when server connection is closed
- Add workflow and plot tools for fct testing
- Fix the issue where bbr3 cannot exit slow start due to high packet loss rate
- Limit memory consuption for tracking closed stream ids
v0.9.0 - 2024-04-10
- Improve FFI for quic_tls_config_t
- Update the handling of probe timeout to conform with RFC 9002
- Update limit of the output buffer for Connection::send()
- Add plot tools for goodput and interop testing
- Change
quic_config_set_tls_config()
in FFI - Change
quic_tls_config_select_methods_t
in FFI
- Fix NewToken frame in qlog
- Fix the unit test case
conn_write_qlog
that fails with low probability
- limit the number of queued RETIRE_CONNECTION_ID frames
v0.8.1 - 2024-03-18
- Remove the sfv feature flag from h3 (to resolve a build issue at docs.rs)
v0.8.0 - 2024-03-15
- Support anti-amplification limit for server
- Support customized config when initiating a connection
- Add callback based FFI for writing the keylog and qlog
- Support compiling dynamic library for C language
- Update the processing of LossDetection timeout in multipath mode
- Update crate docs about PathStats/TlsConfig/TlsConfigSelector
- Discard old Path Challenges received if needed
v0.7.0 - 2024-02-02
- Add support for building on FreeBSD
- Add more path level metrics
- Add more quic and recovery events in qlog
- Add tquic_qvis.sh to convert qlog files to be compatible with qvis
- Update MultipathScheduler interface for some advanced schedulers
- Add tquic_tools_test.sh for additional end-to-end testing
- tquic_client: support early data
- tquic_tools: use millisecond precision for log timestamp
- tquic_tools: add
log-file
option to write logs to specified file - tquic_tools: add
active-cid-limit
option to allow more paths
- tquic_tools: change the
qlog-log
option to theqlog-dir
option - tquic_tools: change the
dump-path
option to thedump-dir
option - tquic_tools: update default pto linear factor
- tquic_client: change the
local_addresses
option to allow the os to choose available ports - tquic_client: use
local_addresses
option to specify the addresses to bind in both singlepath and multipath mode.
- Fix record separator of qlog in json-seq format
v0.6.0 - 2024-01-17
- Support the latest version of qlog (v0.4)
- Add
cid_len
option to tquic tools - Ignore undecrypted packets with invalid format
- Move website dir to tquic-group/tquic-website repo
- Fix the selected MTU for the sending path
- Fix anti-deadlock PTO during handshake
- Fix the assertion of negotiated parameters in TLS unit tests
v0.5.0 - 2024-01-03
- Add support for building on MacOS
- Add support for stateless reset
- Release tls_conf_selector as soon as the handshake is completed.
- Add linear mode and upper limit for probe timeout
- Add FFI enable_multipath()/set_multipath_algorithm()
- Add RoundRobin multipath scheduler
- Add more units test for multipath transport
- tquic_client: stop trying and exit if it fails to reconnect the server multiple times.
- tquic_client: output the stats first and then exit when it receives an SIGINT signal.
- Simplify FFI quic_set_logger() to avoid from return unnecessary errors
- Rename set_multipath() in Config to enable_multipath()
- Rename set_multipath_algor() in Config to set_multipath_algorithm()
- Change default congestion control algorithm to BBR
- Fix stream scheduling for multiple incredmental streams
- Fix reinjection for multipath transport
v0.4.0 - 2023-12-18
- Add config API for initial_congestion_window/min_congestion_window
- Add congestion_control_algor option for tquic_client/tquic_server
- Add initial_congestion_window/min_congestion_window option for tquic_client/tquic_server
- Add more unittest cases for delivery_rate/minmax
- Simplify ffi feature in tls module
- Add typos.toml and fix all typos
- Add a workflow for goodput measurements
- Rename tquic_apps to tquic_tools
- Move examples to
tquic-group/tquic-examples-*
repos
- Keep cc unchanged for non-data packets (e.g., Initial and Handshake)
- Update the LICENSE file
v0.3.0 - 2023-12-01
- Simplify the usage of Endpoint
- Add config API for stateless retry
- Add config API for initial RTT
- Add quic_conn_index() for getting connection index
- tquic_client: create the output directory if it does not exist
- tquic_client: convert unspecified address to localhost address
- tquic_client: prompt help messages for wrong command args
- tquic_client: print statistics at the end of execution
- Improve unit testing
- Improve static analysis
- endpoint: change Endpoint.close() to support forcily close the endpoint
- endpoint: quic_endpoint_new() no longer takes ownership of the resources provides by the C caller
- tquic_client: change
-p
option to write the response header and body to stdout
- Ignore packets with unknown dcid
- Fix bandwidth over-estimation issue
- Improve interop testing and resolve new found issues
v0.2.0 - 2023-11-09
- Optimize the writing of stream frames
- Improve fuzz testing
- Fix frame issues found by fuzz testing
v0.1.0 - 2023-11-01
- Support QUIC v1 and HTTP/3 protocols.
- Support congestion control algorithms such as CUBIC, BBR, BBRv3, and COPA.
- Provide experimental support for Multipath Transport, including MinRTT and Redundant algorithms.
- Provide APIs for Rust, C, and C++.
- Provide example clients and servers.