dispatch() = {handler, module(), roadrunner_middleware:next(), State::term()} | {router, ListenerName::atom()}
overload() = refuse | {queue, pid(), atomics:atomics_ref(), pos_integer()}
proto_opts() = #{dispatch := dispatch(), middlewares := roadrunner_middleware:middleware_list(), max_content_length := non_neg_integer(), ws_max_frame_size := non_neg_integer(), ws_max_message_size := non_neg_integer(), ws_buffer := pos_integer() | undefined, ws_hibernate_after := pos_integer() | infinity, request_timeout := non_neg_integer(), tls_handshake_timeout := pos_integer(), keep_alive_timeout := non_neg_integer(), max_keep_alive_requests := pos_integer(), max_clients := pos_integer(), client_counter := counters:counters_ref(), drain_table => ets:table(), requests_counter := atomics:atomics_ref(), rejected_counter := atomics:atomics_ref(), max_concurrent_requests := infinity | pos_integer(), overload => overload(), inflight_counter := counters:counters_ref(), throttled_counter := atomics:atomics_ref(), rate_limit := undefined | rate_limit(), rate_limited_counter := atomics:atomics_ref(), min_bytes_per_second := non_neg_integer(), body_buffering := auto | manual, listener_name => atom(), graceful_drain => boolean(), proxy_protocol => boolean(), tls_upgrade => [ssl:tls_server_option()], protocols => [http1 | http2 | http3, ...], http2_conn_window => 1..2147483647, http2_stream_window => 1..2147483647, http2_window_refill_threshold => 1..2147483647, http2_max_concurrent_streams => 1..2147483647, http2_max_header_block => 1..2147483647, http3_listeners => 1..1024, http3_max_header_block => 1..2147483647, http1_max_request_line => 1..2147483647, http1_max_header_line => 1..2147483647, http1_max_header_block => 1..2147483647, http1_max_header_count => 1..2147483647, hibernate_after => pos_integer(), rate_check_interval => pos_integer(), handler_spawn_opts => [proc_lib:start_spawn_option()], handler_start_timeout => timeout()}
rate_limit() = #{rate := pos_integer(), burst := pos_integer(), period := pos_integer(), idle_ttl := pos_integer(), sweep_interval := pos_integer(), table := ets:table()}
rate_limit_state() = {pos_integer(), pos_integer(), pos_integer(), ets:table(), atomics:atomics_ref(), inet:ip_address()} | undefined
acquire_request_slot(Max::infinity | pos_integer(), Counter::counters:counters_ref() | undefined, Overload::overload(), Token::term()) -> true | false | queued
allow_header_value(Allowed::[binary()]) -> binary()
body_framing(Req::roadrunner_req:request()) -> none | chunked | {content_length, non_neg_integer()} | {error, bad_content_length | bad_transfer_encoding}
cancel_slot_wait(X1::overload(), Token::term()) -> ok
consume_body_reader(BS::roadrunner_req:body_reader(), Mode::all | next_chunk | {length, non_neg_integer()}) -> {ok, iodata(), roadrunner_req:body_reader()} | {more, iodata(), roadrunner_req:body_reader()} | {error, term()}
drain_body(X1::roadrunner_req:request()) -> {ok, binary()} | {error, term()}
drain_check_interval_ms() -> pos_integer()
drain_oversized_body(Buffered::binary(), Socket::roadrunner_transport:socket(), MaxCL::non_neg_integer()) -> ok
expects_continue(Req::roadrunner_req:request()) -> boolean()
final_response(Protocol::h1 | h2 | h3, Handler::module(), Response::roadrunner_handler:response()) -> roadrunner_handler:response()
generate_request_id(Empty::binary()) -> {binary(), binary()}
head_response(Response::roadrunner_handler:response(), Method::binary()) -> roadrunner_handler:response()
keep_alive_decision(Req::roadrunner_req:request(), RespHeaders::roadrunner_http:headers()) -> keep_alive | close
make_body_reader(Framing::none | chunked | {content_length, non_neg_integer()}, Buffered::binary(), Recv::fun(() -> {ok, binary()} | {error, term()}), Max::non_neg_integer(), TrailerLimits::{pos_integer(), pos_integer(), pos_integer()}) -> roadrunner_req:body_reader()
make_recv(Socket::roadrunner_transport:socket(), Deadline::integer(), MinRate::non_neg_integer()) -> fun(() -> {ok, binary()} | {error, request_timeout | slow_client | drained | term()})
parse_error_status(X1::atom()) -> roadrunner_http:status()
parse_loop(Buf::binary(), RecvFun::fun(() -> {ok, binary()} | {error, term()})) -> {ok, roadrunner_req:request(), binary()} | {error, term()}
peer(Socket::roadrunner_transport:socket()) -> {inet:ip_address(), inet:port_number()} | undefined
rate_limit_check(Table::ets:table(), IP::inet:ip_address(), Rate::pos_integer(), Cap::pos_integer(), Cost::pos_integer(), NowMs::integer()) -> allow | {deny, pos_integer()}
rate_limit_evict_idle(Table::ets:table(), NowMs::integer(), IdleTtl::pos_integer()) -> non_neg_integer()
rate_ok(ElapsedMs::integer(), Total::non_neg_integer(), MinRate::non_neg_integer()) -> boolean()
read_body(Err::chunked | {content_length, non_neg_integer()} | {error, bad_content_length | bad_transfer_encoding}, Buffered::binary(), RecvFun::fun(() -> {ok, binary()} | {error, term()}), MaxCL::non_neg_integer(), TrailerLimits::{pos_integer(), pos_integer(), pos_integer()}) -> {ok, Body::iodata(), Leftover::binary()} | {error, content_length_too_large | bad_content_length | bad_transfer_encoding | term()}
refine_conn_label(ProtoOpts::proto_opts(), Peer::{inet:ip_address(), inet:port_number()} | undefined) -> ok
register_for_drain(X1::proto_opts()) -> ok
release_request_slot(Max::infinity | pos_integer(), Counter::counters:counters_ref() | undefined, Overload::overload()) -> ok
release_request_slots(Max::infinity | pos_integer(), Counter::counters:counters_ref() | undefined, N::non_neg_integer(), Overload::overload()) -> ok
release_slot(X1::proto_opts()) -> ok
resolve_handler(X1::dispatch(), Req::roadrunner_req:request()) -> {ok, module(), roadrunner_router:bindings(), roadrunner_middleware:next(), term()} | {method_not_allowed, [binary()]} | not_found
resolve_rate_limit(ProtoOpts::proto_opts(), Peer::{inet:ip_address(), inet:port_number()} | undefined) -> rate_limit_state()
response_kind(X1::roadrunner_handler:response()) -> buffered | stream | loop | sendfile | websocket
response_status(X1::roadrunner_handler:response()) -> roadrunner_http:status()
scheme(X1::roadrunner_transport:socket()) -> http | https
send_bad_request(Socket::roadrunner_transport:socket()) -> ok | {error, term()}
send_continue(Socket::roadrunner_transport:socket()) -> ok
send_internal_error(Socket::roadrunner_transport:socket()) -> ok | {error, term()}
send_method_not_allowed(Socket::roadrunner_transport:socket(), Allowed::[binary()]) -> ok | {error, term()}
send_not_found(Socket::roadrunner_transport:socket()) -> ok | {error, term()}
send_payload_too_large(Socket::roadrunner_transport:socket()) -> ok | {error, term()}
send_rate_limited(Socket::roadrunner_transport:socket(), RetryAfterSecs::pos_integer()) -> ok | {error, term()}
send_request_timeout(Socket::roadrunner_transport:socket()) -> ok | {error, term()}
send_status(Socket::roadrunner_transport:socket(), Status::roadrunner_http:status()) -> ok | {error, term()}
set_request_logger_metadata(X1::roadrunner_req:request()) -> ok
start(Socket::roadrunner_transport:socket(), ProtoOpts::proto_opts()) -> {ok, pid()}
throttled_telemetry(ListenerName::atom(), Counter::atomics:atomics_ref(), Reason::rate_limit | max_concurrent_requests) -> ok
try_acquire_request_slot(Max::infinity | pos_integer(), Counter::counters:counters_ref() | undefined) -> boolean()
try_acquire_slot(X1::proto_opts()) -> boolean()
unregister_for_drain(X1::proto_opts()) -> ok
Generated by EDoc