diff options
author | juhlig <[email protected]> | 2019-09-17 17:55:25 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2019-10-14 12:38:29 +0200 |
commit | d44e7a16f7d2823cc658e39b5d953ba0850e47ba (patch) | |
tree | 72ddf6100e12fa7424067262ee31b1f99ce05fff /test/handshake_protocol.erl | |
parent | 1db8290685e9cff3dfafde62de6148246075990a (diff) | |
download | ranch-d44e7a16f7d2823cc658e39b5d953ba0850e47ba.tar.gz ranch-d44e7a16f7d2823cc658e39b5d953ba0850e47ba.tar.bz2 ranch-d44e7a16f7d2823cc658e39b5d953ba0850e47ba.zip |
Enable multiple steps handshake
Also fix some Protocol:start_link/4 into start_link/3
left over in the documentation.
Diffstat (limited to 'test/handshake_protocol.erl')
-rw-r--r-- | test/handshake_protocol.erl | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/test/handshake_protocol.erl b/test/handshake_protocol.erl new file mode 100644 index 0000000..cedbe2d --- /dev/null +++ b/test/handshake_protocol.erl @@ -0,0 +1,32 @@ +-module(handshake_protocol). +-behaviour(ranch_protocol). + +-export([start_link/3]). +-export([init/3]). + +start_link(Ref, Transport, Opts) -> + Pid = spawn_link(?MODULE, init, [Ref, Transport, Opts]), + {ok, Pid}. + +init(Ref, Transport, Opts) -> + SniHost = case ranch:handshake(Ref) of + %% Due to a bug in ssl (https://bugs.erlang.org/browse/ERL-951, + %% fixed in OTP 22.0.3) the value for sni may be {sni, Hostname} + %% instead of Hostname. + {continue, #{sni := {sni, Hostname}}} -> + Hostname; + {continue, #{sni := Hostname}} -> + Hostname + end, + SniHostOpts = maps:get(SniHost, Opts), + {ok, Socket} = ranch:handshake_continue(Ref, SniHostOpts), + loop(Socket, Transport). + +loop(Socket, Transport) -> + case Transport:recv(Socket, 0, 5000) of + {ok, Data} -> + Transport:send(Socket, Data), + loop(Socket, Transport); + _ -> + ok = Transport:close(Socket) + end. |