HTTP.WebTransport.Transport behaviour (http_web_transport v0.10.0)

View Source

Behaviour for WebTransport protocol backends.

The public WebTransport API is intentionally decoupled from the concrete QUIC implementation. A compliant backend must speak WebTransport over HTTP/3; raw UDP is not sufficient.

Summary

Types

session_ref()

@type session_ref() :: term()

stream_ref()

@type stream_ref() :: term()

transport_info()

@type transport_info() :: map()

Callbacks

abort_send_stream(stream_ref, non_neg_integer)

@callback abort_send_stream(stream_ref(), non_neg_integer()) :: :ok | {:error, term()}

cancel_receive_stream(stream_ref, non_neg_integer)

@callback cancel_receive_stream(stream_ref(), non_neg_integer()) :: :ok | {:error, term()}

close(session_ref, t)

@callback close(session_ref(), HTTP.WebTransport.CloseInfo.t()) :: :ok | {:error, term()}

close_send_stream(stream_ref)

@callback close_send_stream(stream_ref()) :: :ok | {:error, term()}

connect(t, t)

@callback connect(URI.t(), HTTP.WebTransport.Options.t()) ::
  {:ok, session_ref(), transport_info()} | {:error, term()}

get_stats(session_ref)

@callback get_stats(session_ref()) ::
  {:ok, HTTP.WebTransport.Stats.t()} | {:error, term()}

open_bidirectional_stream(session_ref, keyword)

@callback open_bidirectional_stream(
  session_ref(),
  keyword()
) :: {:ok, stream_ref()} | {:error, term()}

open_unidirectional_stream(session_ref, keyword)

@callback open_unidirectional_stream(
  session_ref(),
  keyword()
) :: {:ok, stream_ref()} | {:error, term()}

recv_stream(stream_ref, timeout)

@callback recv_stream(stream_ref(), timeout()) ::
  {:ok, binary()} | :fin | {:error, term()}

send_datagram(session_ref, binary, keyword)

@callback send_datagram(session_ref(), binary(), keyword()) :: :ok | {:error, term()}

send_stream(stream_ref, iodata, keyword)

@callback send_stream(stream_ref(), iodata(), keyword()) :: :ok | {:error, term()}