hackney_ws_proto (hackney v4.0.2)
View SourceSummary
Functions
Encode the key into the accept value for the Websocket handshake response.
Construct an unmasked Websocket frame.
Generate a key for the Websocket handshake request.
Return a frame tuple from parsed state and data.
Construct a masked Websocket frame.
Negotiate the permessage-deflate extension.
Negotiate the x-webkit-deflate-frame extension.
Parse and validate the Websocket frame header.
Parse and validate the frame's payload.
Validate the negotiated permessage-deflate extension.
Types
-type close_code() :: 1000..1003 | 1006..1011 | 3000..4999.
-type deflate_opts() :: #{level => zlib:zlevel(), mem_level => zlib:zmemlevel(), strategy => zlib:zstrategy(), server_context_takeover => takeover | no_takeover, client_context_takeover => takeover | no_takeover, server_max_window_bits => 8..15, client_max_window_bits => 8..15}.
-type extensions() :: map().
-type frag_state() :: undefined | {fin | nofin, text | binary, rsv()}.
-type frame() :: close | ping | pong | {text | binary | close | ping | pong, iodata()} | {close, close_code(), iodata()} | {fragment, fin | nofin, text | binary | continuation, iodata()}.
-type frame_type() :: fragment | text | binary | close | ping | pong.
-type mask_key() :: undefined | 0..4294967295.
-type rsv() :: <<_:3>>.
-type utf8_state() :: 0..8 | undefined.
Functions
Encode the key into the accept value for the Websocket handshake response.
-spec frame(frame(), extensions()) -> iodata().
Construct an unmasked Websocket frame.
-spec key() -> binary().
Generate a key for the Websocket handshake request.
-spec make_frame(frame_type(), binary(), close_code() | undefined, frag_state()) -> frame().
Return a frame tuple from parsed state and data.
-spec masked_frame(frame(), extensions()) -> iodata().
Construct a masked Websocket frame.
We use a mask key of 0 if there is no payload for close, ping and pong frames.
-spec negotiate_permessage_deflate([binary() | {binary(), binary()}], Exts, deflate_opts()) -> ignore | {ok, iolist(), Exts} when Exts :: extensions().
Negotiate the permessage-deflate extension.
-spec negotiate_x_webkit_deflate_frame([binary() | {binary(), binary()}], Exts, deflate_opts()) -> ignore | {ok, binary(), Exts} when Exts :: extensions().
Negotiate the x-webkit-deflate-frame extension.
The implementation is very basic and none of the parameters are currently supported.
-spec parse_header(binary(), extensions(), frag_state()) -> error | more | {frame_type(), frag_state(), rsv(), non_neg_integer(), mask_key(), binary()}.
Parse and validate the Websocket frame header.
This function also updates the fragmentation state according to information found in the frame's header.
-spec parse_payload(binary(), mask_key(), utf8_state(), non_neg_integer(), frame_type(), non_neg_integer(), frag_state(), extensions(), rsv()) -> {ok, binary(), utf8_state(), binary()} | {ok, close_code(), binary(), utf8_state(), binary()} | {more, binary(), utf8_state()} | {more, close_code(), binary(), utf8_state()} | {error, badframe | badencoding | badsize}.
Parse and validate the frame's payload.
Validation is only required for text and close frames which feature a UTF-8 payload.
Validate the negotiated permessage-deflate extension.