v0.3.0
Summary
Multipath Transport Support
- Support multipath data transmission, improving transport capacity and reliability
- Implement multipath handshaking while maintaining compatibility with traditional QUIC implementations
0-RTT Support
- Implement 0-RTT feature with simple API usage
Security Enhancements
- Add client authentication mechanism (AuthClient)
- Implement anti-port-scanning functionality to enhance server security
Timeout Mechanism Improvements
- Implement comprehensive handshake timeout and idle timeout control
- Active heartbeat packet mechanism to maintain connection liveness, optimizing long-connection scenarios
BindURI Abstraction
- Support binding to network interfaces rather than just IP addresses
- Enhanced network interface dynamic adaptation capability, significantly improving mobility support
In addition, there are numerous architectural optimizations and bug fixes, including parameters system refactoring, error handling mechanism optimization, and multiple critical bug fixes.
What's Changed
- feat: use AbstractAddr to identify an QuicInterafce by @eareimu in #530
- feat: distinguishing between real Servers and Listeners, reject client connections to the wrong host by @eareimu in #531
- docs: document addresses, and quic interface by @eareimu in #532
- feat: enhanced security for listeners by @eareimu in #533
- feat(qinterface): separate interface management and routing by @eareimu in #535
- feat: zero rtt by @eareimu in #534
- feat: rewrite connection establishment and 0rtt by @eareimu in #541
- docs(qbase): correct description of panic condition by @eareimu in #542
- refactor: use procedural macros and redesign parameters by @eareimu in #543
- feat: idle timeout while handshaking by @eareimu in #544
- fix: burst task wakeup it self more than 50% times by @eareimu in #545
- fix: try to rebind ipv6 addr multi times if ipv6 addr is not available by @huster-zhangpeng in #547
- refactor: extract role module by @huster-zhangpeng in #548
- feat: add error module for qbase::param by @huster-zhangpeng in #549
- refactor: move net::addr::IpFamily to net::Family, add AddrFamily trait by @huster-zhangpeng in #550
- feat: add trait CancelStream and StopSending by @huster-zhangpeng in #551
- refactor: rename qinterface::ifaces to qinterface::iface by @huster-zhangpeng in #552
- feat: multipath handshake by @eareimu in #553
- refactor: rename frame::EncodeFrame tp EncodeSize by @huster-zhangpeng in #554
- feat: add local::Locations by @huster-zhangpeng in #555
- refactor: rename qinterface::local::Topic to Observer by @huster-zhangpeng in #556
- fix(qconnection): ZERO is unhandled in get_local_max_idle_timeout by @eareimu in #557
- fix: rcvdJournal::trigger_ack_frame never triggered by @eareimu in #558
- fix(qbase): infinite loop when processing unknown parameters by @eareimu in #559
- fix(qinterface): packets dropped when there are too many packets by @eareimu in #560
- perf(qinterface): make Locations lock free by @eareimu in #561
- build(deps): update windows-sys requirement from 0.59 to 0.60 by @dependabot[bot] in #539
- feat: the standard URI format to describe BindUri by @eareimu in #562
- feat(qbase): generalize Pathway and Link to reduce conversions by @eareimu in #563
- fix: ack infinite loop by @metah3m in #565
- build(deps): update socket2 requirement from 0.5 to 0.6 by @dependabot[bot] in #569
- build(deps): update indicatif requirement from 0.17 to 0.18 by @dependabot[bot] in #567
- fix: send buffer state debug_assert failed by @eareimu in #564
- feat: handling some errors using custom error types by @eareimu in #566
- fix: packet loss cannot be triggered without ack by @metah3m in #570
- refactor: rename trait DescribeData to ContinuousData by @huster-zhangpeng in #571
- fix: fix: acked packet would not be lost, just ignore this lost event by @huster-zhangpeng in #572
- fix: the initial packets should always use the initial dcid(for client, odcid) by @huster-zhangpeng in #576
- fix/qlog by @eareimu in #573
- feat: support ansi option for examples by @eareimu in #575
- refactor: unify errors and logs, remove useless code by @eareimu in #574
- fix: increase loss delay to avoid backlog when packet loss by @metah3m in #577
- refactor: rename module prefered_address to preferred_address by @huster-zhangpeng in #579
- fix: add the missing path validated signal by @eareimu in #578
- feat: reuse initial_dcid for multipath handshaking by @huster-zhangpeng in #580
- fix: release ArcParametersGuard before traversing paths to avoid deadlock by @metah3m in #581
- fix: path first load crypto force by @metah3m in #582
- feat(qbase): make SendWakers wake-up balanced by @eareimu in #583
- fix: delay path validation start and reduce interval by @eareimu in #584
- fix: backoff initial rtt when packet loss by @metah3m in #587
- build(deps): update darling requirement from 0.20 to 0.21 by @dependabot[bot] in #588
- build(deps): update rcgen requirement from 0.13 to 0.14 by @dependabot[bot] in #568
- refactor: rename one_rtt_ready to tls_fin by @eareimu in #586
- fix: make loading of 0rtt and 1rtt packets exclusive by @eareimu in #589
- feat: negotiating handshake path in multipath handshake by @eareimu in #585
- fix: bufMap::may_lost error by @huster-zhangpeng in #590
- fix: skip path validation for handshake path by @eareimu in #591
- fix: fixed packet loss detect not working after ack by @eareimu in #592
- docs: update readmes with new api and benchmark by @eareimu in #593
- feat: add server management APIs with custom error types by @eareimu in #594
- feat(qinterface): allow interface (re)binding failures by @eareimu in #595
- fix: odcid entry dropped unexpectly by @eareimu in #596
- fix(qconnections): path ctxs may leak when server connection closed by @eareimu in #597
- refactor: rename unsuppoet to unsupport by @huster-zhangpeng in #598
- feat: impl MaxIdleTimer and DeferIdleTimer by @huster-zhangpeng in #599
- feat: remove client reuse connection option by @eareimu in #601
- feat: use DeferIdleTimer and MaxIdleTimer correctly by @huster-zhangpeng in #600
- feat: handshake timeout by @eareimu in #602
- feat: actively send heartbeat packets by @huster-zhangpeng in #603
- feat: too many pto timeout events occured is an error by @huster-zhangpeng in #604
- feat(qevent): tracing qlogger by @eareimu in #605
- feat: simplify and hide connection events by @eareimu in #606
- feat: split the path task into multiple tokio tasks by @eareimu in #607
- refactor: improve AuthClient, add tests by @eareimu in #608
- fix: path validate panic when tls handshake failed by @eareimu in #609
- feat(qinterface): add poll_close for QuicIO, fix possiable deadlock by @eareimu in #610
- fix: detect network change and rebind interface by @eareimu in #611
- feat: release v0.3.0 by @eareimu in #612
Full Changelog: v0.2.3...v0.3.0