diff options
author | Loïc Hoguin <[email protected]> | 2018-10-23 12:10:53 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2018-10-23 12:10:53 +0200 |
commit | d2720842a63dc7bc6ac01d9e2866bfa78cb39aa5 (patch) | |
tree | be72af8e3dc7f40eff2302b739541feb61ce69d2 /test/proxy_protocol_ssl.erl | |
parent | 8652000c0c40feee8f664b58ccb5cdfa60441a5f (diff) | |
download | ranch-d2720842a63dc7bc6ac01d9e2866bfa78cb39aa5.tar.gz ranch-d2720842a63dc7bc6ac01d9e2866bfa78cb39aa5.tar.bz2 ranch-d2720842a63dc7bc6ac01d9e2866bfa78cb39aa5.zip |
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.
Diffstat (limited to 'test/proxy_protocol_ssl.erl')
-rw-r--r-- | test/proxy_protocol_ssl.erl | 27 |
1 files changed, 0 insertions, 27 deletions
diff --git a/test/proxy_protocol_ssl.erl b/test/proxy_protocol_ssl.erl deleted file mode 100644 index d850800..0000000 --- a/test/proxy_protocol_ssl.erl +++ /dev/null @@ -1,27 +0,0 @@ --module(proxy_protocol_ssl). --behaviour(ranch_protocol). - --export([start_link/4]). --export([init/3]). - -start_link(Ref, _Socket, Transport, Opts) -> - Pid = spawn_link(?MODULE, init, [Ref, Transport, Opts]), - {ok, Pid}. - -init(Ref, Transport, _Opts = []) -> - {ok, Socket} = ranch:handshake(Ref), - {ok, ProxyInfo} = Transport:recv_proxy_header(Socket, 1000), - Pid = ct_helper:get_remote_pid_tcp(Socket), - Pid ! {?MODULE, ProxyInfo}, - Opts = ct_helper:get_certs_from_ets(), - {ok, SslSocket} = ranch_ssl:handshake(Socket, Opts, 1000), - loop(SslSocket, ranch_ssl). - -loop(Socket, Transport) -> - case Transport:recv(Socket, 0, 5000) of - {ok, Data} -> - _ = Transport:send(Socket, Data), - loop(Socket, Transport); - _ -> - ok = Transport:close(Socket) - end. |