aboutsummaryrefslogtreecommitdiffstats
path: root/test/handlers
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2018-11-13 15:55:09 +0100
committerLoïc Hoguin <[email protected]>2018-11-13 15:55:09 +0100
commit8d920f3db97067159fcf6ca497979f8e063986dc (patch)
treedf27e618908d6c5635505e74e11440adac11f881 /test/handlers
parent8164b504534e932df24adb65c5e15ed8d8a9feea (diff)
downloadcowboy-8d920f3db97067159fcf6ca497979f8e063986dc.tar.gz
cowboy-8d920f3db97067159fcf6ca497979f8e063986dc.tar.bz2
cowboy-8d920f3db97067159fcf6ca497979f8e063986dc.zip
Add the {deflate, boolean()} Websocket command
It allows to temporarily disable Websocket compression when it was negotiated. It's ignored otherwise. This can be used as fine-grained control when some frames do not compress well.
Diffstat (limited to 'test/handlers')
-rw-r--r--test/handlers/ws_active_commands_h.erl4
-rw-r--r--test/handlers/ws_deflate_commands_h.erl24
2 files changed, 26 insertions, 2 deletions
diff --git a/test/handlers/ws_active_commands_h.erl b/test/handlers/ws_active_commands_h.erl
index 4cdb3b1..1c615e3 100644
--- a/test/handlers/ws_active_commands_h.erl
+++ b/test/handlers/ws_active_commands_h.erl
@@ -1,5 +1,5 @@
-%% This module takes commands from the x-commands header
-%% and returns them in the websocket_init/1 callback.
+%% This module starts with active mode disabled
+%% and enables it again once a timeout is triggered.
-module(ws_active_commands_h).
-behavior(cowboy_websocket).
diff --git a/test/handlers/ws_deflate_commands_h.erl b/test/handlers/ws_deflate_commands_h.erl
new file mode 100644
index 0000000..14236bc
--- /dev/null
+++ b/test/handlers/ws_deflate_commands_h.erl
@@ -0,0 +1,24 @@
+%% This module enables/disables compression
+%% every time it echoes a frame.
+
+-module(ws_deflate_commands_h).
+-behavior(cowboy_websocket).
+
+-export([init/2]).
+-export([websocket_handle/2]).
+-export([websocket_info/2]).
+
+init(Req, RunOrHibernate) ->
+ {cowboy_websocket, Req,
+ #{deflate => true, hibernate => RunOrHibernate},
+ #{compress => true}}.
+
+websocket_handle(Frame, State=#{deflate := Deflate0, hibernate := run}) ->
+ Deflate = not Deflate0,
+ {[Frame, {deflate, Deflate}], State#{deflate => Deflate}};
+websocket_handle(Frame, State=#{deflate := Deflate0, hibernate := hibernate}) ->
+ Deflate = not Deflate0,
+ {[Frame, {deflate, Deflate}], State#{deflate => Deflate}, hibernate}.
+
+websocket_info(_Info, State) ->
+ {[], State}.