32 lines
961 B
Erlang
32 lines
961 B
Erlang
%% 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}.
|