Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion doc/src/manual/gun.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -573,7 +573,7 @@ detail.
----
ws_opts() :: #{
closing_timeout => timeout(),
compress => boolean(),
compress => boolean() | compat,
default_protocol => module(),
flow => pos_integer(),
invalid_request_headers => raise | ignore,
Expand All @@ -599,6 +599,10 @@ compress (false)::
Whether to enable permessage-deflate compression. This does
not guarantee that compression will be used as it is the
server that ultimately decides. Defaults to false.
+
The value `compat` will enable compression without sending
any parameter. It should help connecting to servers that
reject parameters that Gun sends by default.

default_protocol (gun_ws_h)::

Expand Down Expand Up @@ -645,6 +649,7 @@ By default no user option is defined.

== Changelog

* *2.5*: Websocket `compress` option value `compat` was added.
* *2.4*: The `max_header_block_size` and `max_trailer_block_size`
HTTP/1.1 options were added.
* *2.4*: The `invalid_request_headers` request option was added
Expand Down
2 changes: 1 addition & 1 deletion doc/src/manual/gun.ws_upgrade.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ end.
[source,erlang]
----
StreamRef = gun:ws_upgrade(ConnPid, "/ws", [], #{
compress => false
compress => true
}).
----

Expand Down
2 changes: 1 addition & 1 deletion src/gun.erl
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,7 @@

-type ws_opts() :: #{
closing_timeout => timeout(),
compress => boolean(),
compress => boolean() | compat,
default_protocol => module(),
flow => pos_integer(),
invalid_request_headers => raise | ignore,
Expand Down
14 changes: 9 additions & 5 deletions src/gun_http.erl
Original file line number Diff line number Diff line change
Expand Up @@ -1030,11 +1030,15 @@ ws_upgrade(State=#http_state{version='HTTP/1.0'},
ws_upgrade(State=#http_state{out=head}, StreamRef, ReplyTo,
Host, Port, Path, Headers0, WsOpts, CookieStore0, EvHandler, EvHandlerState0) ->
{Headers1, GunExtensions} = case maps:get(compress, WsOpts, false) of
true -> {[{<<"sec-websocket-extensions">>,
<<"permessage-deflate; client_max_window_bits; server_max_window_bits=15">>}
|Headers0],
[<<"permessage-deflate">>]};
false -> {Headers0, []}
true ->
{[{<<"sec-websocket-extensions">>,
<<"permessage-deflate; client_max_window_bits">>}
|Headers0], [<<"permessage-deflate">>]};
compat ->
{[{<<"sec-websocket-extensions">>, <<"permessage-deflate">>}
|Headers0], [<<"permessage-deflate">>]};
false ->
{Headers0, []}
end,
Headers2 = case maps:get(protocols, WsOpts, []) of
[] -> Headers1;
Expand Down
5 changes: 4 additions & 1 deletion src/gun_http2.erl
Original file line number Diff line number Diff line change
Expand Up @@ -1591,7 +1591,10 @@ ws_upgrade1(State=#http2_state{socket=Socket, transport=Transport,
{Headers2, GunExtensions} = case maps:get(compress, WsOpts, false) of
true ->
{[{<<"sec-websocket-extensions">>,
<<"permessage-deflate; client_max_window_bits; server_max_window_bits=15">>}
<<"permessage-deflate; client_max_window_bits">>}
|Headers1], [<<"permessage-deflate">>]};
compat ->
{[{<<"sec-websocket-extensions">>, <<"permessage-deflate">>}
|Headers1], [<<"permessage-deflate">>]};
false ->
{Headers1, []}
Expand Down
2 changes: 2 additions & 0 deletions src/gun_ws.erl
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ do_check_options([{closing_timeout, T}|Opts]) when is_integer(T), T > 0 ->
do_check_options(Opts);
do_check_options([{compress, B}|Opts]) when is_boolean(B) ->
do_check_options(Opts);
do_check_options([{compress, compat}|Opts]) ->
do_check_options(Opts);
do_check_options([{default_protocol, M}|Opts]) when is_atom(M) ->
do_check_options(Opts);
do_check_options([{flow, InitialFlow}|Opts]) when is_integer(InitialFlow), InitialFlow > 0 ->
Expand Down
Loading