aboutsummaryrefslogtreecommitdiffstats
path: root/src/ranch_tcp.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2018-10-23 12:10:53 +0200
committerLoïc Hoguin <[email protected]>2018-10-23 12:10:53 +0200
commitd2720842a63dc7bc6ac01d9e2866bfa78cb39aa5 (patch)
treebe72af8e3dc7f40eff2302b739541feb61ce69d2 /src/ranch_tcp.erl
parent8652000c0c40feee8f664b58ccb5cdfa60441a5f (diff)
downloadranch-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 'src/ranch_tcp.erl')
-rw-r--r--src/ranch_tcp.erl4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/ranch_tcp.erl b/src/ranch_tcp.erl
index ba77308..b7ece5b 100644
--- a/src/ranch_tcp.erl
+++ b/src/ranch_tcp.erl
@@ -133,7 +133,9 @@ recv(Socket, Length, Timeout) ->
gen_tcp:recv(Socket, Length, Timeout).
-spec recv_proxy_header(inet:socket(), timeout())
- -> {ok, any()} | {error, closed | atom()} | {error, protocol_error, atom()}.
+ -> {ok, ranch_proxy_header:proxy_info()}
+ | {error, closed | atom()}
+ | {error, protocol_error, atom()}.
recv_proxy_header(Socket, Timeout) ->
case recv(Socket, 0, Timeout) of
{ok, Data} ->