diff options
author | Loïc Hoguin <[email protected]> | 2011-10-10 09:09:15 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2011-10-10 09:09:15 +0200 |
commit | 25ae2028d6a9ce516b01f0ec126abeab00eb329d (patch) | |
tree | dc9b58ebc4ffda954c20a8320a6525e0afda61bf /test/websocket_handler_init_shutdown.erl | |
parent | 7774e64923edd070c5371b2f613f8c60c1877f9c (diff) | |
download | cowboy-25ae2028d6a9ce516b01f0ec126abeab00eb329d.tar.gz cowboy-25ae2028d6a9ce516b01f0ec126abeab00eb329d.tar.bz2 cowboy-25ae2028d6a9ce516b01f0ec126abeab00eb329d.zip |
Add {shutdown, Req} to websocket_init/3 to fail a websocket upgrade
This change allows application developers to refuse websocket upgrades
by returning {shutdown, Req}. The application can also send a reply
with a custom error before returning from websocket_init/3, otherwise
an error 400 is sent.
Note that right now Cowboy closes the connection immediately. Also note
that neither terminate/3 nor websocket_terminate/3 will be called when
the connection is shutdown by websocket_init/3.
Diffstat (limited to 'test/websocket_handler_init_shutdown.erl')
-rw-r--r-- | test/websocket_handler_init_shutdown.erl | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/test/websocket_handler_init_shutdown.erl b/test/websocket_handler_init_shutdown.erl new file mode 100644 index 0000000..ad76336 --- /dev/null +++ b/test/websocket_handler_init_shutdown.erl @@ -0,0 +1,30 @@ +%% Feel free to use, reuse and abuse the code in this file. + +-module(websocket_handler_init_shutdown). +-behaviour(cowboy_http_handler). +-behaviour(cowboy_http_websocket_handler). +-export([init/3, handle/2, terminate/2]). +-export([websocket_init/3, websocket_handle/3, + websocket_info/3, websocket_terminate/3]). + +init(_Any, _Req, _Opts) -> + {upgrade, protocol, cowboy_http_websocket}. + +handle(_Req, _State) -> + exit(badarg). + +terminate(_Req, _State) -> + exit(badarg). + +websocket_init(_TransportName, Req, _Opts) -> + Req2 = cowboy_http_req:reply(403, [], [], Req), + {shutdown, Req2}. + +websocket_handle(_Frame, _Req, _State) -> + exit(badarg). + +websocket_info(_Info, _Req, _State) -> + exit(badarg). + +websocket_terminate(_Reason, _Req, _State) -> + exit(badarg). |