This re-arranges the loop in poll_transmit to always finish the packet before going to the next iteration. This primarily enables to mutably borrow the TransmitBuf into a packet-specific buffer while the packet is being built. But this is not yet utilised in this commit. It does however remove the need of the mutable builder_storage Option, which makes reasoning over packet building slightly easier. - The logic to know on which packet space to send next, or whether there is no longer anything to send, has been moved to the next_send_space method. - The logic to decide whether to pad a packet before finishing it is moved to the end of the loop. - The logic to check the congestion controller and pacing is kept at the start of the loop. Before a new packet is started. Starting a new datagram also stays there.
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.71
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. 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
We only try to merge tagged upstream versions. To check the current matching upstream version run:
git tag --merged
This will show 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.