Floris Bruynooghe abe357d742 Finish packets at end of each poll_transmit loop
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.
2025-04-11 10:21:54 +02:00
2025-01-30 23:29:12 +00:00
2025-04-10 13:04:22 +02:00
2025-03-24 15:57:34 +00:00
2020-01-27 10:21:10 -08:00
2018-04-28 22:07:13 -07:00
2025-02-23 11:52:46 +00:00

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:

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), from main to iroh-0.11.x

  • Find the commit to merge.

    You probably want to find the last released commit on the main branch, 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.

S
Description
noq, a QUIC implementation in Rust
Readme 106 MiB
Languages
Rust 99.3%
Python 0.5%
Shell 0.2%