aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_clear.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2018-10-30 23:30:05 +0100
committerLoïc Hoguin <[email protected]>2018-10-30 23:30:54 +0100
commit122faedc25f1926a3b238fe47a75a781411065e5 (patch)
treebe66aeb9ce22f28caa235f79d0057f8a181576e6 /src/cowboy_clear.erl
parenta002df4560367e101ebc562a15571e74c92509e8 (diff)
downloadcowboy-122faedc25f1926a3b238fe47a75a781411065e5.tar.gz
cowboy-122faedc25f1926a3b238fe47a75a781411065e5.tar.bz2
cowboy-122faedc25f1926a3b238fe47a75a781411065e5.zip
Initial support for the PROXY protocol header
Depend on Ranch master for now since it isn't in any release yet.
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).