aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_tls.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_tls.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_tls.erl')
-rw-r--r--src/cowboy_tls.erl17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/cowboy_tls.erl b/src/cowboy_tls.erl
index 316fc32..864a613 100644
--- a/src/cowboy_tls.erl
+++ b/src/cowboy_tls.erl
@@ -26,17 +26,24 @@ start_link(Ref, Socket, Transport, Opts) ->
-spec connection_process(pid(), ranch:ref(), ssl:sslsocket(), module(), cowboy:opts()) -> ok.
connection_process(Parent, Ref, Socket, Transport, Opts) ->
- ok = ranch:accept_ack(Ref),
+ 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),
case ssl:negotiated_protocol(Socket) of
{ok, <<"h2">>} ->
- init(Parent, Ref, Socket, Transport, Opts, cowboy_http2);
+ init(Parent, Ref, Socket, Transport, ProxyInfo, Opts, cowboy_http2);
_ -> %% http/1.1 or no protocol negotiated.
- init(Parent, Ref, Socket, Transport, Opts, cowboy_http)
+ init(Parent, Ref, Socket, Transport, ProxyInfo, Opts, cowboy_http)
end.
-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).