diff options
author | Viktor Söderqvist <[email protected]> | 2022-11-23 11:42:00 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2022-12-05 17:31:33 +0100 |
commit | f9b886e52493740f297a7091387f2e492d8f50f3 (patch) | |
tree | 9f53f99cb07dd42347a2eac7515ce2e2874ce4b9 /test/handlers | |
parent | 172800967c2d53251d7cb1015e3c957c5b065bb1 (diff) | |
download | gun-f9b886e52493740f297a7091387f2e492d8f50f3.tar.gz gun-f9b886e52493740f297a7091387f2e492d8f50f3.tar.bz2 gun-f9b886e52493740f297a7091387f2e492d8f50f3.zip |
Add tests for ws subprotocol negotiation
Diffstat (limited to 'test/handlers')
-rw-r--r-- | test/handlers/ws_subprotocol_h.erl | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/test/handlers/ws_subprotocol_h.erl b/test/handlers/ws_subprotocol_h.erl new file mode 100644 index 0000000..509d74d --- /dev/null +++ b/test/handlers/ws_subprotocol_h.erl @@ -0,0 +1,31 @@ +%% Feel free to use, reuse and abuse the code in this file. + +-module(ws_subprotocol_h). + +-export([init/2]). +-export([websocket_handle/2]). +-export([websocket_info/2]). + +init(Req, State) -> + Protos = cowboy_req:parse_header(<<"sec-websocket-protocol">>, Req), + init_protos(Req, State, Protos). + +init_protos(Req, State, undefined) -> + {ok, cowboy_req:reply(400, #{}, <<"undefined">>, Req), State}; +init_protos(Req, State, []) -> + {ok, cowboy_req:reply(400, #{}, <<"nomatch">>, Req), State}; +init_protos(Req0, State, [<<"echo">> | _]) -> + Req = cowboy_req:set_resp_header(<<"sec-websocket-protocol">>, <<"echo">>, Req0), + {cowboy_websocket, Req, State}; +init_protos(Req, State, [_ | Protos]) -> + init_protos(Req, State, Protos). + +websocket_handle({text, Data}, State) -> + {[{text, Data}], State}; +websocket_handle({binary, Data}, State) -> + {[{binary, Data}], State}; +websocket_handle(_Frame, State) -> + {[], State}. + +websocket_info(_Info, State) -> + {[], State}. |