h1_parse_erl (h1 v0.2.0)

View Source

Summary

Functions

Stateless chunk parser (livery style) — useful when caller drives the body loop directly.

Parse a full request head in one call (for callers who already have the complete bytes buffered). Returns path + query-string split.

Types

body_result/0

-type body_result() ::
          {ok, binary(), parser()} |
          {trailer, {binary(), binary()}, parser()} |
          {more, parser()} |
          {more, parser(), binary()} |
          {done, binary()} |
          {error, term()}.

header_result/0

-type header_result() :: {headers_complete, parser()} | {header, {binary(), binary()}, parser()}.

http_method/0

-type http_method() :: binary().

http_reason/0

-type http_reason() :: binary().

http_version/0

-type http_version() :: {non_neg_integer(), non_neg_integer()}.

parser/0

-type parser() ::
          #h1_parser{type :: auto | request | response,
                     state :: on_first_line | on_header | on_body | on_trailers | on_junk | done,
                     buffer :: binary(),
                     version :: undefined | {non_neg_integer(), non_neg_integer()},
                     method :: undefined | binary(),
                     status :: undefined | 100..599,
                     partial_headers :: [{binary(), binary()}],
                     clen :: undefined | non_neg_integer() | bad_int | conflict,
                     te :: undefined | binary(),
                     connection :: undefined | binary(),
                     ctype :: undefined | binary(),
                     upgrade :: undefined | binary(),
                     expect :: undefined | binary(),
                     body_framing ::
                         undefined | no_body |
                         {content_length, non_neg_integer()} |
                         chunked | close_delimited,
                     body_state :: waiting | done | {stream, fun(), term(), fun()},
                     body_read :: non_neg_integer(),
                     max_line_length :: pos_integer(),
                     max_empty_lines :: non_neg_integer(),
                     max_header_name_size :: pos_integer(),
                     max_header_value_size :: pos_integer(),
                     max_headers :: pos_integer(),
                     max_body_size :: pos_integer() | infinity,
                     empty_lines :: non_neg_integer(),
                     header_count :: non_neg_integer()}.

parser_option/0

-type parser_option() ::
          request | response | auto |
          {max_line_length, pos_integer()} |
          {max_empty_lines, non_neg_integer()} |
          {max_header_name_size, pos_integer()} |
          {max_header_value_size, pos_integer()} |
          {max_headers, pos_integer()} |
          {max_body_size, pos_integer() | infinity} |
          {method, binary()} |
          {status, 100..599}.

parser_result/0

-type parser_result() ::
          {response, http_version(), status(), http_reason(), parser()} |
          {request, http_method(), uri(), http_version(), parser()} |
          {more, parser()} |
          header_result() |
          body_result() |
          {error, term()}.

request_result/0

-type request_result() ::
          {ok, http_method(), binary(), binary(), http_version(), [{binary(), binary()}], binary()} |
          {more, binary()} |
          {error, term()}.

response_result/0

-type response_result() ::
          {ok, http_version(), status(), http_reason(), [{binary(), binary()}], binary()} |
          {more, binary()} |
          {error, term()}.

status/0

-type status() :: 100..599.

uri/0

-type uri() :: binary().

Functions

execute(St)

-spec execute(parser()) -> parser_result().

execute(H1_parser, Bin)

-spec execute(parser(), binary()) -> parser_result().

finish(H1_parser)

-spec finish(parser()) -> {done, binary()} | {error, term()}.

get(P, Props)

-spec get(parser(), atom() | [atom()]) -> any().

parse_chunk(Data)

Stateless chunk parser (livery style) — useful when caller drives the body loop directly.

parse_chunk(Data, MaxSize)

parse_request(Data)

-spec parse_request(binary()) -> request_result().

Parse a full request head in one call (for callers who already have the complete bytes buffered). Returns path + query-string split.

parse_request(Data, Opts)

-spec parse_request(binary(), map()) -> request_result().

parse_response(Data)

-spec parse_response(binary()) -> response_result().

parse_response(Data, Opts)

-spec parse_response(binary(), map()) -> response_result().

parse_trailers(Data)

parser()

-spec parser() -> parser().

parser(Options)

-spec parser([parser_option()]) -> parser().

to_int(Bin)

-spec to_int(binary()) -> {ok, non_neg_integer()} | false.

to_lower(Bin)

-spec to_lower(binary()) -> binary().

trim(Bin)

-spec trim(binary()) -> binary().