Skip to main content

CHANGELOG.md

# Changelog

## 0.3.0

- Bump `quic` dep to 1.6.2, `h2` dep to 0.8.0.
- IPv6: listeners bind via `ip` / `family` (h3 and h2); clients accept IP-literal hosts and `inet:ip_address()` tuples, with `family` / `happy_eyeballs` / `connection_attempt_delay` controls (h3). IPv6 literals are bracketed in the `:authority` header.
- `webtransport:listener_sockname/1` returns the bound `{Ip, Port}` (also surfaced as `sockname` in `listener_info/1`). Resolved from the socket for h3; best-effort (requested addr + bound port) for h2, which exposes only the port.
- 0-RTT: session-ticket capture (`{webtransport, session_ticket, _}` to the connecting process) and connection-level acceptance reporting via `webtransport:early_data_accepted/1`. The `session_ticket` connect option plumbs a stored ticket through to QUIC. Full 0-RTT resumption is not yet supported through the synchronous connect path.
- Tests: IPv6 round-trip (h3 + h2), sockname, and session-ticket capture.

## 0.2.6

- Fix: failed h3 `connect/4` no longer leaks its per-connection router. The router is `start_link`'d to the caller but traps exits, so the caller link never reaped it; `connect_h3` now stops it on the connect-failure path, and closes the H3 connection (which reaps the router via its monitor) when the session fails to start.
- Fix: the h2 CONNECT-stream data loop now monitors both the h2 connection and the session and exits on either `'DOWN'`, instead of blocking forever if the connection dies without a `closed` message or the session goes away. Server and client now spawn it the same way.
- Bound the router `open_bidi_stream` call (was `infinity`) so an unresponsive H3 connection cannot stall the session process.
- Tests: regressions for the router leak and the data-loop termination.

## 0.2.5

- Bump `quic` dep to 1.4.5, `h2` dep to 0.6.1.
- OTP 29 support: replace deprecated `catch Expr` expressions with `try ... catch ... end` (`webtransport_h2`, `webtransport_session`, `webtransport`).
- CI: add OTP 28 and 29 to the test matrix; bump rebar3 to 3.25.0.

## 0.2.4

- Bump `quic` dep to 1.4.2.

## 0.2.3

- Embedding (h3): `accept/4` now works when called from a process other than the QUIC connection process. The per-connection stream router is keyed by the QUIC connection pid, shared by the `h3_settings/1` connection_handler and by `accept/4` (via `quic_h3:get_quic_conn/1`), instead of the caller's process dictionary. Incoming bidi/uni streams and datagrams now reach the session even when the embedder dispatches each request to its own worker (e.g. Livery). The router's registry row and process are reaped when its QUIC connection ends.
- CT: `embedded_accept_round_trip_test` (h3) drives a raw `quic_h3` server with `h3_settings/0` merged in, accepts from a worker process, and asserts that a bidi stream (with FIN) and a datagram both round-trip through the echo handler.

## 0.2.2

- Docs: README gains a Sponsors section (Enki Multimedia logo vendored under `docs/images/`).
- Docs: fix invalid `webtransport:open_stream(Session, bidi | uni)` snippet — type-union pipe was in expression position; now `bidi  %% or uni`.
- CT: cover `listeners/0`, `listener_info/1`, and `start_listener/2` cert/key error paths (`webtransport.erl` line coverage 51% → 54%).

## 0.2.1

- `start_listener/2` (h3): switch the listener loop from `spawn_link/3` to `spawn/3` so `stop_listener/1` no longer propagates a `shutdown` exit to the caller. The interactive shell (and any non-trapping caller) now stays clean across a full lifecycle.
- `webtransport_session:init/1`: distinguish a handler module that fails to load (`{handler_not_loaded, M, Reason}`) from a loaded module missing `init/2` or `init/3`.
- README: quick-start now launches the shell with `ERL_FLAGS="-pa examples" rebar3 shell --apps webtransport` so handler modules outside `src/` are reachable.
- Regression test: `stop_listener_does_not_kill_caller_test` (h3 + h2 groups).

Known issue (tracked upstream in `quic`): a graceful `close_session/1` still emits a `quic_h3_connection` `quic_closed` CRASH REPORT because the dep treats any QUIC-conn `'DOWN'` as abnormal. Will resolve when `quic` is bumped.

## 0.2.0

- Switch `h2` and `quic` deps to hex packages: `h2 0.5.0`, `quic 1.3.0`.
- Add `public_key` to the application list.
- Clean dialyzer run: dropped dead `{error, _}` clauses around `h2_capsule:decode/1` and `h2_varint:decode/1`, removed unreachable `Router =:= undefined` branch, dropped unsupported `h3_datagram_enabled` from `quic_h3:start_server/3` opts, switched listener loop to `spawn_link/3` for static reachability.
- Configure `xref_checks` (skip `exports_not_used` for the public API) and `dialyzer` (`plt_extra_apps: [public_key, ssl, crypto, inets]`).
- Add GitHub Actions CI: OTP 26/27 matrix runs compile, xref, eunit, dialyzer; separate job builds ex_doc.

## 0.1.0

- Initial release.