ws_deflate_opts_h.erl 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. %% This module enables compression and returns deflate
  2. %% options depending on the query string.
  3. -module(ws_deflate_opts_h).
  4. -behavior(cowboy_websocket).
  5. -export([init/2]).
  6. -export([websocket_handle/2]).
  7. -export([websocket_info/2]).
  8. init(Req=#{qs := Qs}, State) ->
  9. {Name, Value} = case Qs of
  10. <<"server_context_takeover">> -> {server_context_takeover, takeover};
  11. <<"server_no_context_takeover">> -> {server_context_takeover, no_takeover};
  12. <<"client_context_takeover">> -> {client_context_takeover, takeover};
  13. <<"client_no_context_takeover">> -> {client_context_takeover, no_takeover};
  14. <<"server_max_window_bits">> -> {server_max_window_bits, 9};
  15. <<"client_max_window_bits">> -> {client_max_window_bits, 9};
  16. <<"level">> -> {level, best_speed};
  17. <<"mem_level">> -> {mem_level, 1};
  18. <<"strategy">> -> {strategy, rle}
  19. end,
  20. {cowboy_websocket, Req, State, #{
  21. compress => true,
  22. deflate_opts => #{Name => Value}
  23. }}.
  24. websocket_handle({text, Data}, State) ->
  25. {[{text, Data}], State};
  26. websocket_handle({binary, Data}, State) ->
  27. {[{binary, Data}], State};
  28. websocket_handle(_, State) ->
  29. {[], State}.
  30. websocket_info(_, State) ->
  31. {[], State}.