From d2720842a63dc7bc6ac01d9e2866bfa78cb39aa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Tue, 23 Oct 2018 12:10:53 +0200 Subject: Add ranch:recv_proxy_header/2 This is the function that should be called regardless of TCP or TLS being used. The proper usage for this function is: {ok, ProxyInfo} = ranch:recv_proxy_header(Ref, Timeout), {ok, Socket} = ranch:handshake(Ref), ... Ranch takes care of everything else under the hood. Transports now need to have a Transport:recv_proxy_header/2 function. For ranch_ssl the function gets the port from the sslsocket() record and then calls ranch_tcp:recv_proxy_header/2 with it. This means that two undocumented features are currently used for this, but the interface is really nice so that's a sacrifice worth doing. Also worth noting is that OTP 22 should have an alternative for gen_tcp:unrecv/2 so the only real issue is about the sslsocket() record at the moment. --- test/proxy_protocol.erl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'test/proxy_protocol.erl') diff --git a/test/proxy_protocol.erl b/test/proxy_protocol.erl index 6a161c7..9c679e3 100644 --- a/test/proxy_protocol.erl +++ b/test/proxy_protocol.erl @@ -9,9 +9,12 @@ start_link(Ref, _Socket, Transport, Opts) -> {ok, Pid}. init(Ref, Transport, _Opts = []) -> + {ok, ProxyInfo} = ranch:recv_proxy_header(Ref, 1000), {ok, Socket} = ranch:handshake(Ref), - {ok, ProxyInfo} = Transport:recv_proxy_header(Socket, 1000), - Pid = ct_helper:get_remote_pid_tcp(Socket), + Pid = case Transport of + ranch_tcp -> ct_helper:get_remote_pid_tcp(Socket); + ranch_ssl -> ct_helper:get_remote_pid_tls(Socket) + end, Pid ! {?MODULE, ProxyInfo}, loop(Socket, Transport). -- cgit v1.2.3