diff options
author | Loïc Hoguin <[email protected]> | 2018-10-30 23:30:05 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2018-10-30 23:30:54 +0100 |
commit | 122faedc25f1926a3b238fe47a75a781411065e5 (patch) | |
tree | be66aeb9ce22f28caa235f79d0057f8a181576e6 /src/cowboy_tls.erl | |
parent | a002df4560367e101ebc562a15571e74c92509e8 (diff) | |
download | cowboy-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.erl | 17 |
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). |