mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 12:20:24 +00:00
Improve a few types, including cowboy_req:req()
This commit is contained in:
parent
a8335c63df
commit
473e3fb82b
7 changed files with 63 additions and 37 deletions
|
@ -23,8 +23,7 @@
|
||||||
-export([log/2]).
|
-export([log/2]).
|
||||||
-export([log/4]).
|
-export([log/4]).
|
||||||
|
|
||||||
%% @todo Detailed opts.
|
-type opts() :: cowboy_http:opts() | cowboy_http2:opts().
|
||||||
-type opts() :: map().
|
|
||||||
-export_type([opts/0]).
|
-export_type([opts/0]).
|
||||||
|
|
||||||
-type fields() :: [atom()
|
-type fields() :: [atom()
|
||||||
|
|
|
@ -39,10 +39,14 @@
|
||||||
max_keepalive => non_neg_integer(),
|
max_keepalive => non_neg_integer(),
|
||||||
max_method_length => non_neg_integer(),
|
max_method_length => non_neg_integer(),
|
||||||
max_request_line_length => non_neg_integer(),
|
max_request_line_length => non_neg_integer(),
|
||||||
|
metrics_callback => cowboy_metrics_h:metrics_callback(),
|
||||||
middlewares => [module()],
|
middlewares => [module()],
|
||||||
|
proxy_header => boolean(),
|
||||||
request_timeout => timeout(),
|
request_timeout => timeout(),
|
||||||
shutdown_timeout => timeout(),
|
shutdown_timeout => timeout(),
|
||||||
stream_handlers => [module()]
|
stream_handlers => [module()],
|
||||||
|
tracer_callback => cowboy_tracer_h:tracer_callback(),
|
||||||
|
tracer_match_specs => cowboy_tracer_h:tracer_match_specs()
|
||||||
}.
|
}.
|
||||||
-export_type([opts/0]).
|
-export_type([opts/0]).
|
||||||
|
|
||||||
|
@ -56,7 +60,7 @@
|
||||||
path = undefined :: binary(),
|
path = undefined :: binary(),
|
||||||
qs = undefined :: binary(),
|
qs = undefined :: binary(),
|
||||||
version = undefined :: cowboy:http_version(),
|
version = undefined :: cowboy:http_version(),
|
||||||
headers = undefined :: map() | undefined, %% @todo better type than map()
|
headers = undefined :: cowboy:http_headers() | undefined,
|
||||||
name = undefined :: binary() | undefined
|
name = undefined :: binary() | undefined
|
||||||
}).
|
}).
|
||||||
|
|
||||||
|
@ -99,7 +103,7 @@
|
||||||
socket :: inet:socket(),
|
socket :: inet:socket(),
|
||||||
transport :: module(),
|
transport :: module(),
|
||||||
proxy_header :: undefined | ranch_proxy_header:proxy_info(),
|
proxy_header :: undefined | ranch_proxy_header:proxy_info(),
|
||||||
opts = #{} :: map(),
|
opts = #{} :: cowboy:opts(),
|
||||||
|
|
||||||
%% Remote address and port for the connection.
|
%% Remote address and port for the connection.
|
||||||
peer = undefined :: {inet:ip_address(), inet:port_number()},
|
peer = undefined :: {inet:ip_address(), inet:port_number()},
|
||||||
|
|
|
@ -39,11 +39,15 @@
|
||||||
max_encode_table_size => non_neg_integer(),
|
max_encode_table_size => non_neg_integer(),
|
||||||
max_frame_size_received => 16384..16777215,
|
max_frame_size_received => 16384..16777215,
|
||||||
max_frame_size_sent => 16384..16777215 | infinity,
|
max_frame_size_sent => 16384..16777215 | infinity,
|
||||||
|
metrics_callback => cowboy_metrics_h:metrics_callback(),
|
||||||
middlewares => [module()],
|
middlewares => [module()],
|
||||||
preface_timeout => timeout(),
|
preface_timeout => timeout(),
|
||||||
|
proxy_header => boolean(),
|
||||||
settings_timeout => timeout(),
|
settings_timeout => timeout(),
|
||||||
shutdown_timeout => timeout(),
|
shutdown_timeout => timeout(),
|
||||||
stream_handlers => [module()]
|
stream_handlers => [module()],
|
||||||
|
tracer_callback => cowboy_tracer_h:tracer_callback(),
|
||||||
|
tracer_match_specs => cowboy_tracer_h:tracer_match_specs()
|
||||||
}.
|
}.
|
||||||
-export_type([opts/0]).
|
-export_type([opts/0]).
|
||||||
|
|
||||||
|
@ -78,7 +82,7 @@
|
||||||
}).
|
}).
|
||||||
|
|
||||||
-spec init(pid(), ranch:ref(), inet:socket(), module(),
|
-spec init(pid(), ranch:ref(), inet:socket(), module(),
|
||||||
ranch_proxy_header:proxy_info(), cowboy:opts()) -> ok.
|
ranch_proxy_header:proxy_info() | undefined, cowboy:opts()) -> ok.
|
||||||
init(Parent, Ref, Socket, Transport, ProxyHeader, Opts) ->
|
init(Parent, Ref, Socket, Transport, ProxyHeader, Opts) ->
|
||||||
Peer0 = Transport:peername(Socket),
|
Peer0 = Transport:peername(Socket),
|
||||||
Sock0 = Transport:sockname(Socket),
|
Sock0 = Transport:sockname(Socket),
|
||||||
|
@ -108,7 +112,7 @@ init(Parent, Ref, Socket, Transport, ProxyHeader, Opts) ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec init(pid(), ranch:ref(), inet:socket(), module(),
|
-spec init(pid(), ranch:ref(), inet:socket(), module(),
|
||||||
ranch_proxy_header:proxy_info(), cowboy:opts(),
|
ranch_proxy_header:proxy_info() | undefined, cowboy:opts(),
|
||||||
{inet:ip_address(), inet:port_number()}, {inet:ip_address(), inet:port_number()},
|
{inet:ip_address(), inet:port_number()}, {inet:ip_address(), inet:port_number()},
|
||||||
binary() | undefined, binary()) -> ok.
|
binary() | undefined, binary()) -> ok.
|
||||||
init(Parent, Ref, Socket, Transport, ProxyHeader, Opts, Peer, Sock, Cert, Buffer) ->
|
init(Parent, Ref, Socket, Transport, ProxyHeader, Opts, Peer, Sock, Cert, Buffer) ->
|
||||||
|
@ -125,7 +129,7 @@ init(Parent, Ref, Socket, Transport, ProxyHeader, Opts, Peer, Sock, Cert, Buffer
|
||||||
|
|
||||||
%% @todo Add an argument for the request body.
|
%% @todo Add an argument for the request body.
|
||||||
-spec init(pid(), ranch:ref(), inet:socket(), module(),
|
-spec init(pid(), ranch:ref(), inet:socket(), module(),
|
||||||
ranch_proxy_header:proxy_info(), cowboy:opts(),
|
ranch_proxy_header:proxy_info() | undefined, cowboy:opts(),
|
||||||
{inet:ip_address(), inet:port_number()}, {inet:ip_address(), inet:port_number()},
|
{inet:ip_address(), inet:port_number()}, {inet:ip_address(), inet:port_number()},
|
||||||
binary() | undefined, binary(), map() | undefined, cowboy_req:req()) -> ok.
|
binary() | undefined, binary(), map() | undefined, cowboy_req:req()) -> ok.
|
||||||
init(Parent, Ref, Socket, Transport, ProxyHeader, Opts, Peer, Sock, Cert, Buffer,
|
init(Parent, Ref, Socket, Transport, ProxyHeader, Opts, Peer, Sock, Cert, Buffer,
|
||||||
|
|
|
@ -106,6 +106,9 @@
|
||||||
}.
|
}.
|
||||||
-export_type([metrics/0]).
|
-export_type([metrics/0]).
|
||||||
|
|
||||||
|
-type metrics_callback() :: fun((metrics()) -> any()).
|
||||||
|
-export_type([metrics_callback/0]).
|
||||||
|
|
||||||
-record(state, {
|
-record(state, {
|
||||||
next :: any(),
|
next :: any(),
|
||||||
callback :: fun((metrics()) -> any()),
|
callback :: fun((metrics()) -> any()),
|
||||||
|
|
|
@ -121,32 +121,45 @@
|
||||||
}.
|
}.
|
||||||
-export_type([push_opts/0]).
|
-export_type([push_opts/0]).
|
||||||
|
|
||||||
-type req() :: map(). %% @todo #{
|
-type req() :: #{
|
||||||
% ref := ranch:ref(),
|
%% Public interface.
|
||||||
% pid := pid(),
|
method := binary(),
|
||||||
% streamid := cowboy_stream:streamid(),
|
version := cowboy:http_version() | atom(),
|
||||||
% peer := {inet:ip_address(), inet:port_number()},
|
scheme := binary(),
|
||||||
% proxy_header => ...
|
host := binary(),
|
||||||
%
|
port := inet:port_number(),
|
||||||
% method := binary(), %% case sensitive
|
path := binary(),
|
||||||
% version := cowboy:http_version() | atom(),
|
qs := binary(),
|
||||||
% scheme := binary(), %% <<"http">> or <<"https">>
|
headers := cowboy:http_headers(),
|
||||||
% host := binary(), %% lowercase; case insensitive
|
peer := {inet:ip_address(), inet:port_number()},
|
||||||
% port := inet:port_number(),
|
sock := {inet:ip_address(), inet:port_number()},
|
||||||
% path := binary(), %% case sensitive
|
cert := binary() | undefined,
|
||||||
% qs := binary(), %% case sensitive
|
|
||||||
% headers := cowboy:http_headers(),
|
%% Private interface.
|
||||||
%
|
ref := ranch:ref(),
|
||||||
% host_info => cowboy_router:tokens(),
|
pid := pid(),
|
||||||
% path_info => cowboy_router:tokens(),
|
streamid := cowboy_stream:streamid(),
|
||||||
% bindings => cowboy_router:bindings(),
|
|
||||||
%
|
host_info => cowboy_router:tokens(),
|
||||||
% has_body := boolean(),
|
path_info => cowboy_router:tokens(),
|
||||||
% has_read_body => true,
|
bindings => cowboy_router:bindings(),
|
||||||
% body_length := undefined | non_neg_integer()
|
|
||||||
%
|
has_body := boolean(),
|
||||||
%% @todo resp_*
|
body_length := non_neg_integer() | undefined,
|
||||||
%}.
|
has_read_body => true,
|
||||||
|
multipart => {binary(), binary()} | done,
|
||||||
|
|
||||||
|
has_sent_resp => headers | true,
|
||||||
|
resp_cookies => #{iodata() => iodata()},
|
||||||
|
resp_headers => #{binary() => iodata()},
|
||||||
|
resp_body => resp_body(),
|
||||||
|
|
||||||
|
proxy_header => ranch_proxy_header:proxy_info(),
|
||||||
|
media_type => {binary(), binary(), [{binary(), binary()}]},
|
||||||
|
language => binary() | undefined,
|
||||||
|
charset => binary() | undefined,
|
||||||
|
websocket_version => 7 | 8 | 13
|
||||||
|
}.
|
||||||
-export_type([req/0]).
|
-export_type([req/0]).
|
||||||
|
|
||||||
%% Request.
|
%% Request.
|
||||||
|
|
|
@ -42,6 +42,9 @@
|
||||||
].
|
].
|
||||||
-export_type([tracer_match_specs/0]).
|
-export_type([tracer_match_specs/0]).
|
||||||
|
|
||||||
|
-type tracer_callback() :: fun((init | terminate | tuple(), any()) -> any()).
|
||||||
|
-export_type([tracer_callback/0]).
|
||||||
|
|
||||||
-spec init(cowboy_stream:streamid(), cowboy_req:req(), cowboy:opts())
|
-spec init(cowboy_stream:streamid(), cowboy_req:req(), cowboy:opts())
|
||||||
-> {cowboy_stream:commands(), any()}.
|
-> {cowboy_stream:commands(), any()}.
|
||||||
init(StreamID, Req, Opts) ->
|
init(StreamID, Req, Opts) ->
|
||||||
|
|
|
@ -52,12 +52,12 @@ init_per_group(Name = https, Config) ->
|
||||||
init_per_group(Name = http_compress, Config) ->
|
init_per_group(Name = http_compress, Config) ->
|
||||||
cowboy_test:init_http(Name, #{
|
cowboy_test:init_http(Name, #{
|
||||||
env => #{dispatch => init_dispatch(Config)},
|
env => #{dispatch => init_dispatch(Config)},
|
||||||
compress => true
|
stream_handlers => [cowboy_compress_h, cowboy_stream_h]
|
||||||
}, Config);
|
}, Config);
|
||||||
init_per_group(Name = https_compress, Config) ->
|
init_per_group(Name = https_compress, Config) ->
|
||||||
cowboy_test:init_https(Name, #{
|
cowboy_test:init_https(Name, #{
|
||||||
env => #{dispatch => init_dispatch(Config)},
|
env => #{dispatch => init_dispatch(Config)},
|
||||||
compress => true
|
stream_handlers => [cowboy_compress_h, cowboy_stream_h]
|
||||||
}, Config).
|
}, Config).
|
||||||
|
|
||||||
end_per_group(Name, _) ->
|
end_per_group(Name, _) ->
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue