mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-16 05:00:24 +00:00

It is completely removed for connection processes, because assuming Cowboy is written properly this should bring us nothing anymore in 2.0. It is reworked for request processes, there we want to always propagate the stacktrace (including for exits) because we will print a report to help with debugging and proc_lib doesn't propagate it for exits. At the same time the initial callback for connection and request processes has been changed to connection_process and request_process, which should help with identifying processes when inspecting.
42 lines
1.8 KiB
Erlang
42 lines
1.8 KiB
Erlang
%% Copyright (c) 2015-2017, Loïc Hoguin <essen@ninenines.eu>
|
|
%%
|
|
%% Permission to use, copy, modify, and/or distribute this software for any
|
|
%% purpose with or without fee is hereby granted, provided that the above
|
|
%% copyright notice and this permission notice appear in all copies.
|
|
%%
|
|
%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
-module(cowboy_tls).
|
|
-behavior(ranch_protocol).
|
|
|
|
-export([start_link/4]).
|
|
-export([connection_process/5]).
|
|
|
|
-spec start_link(ranch:ref(), ssl:sslsocket(), module(), cowboy:opts()) -> {ok, pid()}.
|
|
start_link(Ref, Socket, Transport, Opts) ->
|
|
Pid = proc_lib:spawn_link(?MODULE, connection_process,
|
|
[self(), Ref, Socket, Transport, Opts]),
|
|
{ok, Pid}.
|
|
|
|
-spec connection_process(pid(), ranch:ref(), ssl:sslsocket(), module(), cowboy:opts()) -> ok.
|
|
connection_process(Parent, Ref, Socket, Transport, Opts) ->
|
|
ok = ranch:accept_ack(Ref),
|
|
case ssl:negotiated_protocol(Socket) of
|
|
{ok, <<"h2">>} ->
|
|
init(Parent, Ref, Socket, Transport, Opts, cowboy_http2);
|
|
_ -> %% http/1.1 or no protocol negotiated.
|
|
init(Parent, Ref, Socket, Transport, Opts, cowboy_http)
|
|
end.
|
|
|
|
init(Parent, Ref, Socket, Transport, Opts, Protocol) ->
|
|
_ = case maps:get(connection_type, Opts, supervisor) of
|
|
worker -> ok;
|
|
supervisor -> process_flag(trap_exit, true)
|
|
end,
|
|
Protocol:init(Parent, Ref, Socket, Transport, Opts).
|