## Description
New rust release, new clippy lints!
Also fix cargo-deny by upgrading rustls-webpki.
And clean up the cargo-deny config by removing unused exceptions.
## Breaking Changes
n/a
## Notes & open questions
n/a
## Change checklist
- [x] Self-review.
## Description
- Does what the PR title says
- Also some small cleanups in `poll_transmit_path_space`, if I may.
Context for what `app_limited` is:
> When bytes in flight is smaller than the congestion window and sending
is not pacing limited, the congestion window is underutilized. This can
happen due to insufficient application data or flow control limits. When
this occurs, the congestion window SHOULD NOT be increased in either
slow start or congestion avoidance.
https://www.rfc-editor.org/rfc/rfc9002.html#section-7.8
I.e. when `app_limited` is `true`, the congestion controller doesn't
increase the congestion window.
You can see this in `Cubic::on_ack` where it outright immediately bails,
doing nothing, when `app_limited` is `true`.
Because all paths have their own congestion window, they need to track
whether they're application limited separately.
Otherwise it's possible that there's a situation where one path is never
exercised fully (e.g. a backup path), while another path is saturated
with application data. Previously, the application data path would set
the connection-wide `app_limited` to `false`, causing the backup path
(that never experiences congestion) to inflate its congestion window.
With this change, the backup path would know it's not application
limited and pass that correct information to the congestion controller.
Based on #540
Trying to make it less easy to forget this, I think it's neat, but maybe
not?
This does wake in some more cases now, specifically on error branches,
but I don't think that really matters. But please tell me if you think
it does
---------
Co-authored-by: Philipp Krüger <philipp.krueger1@gmail.com>
## Description
This updates noq and its dependencies to rand 0.10 and getrandom 0.4.
## Breaking Changes
I don't think there are any of rand's APIs exposed in noq or noq-proto.
So no breaking changes.
## Notes & open questions
~~Blocked on https://github.com/tomtomwombat/fastbloom/pull/27 being
released.~~ We can disable the rand feature for fastbloom instead.
`proptest` still depends on rand 0.9:
```
$ cargo tree -i rand@0.9
rand v0.9.2
└── proptest v1.9.0
[dev-dependencies]
└── noq-proto v0.16.0 (/home/philipp/program/work/noq/noq-proto)
├── noq v0.17.0 (/home/philipp/program/work/noq/noq)
│ ├── bench v0.2.0 (/home/philipp/program/work/noq/bench)
│ └── perf v0.2.0 (/home/philipp/program/work/noq/perf)
└── perf v0.2.0 (/home/philipp/program/work/noq/perf)
```
But it's only a dev-dependency, so won't get pulled in for people
depending on noq.
* Switch to `aes-gcm` crate for retry token logic when using rustls
* Split `rustls-ring` and `rustls-aws-lc-rs` features into `rustls`, `ring` and `aws-lc-rs` features.
* Better document the features.
* `cargo make format`
* Fix outdated feature references
* Avoid double-defining `configured_provider`
* File an issue about suddenly working PQC handshakes now breaking a test
* Fix rebase
* Only enable `aes-gcm` dependency when needed
* Add features for backwards compatibility
* Add some links to the spec's retry packet integrity section
* fix(quinn-udp): disable IP_PKTINFO under Wine
Wine's IP_PKTINFO implementation maps Linux's ipi_addr (the IP header
destination address) to Windows' IN_PKTINFO.ipi_addr. On multi-homed hosts,
ipi_addr and ipi_spec_dst (the local address) can differ, causing QUIC to
discard packets with 'sent to incorrect interface'.
This commit:
- Detects Wine at runtime via ntdll.dll's wine_get_version export
- Disables pktinfo when running under Wine (both send and recv paths)
- Exports is_wine() from the crate for use by downstream tests
- Skips the local_ip assertion in echo tests under Wine
- Upgrades windows-sys to 0.61
See:
- Wine's convert_control_headers(): https://github.com/wine-mirror/wine/blob/master/dlls/ntdll/unix/socket.c
- Linux in_pktinfo fields: https://man7.org/linux/man-pages/man7/ip.7.html
- Windows IN_PKTINFO: https://learn.microsoft.com/en-us/windows/win32/api/ws2ipdef/ns-ws2ipdef-in_pktinfo
* apply CR
* fixup
* cleanup
* add basic struct and methods
* dispatch using side
* use ConnPair in multipath tests
* use `Side` variants directly
* add testresult to dev deps
* always use time from underlying pair
* use ConnPair in multipath tests even if they don't use multipath_pair
* use stats(side) directly
* introduce ConnPair::connect_with
* introduce ConnPair::with_default_endpoint
* reduce LOCs
* introduce ConnPair::with_transport_cfg for even less noise
* only keep the public api
* fmt
* take advantage of derive_more
* add some basic docs
* revert weird windows update
* Add proptests for encode/decode
* Add proptest arbitrary for VarInt and StreamId
Also fix the StreamId arbitrary::Arbitrary generation
* Add proptest arbitraries for various quinn-proto types and make use of them in the random interaction test
* Add more arbitraries.
* Remove unneeded derives
* Use MaybeFrame arb
* fmt
* Use cfg(test) for the arbitraries.
Also move the encode_decode tests into a separate file.
* Add more cases to TestFrame
* Get rid of the last remaining record enum cases.
* More arbitraries. Now almost every frame type is roundrrip tested.
* remove dead code
* clippy
* Add proptest and test-strategy even in wasm
(we don't *run* proptests, but need them to compile)
* Use a feature flag after all...
going in circles...
* Remove claude settings and DRY the proptest attribute.
* Revert "Use a feature flag after all..."
This reverts commit b27add632b.
* Try to get proptest to work in wasm after all
It doesn't need to run tests, just compile.
* Use the right hmac import
* sort dev deps
* Remove some feature flag gated imports
they are not worth it in terms of DRY
* Use test_strategy::Arbitrary by default in frame. It gets used way more often.
`cargo release` command successfully published the crates, but the
commit created by `cargo release` to update the version numbers was
rejected, because I don't have permissions to push to the `main` branch
directly.
These are the appropriate changes to ensure the version numbers in our
code align with the released crates.
* 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
* WIP add new packet buffer
* Use git dep
* Use PacketBuf for lost_packets as well
* Use published sorted_index_buffer
* fmt
* Get rid of MSRV warning
* fix dependency sort order
* nat traversal requires multipath
* allow crate access, not ideal, but unavoidable
* satisfty MSRV limits
* pub all the way to the top
* update wasm-bindgen-test