diff options
Diffstat (limited to 'src/cowboy_clear.erl')
-rw-r--r-- | src/cowboy_clear.erl | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/cowboy_clear.erl b/src/cowboy_clear.erl index 522ede3..7bb1a35 100644 --- a/src/cowboy_clear.erl +++ b/src/cowboy_clear.erl @@ -16,22 +16,29 @@ -behavior(ranch_protocol). -export([start_link/4]). --export([connection_process/5]). +-export([connection_process/4]). -spec start_link(ranch:ref(), inet:socket(), module(), cowboy:opts()) -> {ok, pid()}. -start_link(Ref, Socket, Transport, Opts) -> +start_link(Ref, _Socket, Transport, Opts) -> Pid = proc_lib:spawn_link(?MODULE, connection_process, - [self(), Ref, Socket, Transport, Opts]), + [self(), Ref, Transport, Opts]), {ok, Pid}. --spec connection_process(pid(), ranch:ref(), inet:socket(), module(), cowboy:opts()) -> ok. -connection_process(Parent, Ref, Socket, Transport, Opts) -> - ok = ranch:accept_ack(Ref), - init(Parent, Ref, Socket, Transport, Opts, cowboy_http). +-spec connection_process(pid(), ranch:ref(), module(), cowboy:opts()) -> ok. +connection_process(Parent, Ref, Transport, Opts) -> + ProxyInfo = case maps:get(proxy_header, Opts, false) of + true -> + {ok, ProxyInfo0} = ranch:recv_proxy_header(Ref, 1000), + ProxyInfo0; + false -> + undefined + end, + {ok, Socket} = ranch:handshake(Ref), + init(Parent, Ref, Socket, Transport, ProxyInfo, Opts, cowboy_http). -init(Parent, Ref, Socket, Transport, Opts, Protocol) -> +init(Parent, Ref, Socket, Transport, ProxyInfo, 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). + Protocol:init(Parent, Ref, Socket, Transport, ProxyInfo, Opts). |