-include_lib("eNet/include/eNet.hrl").
|
|
|
|
%% @type version(). HTTP version as a tuple, i.e. `{0, 9} | {1, 0} | {1, 1}'.
|
|
-type version() :: {0, 9} | {1, 0} | {1, 1}.
|
|
|
|
-export_type([version/0]).
|
|
|
|
-define(DefWsOpts, [
|
|
binary
|
|
, {packet, 4}
|
|
, {active, false}
|
|
, {reuseaddr, true}
|
|
, {nodelay, false}
|
|
, {delay_send, true}
|
|
, {send_timeout, 15000}
|
|
, {keepalive, true}
|
|
, {exit_on_close, true}
|
|
, {back_log, 1024}
|
|
]).
|
|
|
|
-export_type([wsOpt/0]).
|
|
-type wsOpt() ::
|
|
listenOpt() |
|
|
{wsMod, module()}.
|
|
|
|
-record(wsReq, {
|
|
method :: method(),
|
|
scheme :: undefined | binary(),
|
|
host :: undefined | binary(),
|
|
port :: undefined | 1..65535,
|
|
path :: [binary()],
|
|
args :: [{binary(), any()}],
|
|
raw_path :: binary(),
|
|
version :: wsHttp:version(),
|
|
headers :: headers(),
|
|
original_headers :: headers(),
|
|
body :: body(),
|
|
pid :: pid()
|
|
}).
|
|
|
|
-export_type([req/0, method/0, body/0, headers/0, response_code/0]).
|
|
|
|
%% @type req(). A record representing an HTTP request.
|
|
-type req() :: #wsReq{}.
|
|
|
|
%% @type http_method(). An uppercase atom representing a known HTTP verb or a
|
|
%% binary for other verbs.
|
|
-type method() :: 'OPTIONS' | 'GET' | 'HEAD' | 'POST'| 'PUT' | 'DELETE' | 'TRACE' | binary().
|
|
|
|
%% @type body(). A binary or iolist.
|
|
-type body() :: binary() | iolist().
|
|
|
|
-type header() :: {Key :: binary(), Value :: binary() | string()}.
|
|
-type headers() :: [header()].
|
|
|
|
-type response_code() :: 100..999.
|
|
|
|
|
|
-define(EXAMPLE_CONF, [{callback, elli_example_callback}, {callback_args, []}]).
|
|
|
|
-define(CONTENT_LENGTH_HEADER, <<"content-length">>).
|
|
-define(EXPECT_HEADER, <<"expect">>).
|
|
-define(CONNECTION_HEADER, <<"connection">>).
|
|
-define(TRANSFER_ENCODING_HEADER, <<"Transfer-Encoding">>).
|
|
|
|
|
|
|
|
-export_type([callback/0, callback_mod/0, callback_args/0, event/0, result/0]).
|
|
|
|
%% @type callback(). A tuple of a {@type callback_mod()} and {@type
|
|
%% callback_args()}.
|
|
-type callback() :: {callback_mod(), callback_args()}.
|
|
|
|
%% @type callback_mod(). A callback module.
|
|
-type callback_mod() :: module().
|
|
|
|
%% @type callback_args(). Arguments to pass to a {@type callback_mod()}.
|
|
-type callback_args() :: list().
|
|
|
|
%% @type event(). Fired throughout processing a request.
|
|
%% See {@link elli_example_callback:handle_event/3} for descriptions.
|
|
-type event() ::
|
|
elli_startup|
|
|
bad_request |
|
|
file_error|
|
|
chunk_complete |
|
|
request_complete|
|
|
request_throw |
|
|
request_error |
|
|
request_exit|
|
|
request_closed |
|
|
request_parse_error|
|
|
client_closed |
|
|
client_timeout|
|
|
invalid_return.
|
|
|
|
-type result() ::
|
|
{elli:response_code() |ok, elli:headers(), {file, file:name_all()}|
|
|
{file, file:name_all(), wsUtil:range()}}|
|
|
{elli:response_code() | ok, elli:headers(), elli:body()}|
|
|
{elli:response_code() | ok, elli:body()}|
|
|
{chunk, elli:headers()}|
|
|
{chunk, elli:headers(), elli:body()}|
|
|
ignore.
|
|
|
|
-type sendfile_opts() :: [{chunk_size, non_neg_integer()}].
|