Skip to content

v0.5.1 changes#718

Merged
huster-zhangpeng merged 32 commits into
mainfrom
feat/v0.5.1
Jun 15, 2026
Merged

v0.5.1 changes#718
huster-zhangpeng merged 32 commits into
mainfrom
feat/v0.5.1

Conversation

@eareimu

@eareimu eareimu commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

dquic v0.5.1

This release focuses on traversal correctness, interface/bind semantics,
connection lifecycle cleanup, and workspace publish readiness across the
dquic stack.

Traversal and NAT maintenance

  • qtraversal now refreshes receive-side routing dependencies correctly during
    reinit and interface rebind.
  • NAT mappings are refreshed sooner to reduce stale external-address state.
  • Local endpoints are now tracked in the traversal address book.
  • STUN probe handling now uses typed errors instead of looser classification.
  • Traversal verification was tightened to wait explicitly for STUN data.

These changes make punching, rebinding, and long-lived traversal sessions more
predictable under interface churn and mapping refresh.

Interface and UDP bind semantics

  • qinterface no longer treats transient interface statistics (rx / tx
    counters and timestamps) as meaningful interface changes.
  • Interface-bound UDP sockets are now bound to their devices more explicitly.
  • qudp now treats inet://[::]:PORT as strict IPv6-only behavior.

Downstreams that need dual-stack exposure should bind IPv4 and IPv6
explicitly instead of relying on an IPv6 wildcard bind to cover both.

Connection lifecycle and timers

  • dquic::common no longer blocks Network::bind on synchronous STUN
    resolution.
  • qconnection now exposes Arc<Connection> directly and breaks the strong
    reference cycle that could keep connections alive after external owners were
    dropped.
  • qconnection now exposes local punch endpoints.
  • qbase idle-timer handling was corrected, including path-creation start
    behavior and incorrect send-side renewal.
  • TLS terminology was normalized from agent to authority.
  • connection auth log copy was normalized accordingly.

Resolver, protocol, and TLS surface

  • a new qprotocol crate now carries routing / control protocol pieces
  • qresolve resolver traits are now downcastable
  • qresolve can distinguish H3 DNS sources more explicitly
  • qresolve publish metadata now declares the required tokio/net feature set
  • custom server certificate verification gained OCSP support

Workspace publish readiness

  • the workspace publish surface was prepared for 0.5.1
  • qprotocol publishing metadata now uses the workspace README
  • unused dependencies were removed across workspace crates
  • release workflow naming was normalized to publish
  • the workspace publish workflow now supports sequential publish handling for
    the full crate set

Upgrade notes

  • QuicClient / QuicListeners connection-returning APIs now expose
    Arc<Connection> directly
  • inet://[::]:PORT is now IPv6-only
  • TLS naming has been normalized from agent to authority
  • the workspace now includes the new qprotocol crate

Full changelog: v0.5.0...v0.5.1

eareimu added 20 commits May 13, 2026 14:46
netdev::Interface's derived PartialEq includes rx/tx stats and a
timestamp that change on every poll for active interfaces, which
produced a spurious InterfaceEvent::Changed on every scan. Compare
only the reconfigurable fields that actually affect bind/route
decisions.
Network::bind no longer resolves the STUN server synchronously before
binding. DNS lookup is now delegated entirely to the StunClientsComponent
background task, which already has per-lookup timeout protection and
retries until MIN_AGENTS is reached.

This removes a latent hang: if the configured resolver chain contains a
sub-resolver that pends forever (e.g. an unreachable H3 DNS endpoint),
bind would block indefinitely waiting on the first agent. Binding now
completes immediately regardless of resolver health.

Also parallelize bind_many using FuturesUnordered so multiple interfaces
are bound concurrently; existing callers aggregate by BindUri key and are
order-independent.
…nce cycle

- Rename ConnectionState to Connection and remove the Connection(Arc<ConnectionState>) newtype wrapper; callers now receive Arc<Connection> directly

- spawn_drive_connection now holds Weak<Connection> and upgrades per event,
  breaking the strong cycle that kept connections alive after all external Arc references were dropped

- QuicClient::new_connection, QuicClient::connect, QuicClient::connected_to_with_source, and QuicListeners::accept now return Arc<Connection>

- DNS drain task in QuicClient::connect uses Weak<Connection> and races against terminated() so it exits promptly on shutdown

- Update http-server, h3-server, h3-client examples for the new Arc<Connection> API
StunClientComponent::reinit was cloning the old stun_router instead of
fetching the freshly reinited one from StunRouterComponent, causing the
new keep-alive task to deliver STUN packets to a stale router after
interface rebind. Mirror StunClientsComponent::reinit by going through
iface.with_components to obtain the new router.
@codecov

codecov Bot commented Jun 4, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 55.28500% with 808 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
qtraversal/src/nat/client.rs 0.00% 354 Missing ⚠️
qtraversal/src/punch/puncher.rs 46.19% 191 Missing ⚠️
qconnection/src/traversal.rs 26.72% 85 Missing ⚠️
qudp/src/unix.rs 18.96% 47 Missing ⚠️
qudp/src/lib.rs 58.57% 29 Missing ⚠️
qconnection/src/lib.rs 59.01% 25 Missing ⚠️
qconnection/src/tls/client_auth.rs 81.73% 19 Missing ⚠️
dquic/src/client.rs 11.76% 15 Missing ⚠️
qtraversal/src/route.rs 72.72% 12 Missing ⚠️
qinterface/src/bind_uri.rs 93.33% 7 Missing ⚠️
... and 6 more
Files with missing lines Coverage Δ
dquic/src/server.rs 63.68% <100.00%> (+1.15%) ⬆️
qbase/src/time.rs 89.92% <100.00%> (+3.38%) ⬆️
qconnection/src/builder.rs 96.86% <100.00%> (-0.37%) ⬇️
qconnection/src/path/paths.rs 90.38% <100.00%> (+0.38%) ⬆️
qconnection/src/space/initial.rs 87.74% <100.00%> (+2.03%) ⬆️
qconnection/src/tls/authority.rs 68.81% <ø> (ø)
qinterface/src/component/route.rs 78.91% <ø> (ø)
qinterface/src/device.rs 44.74% <94.73%> (-2.56%) ⬇️
dquic/src/common.rs 57.64% <76.92%> (+10.91%) ⬆️
qinterface/src/io/handy.rs 56.81% <62.50%> (-0.33%) ⬇️
... and 13 more

... and 24 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@eareimu eareimu force-pushed the feat/v0.5.1 branch 2 times, most recently from fddeaa5 to fe2ce7d Compare June 4, 2026 10:13
@eareimu eareimu changed the title v0.5.1 changes WIP v0.5.1 changes Jun 4, 2026
@eareimu eareimu changed the title WIP v0.5.1 changes v0.5.1 changes Jun 7, 2026
Comment thread .github/workflows/publish-crates.yml Outdated
@eareimu eareimu force-pushed the feat/v0.5.1 branch 2 times, most recently from 2f9fe4e to 4eb1215 Compare June 15, 2026 02:26
@huster-zhangpeng huster-zhangpeng merged commit 0f1081e into main Jun 15, 2026
17 checks passed
@huster-zhangpeng huster-zhangpeng deleted the feat/v0.5.1 branch June 15, 2026 07:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants