diff options
author | Loïc Hoguin <[email protected]> | 2018-11-13 15:55:09 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2018-11-13 15:55:09 +0100 |
commit | 8d920f3db97067159fcf6ca497979f8e063986dc (patch) | |
tree | df27e618908d6c5635505e74e11440adac11f881 /test/handlers | |
parent | 8164b504534e932df24adb65c5e15ed8d8a9feea (diff) | |
download | cowboy-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.erl | 4 | ||||
-rw-r--r-- | test/handlers/ws_deflate_commands_h.erl | 24 |
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}. |