From 122faedc25f1926a3b238fe47a75a781411065e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Tue, 30 Oct 2018 23:30:05 +0100 Subject: Initial support for the PROXY protocol header Depend on Ranch master for now since it isn't in any release yet. --- src/cowboy_tls.erl | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/cowboy_tls.erl') 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). -- cgit v1.2.3