aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_clear.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/cowboy_clear.erl')
-rw-r--r--src/cowboy_clear.erl25
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).