webtransport_handler behaviour (webtransport v0.2.6)
View SourceWebTransport handler behaviour.
Applications implement this behaviour to handle WebTransport sessions. The callbacks are invoked by the session process when events occur.
Example Handler
Prefer init/3 — it receives the handler_opts map from the connection / listener options, which is the only way to plumb things like an owner pid, a request-id, or application configuration into the handler. The 2-arity init/2 is kept only as a back-compat shim and is called when the handler does not export init/3.
-module(my_wt_handler).
-behaviour(webtransport_handler).
-export([init/3, handle_stream/4, handle_datagram/2,
handle_stream_closed/3, terminate/2]).
init(Session, _Req, Opts) ->
Owner = maps:get(owner, Opts, undefined),
{ok, #{session => Session, owner => Owner}}.
handle_stream(Stream, Type, Data, State) ->
{ok, State, [{send, Stream, <<"echo: ", Data/binary>>}]}.
handle_datagram(Data, State) ->
{ok, State}.
handle_stream_closed(_Stream, _Reason, State) ->
{ok, State}.
terminate(_Reason, _State) ->
ok.
Summary
Types
-type action() :: {send, webtransport:stream(), iodata()} | {send, webtransport:stream(), iodata(), fin} | {send_datagram, iodata()} | {open_stream, bidi | uni} | {close_stream, webtransport:stream()} | {reset_stream, webtransport:stream(), non_neg_integer()} | {stop_sending, webtransport:stream(), non_neg_integer()} | drain_session | {close_session, non_neg_integer(), binary()}.
Callbacks
-callback handle_stream_closed(Stream, Reason, State) -> Result when Stream :: webtransport:stream(), Reason :: normal | {reset, non_neg_integer()} | {error, term()}, State :: term(), Result :: {ok, NewState} | {stop, Reason, NewState}, NewState :: term().
-callback init(Session, Req) -> {ok, State} | {ok, State, Actions} | {error, Reason} when Session :: webtransport:session(), Req :: webtransport:request(), State :: term(), Actions :: [action()], Reason :: term().
-callback init(Session, Req, Opts) -> {ok, State} | {ok, State, Actions} | {error, Reason} when Session :: webtransport:session(), Req :: webtransport:request(), Opts :: map(), State :: term(), Actions :: [action()], Reason :: term().