aboutsummaryrefslogtreecommitdiffstats
path: root/test/websocket_handler_init_shutdown.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2011-10-10 09:09:15 +0200
committerLoïc Hoguin <[email protected]>2011-10-10 09:09:15 +0200
commit25ae2028d6a9ce516b01f0ec126abeab00eb329d (patch)
treedc9b58ebc4ffda954c20a8320a6525e0afda61bf /test/websocket_handler_init_shutdown.erl
parent7774e64923edd070c5371b2f613f8c60c1877f9c (diff)
downloadcowboy-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.erl30
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).