diff options
Diffstat (limited to 'src/cowboy_http_websocket.erl')
-rw-r--r-- | src/cowboy_http_websocket.erl | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/src/cowboy_http_websocket.erl b/src/cowboy_http_websocket.erl index fa3e50f..66187f0 100644 --- a/src/cowboy_http_websocket.erl +++ b/src/cowboy_http_websocket.erl @@ -157,7 +157,7 @@ handler_loop(State=#state{messages={OK, Closed, Error}, timeout=Timeout}, handler_terminate(State, Req, HandlerState, {error, Reason}); Message -> handler_call(State, Req, HandlerState, - SoFar, Message, fun handler_before_loop/4) + SoFar, websocket_info, Message, fun handler_before_loop/4) after Timeout -> websocket_close(State, Req, HandlerState, {normal, timeout}) end. @@ -178,7 +178,7 @@ websocket_frame(State=#state{eop=EOP}, Req, HandlerState, Data, 0) -> Pos2 = Pos - 1, << 0, Frame:Pos2/binary, 255, Rest/bits >> = Data, handler_call(State, Req, HandlerState, - Rest, {websocket, Frame}, fun websocket_data/4); + Rest, websocket_handle, Frame, fun websocket_data/4); nomatch -> %% @todo We probably should allow limiting frame length. handler_before_loop(State, Req, HandlerState, Data) @@ -186,10 +186,11 @@ websocket_frame(State=#state{eop=EOP}, Req, HandlerState, Data, 0) -> websocket_frame(State, Req, HandlerState, _Data, _FrameType) -> websocket_close(State, Req, HandlerState, {error, badframe}). --spec handler_call(#state{}, #http_req{}, any(), binary(), any(), fun()) -> ok. +-spec handler_call(#state{}, #http_req{}, any(), binary(), + atom(), any(), fun()) -> ok. handler_call(State=#state{handler=Handler, opts=Opts}, Req, HandlerState, - RemainingData, Message, NextState) -> - try Handler:websocket_handle(Message, Req, HandlerState) of + RemainingData, Callback, Message, NextState) -> + try Handler:Callback(Message, Req, HandlerState) of {ok, Req2, HandlerState2} -> NextState(State, Req2, HandlerState2, RemainingData); {ok, Req2, HandlerState2, hibernate} -> @@ -242,16 +243,19 @@ handler_terminate(#state{handler=Handler, opts=Opts}, HandlerState, Req, erlang:get_stacktrace()]) end. -%% eunit +%% Tests. -ifdef(TEST). websocket_location_test() -> - ?assertEqual(<<"ws://localhost/path">>, websocket_location(other, <<"localhost">>, 80, <<"/path">>)), - ?assertEqual(<<"ws://localhost:8080/path">>, websocket_location(other, <<"localhost">>, 8080, <<"/path">>)), - ?assertEqual(<<"wss://localhost/path">>, websocket_location(ssl, <<"localhost">>, 443, <<"/path">>)), - ?assertEqual(<<"wss://localhost:8443/path">>, websocket_location(ssl, <<"localhost">>, 8443, <<"/path">>)), - ok. + ?assertEqual(<<"ws://localhost/path">>, + websocket_location(other, <<"localhost">>, 80, <<"/path">>)), + ?assertEqual(<<"ws://localhost:8080/path">>, + websocket_location(other, <<"localhost">>, 8080, <<"/path">>)), + ?assertEqual(<<"wss://localhost/path">>, + websocket_location(ssl, <<"localhost">>, 443, <<"/path">>)), + ?assertEqual(<<"wss://localhost:8443/path">>, + websocket_location(ssl, <<"localhost">>, 8443, <<"/path">>)), + ok. -endif. - |