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_header_SUITE.erl | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'test/proxy_header_SUITE.erl') diff --git a/test/proxy_header_SUITE.erl b/test/proxy_header_SUITE.erl index b2308f8..6a80635 100644 --- a/test/proxy_header_SUITE.erl +++ b/test/proxy_header_SUITE.erl @@ -209,21 +209,17 @@ recv_v2_local_header_ssl_extra_data(_) -> do_proxy_header_ssl(Name, ProxyInfo, <<"HELLO">>, <<"TCP Ranch is working!">>). do_proxy_header_ssl(Name, ProxyInfo, Data1, Data2) -> + Opts = ct_helper:get_certs_from_ets(), {ok, _} = ranch:start_listener(Name, - ranch_tcp, #{}, - proxy_protocol_ssl, []), + ranch_ssl, Opts, + proxy_protocol, []), Port = ranch:get_port(Name), {ok, Socket0} = gen_tcp:connect("localhost", Port, [binary, {active, false}, {packet, raw}]), ok = gen_tcp:send(Socket0, [ranch_proxy_header:header(ProxyInfo)]), - %% This timeout is necessary to avoid a race condition when trying - %% to obtain the pid of the test case from the protocol. The race - %% condition is due to the TLS upgrade which changes the process - %% owning the socket. - timer:sleep(100), {ok, Socket} = ssl:connect(Socket0, [], 1000), ok = ssl:send(Socket, Data1), receive - {proxy_protocol_ssl, ProxyInfo} -> + {proxy_protocol, ProxyInfo} -> ok after 2000 -> error(timeout) -- cgit v1.2.3