* fix: Don't allow sending path status frames on non-multipath connections
* fix: Ignore PATH_ACKs on abandoned paths
* test: Implement a quinn-proto multipath proptest & add regression tests
* Restructure proptests, fix "invalid key" access in test endpoints
* Turn of MTUD
* Add another regression test
* fix: Correctly check `space.rx_packet` in key updates
Also refactor `PacketNumberSpace::rx_packet` to be an `Option<u64>` instead of `u64`.
* Smaller test case
* fix accepting packets from other remotes.
* Increase the iterations in `drive_bounded`
* Remove proptests itself
* Cargo.lock update fix after merge
* fix imports
* fix merge
* self-review
* cfg-gate proptests
* Implement `RoutingTable` instead of `multipath_addrs`
* Keep connection handles around, but don't use them when drained
* Fix all tests
* Reintroduce proptests
* Move random interaction running tests into submodule
* Implement more complex route table generation
* Prefer `Self::`
* refactor: Prefer not duplicating quinn-proto types
* Don't track `path_ids` in `State`, but fetch them from `Connection`
* Extract out `TestOp::run`
* Reorder things
* Add close operation
* Properly use short-circuiting
* Add holepunching APIs to proptests
* Revert accidental changes
* Return the `ConnectionError` from `Connection::handle_event`
* Revert "Return the `ConnectionError` from `Connection::handle_event`"
This reverts commit 713e17465f.
* Check `Connection::state` in proptests instead of adding a panic_on_transport_error config
* Properly check for transport errors
* `cargo fmt`
* Cfg out `random_interaction` module in Wasm
* format
* Cleanup, fix all clippy issues
* Code review
Quinn fork of iroh
Quinn is a pure-rust, async-compatible implementation of the IETF [QUIC][quic] transport protocol.
- Simultaneous client/server operation
- Ordered and unordered stream reads for improved performance
- Works on stable Rust, tested on Linux, macOS and Windows
- Pluggable cryptography, with a standard implementation backed by [rustls][rustls] and [ring][ring]
- Application-layer datagrams for small, unreliable messages
- Future-based async API
- Minimum supported Rust version of 1.83.0
This is a fork incorporating some changes for use in iroh. The aim is to contribute back any generally useful changes into upstream Quinn, so it is strongly discouraged to use this fork directly.
Git branches
The upstream branches are kept unmodified and get occasionally synced
(e.g. our main branch tracks upstream/main with a small delay).
The iroh-specific branches are:
iroh-0.10.xis the branch for quinn@0.10 series.iroh-0.11.xis the branch for quinn@0.11 series.
The default branch should be set the currently actively used branch by iroh.
Updating a branch
To update a branch to include the upstream changes, merge the upstream
branch. E.g. when upstream is main and the current iroh branch is
iroh-0.11.x:
-
Check which commits are new in main.
Using magit:
magit-cherry(Y), frommaintoiroh-0.11.x -
Find the commit to merge.
You probably want to find the last released commit on the
mainbranch, which might not be the last commit on main. So you need to find the commit hash as you can't use "main" in this case. -
Merge this commit:
git merge abc123 -
You can check the log and cherries again to see if the right commits are left in main.
Upstream versions
Usually we only try to merge tagged upstream versions. Currently (as of the 0.13 iroh-quinn release) we've released work that hasn't been released upstream yet.
In the normal case, you'd be able to check the current matching upstream version by running:
git tag --merged
This shows all the tags which are in the ancestors of HEAD. Look for
the highest quinn, quinn-proto and quinn-udp tags which are
found in all the ancestor commits.