mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 12:20:24 +00:00
Add test to ensure max_frame_size works for decompressed data
This commit is contained in:
parent
c35c754f5a
commit
091d1e6e67
2 changed files with 20 additions and 1 deletions
|
@ -203,6 +203,25 @@ do_ws_version(Socket) ->
|
||||||
{error, closed} = gen_tcp:recv(Socket, 0, 6000),
|
{error, closed} = gen_tcp:recv(Socket, 0, 6000),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
ws_deflate_max_frame_size_close(Config) ->
|
||||||
|
doc("Server closes connection when decompressed frame size exceeds max_frame_size option"),
|
||||||
|
%% max_frame_size is set to 8 bytes in ws_max_frame_size.
|
||||||
|
{ok, Socket, Headers} = do_handshake("/ws_max_frame_size",
|
||||||
|
"Sec-WebSocket-Extensions: permessage-deflate\r\n", Config),
|
||||||
|
{_, "permessage-deflate"} = lists:keyfind("sec-websocket-extensions", 1, Headers),
|
||||||
|
Mask = 16#11223344,
|
||||||
|
Z = zlib:open(),
|
||||||
|
zlib:deflateInit(Z, best_compression, deflated, -15, 8, default),
|
||||||
|
CompressedData0 = iolist_to_binary(zlib:deflate(Z, <<0:800>>, sync)),
|
||||||
|
CompressedData = binary:part(CompressedData0, 0, byte_size(CompressedData0) - 4),
|
||||||
|
MaskedData = do_mask(CompressedData, Mask, <<>>),
|
||||||
|
Len = byte_size(MaskedData),
|
||||||
|
true = Len < 8,
|
||||||
|
ok = gen_tcp:send(Socket, << 1:1, 1:1, 0:2, 1:4, 1:1, Len:7, Mask:32, MaskedData/binary >>),
|
||||||
|
{ok, << 1:1, 0:3, 8:4, 0:1, 2:7, 1009:16 >>} = gen_tcp:recv(Socket, 0, 6000),
|
||||||
|
{error, closed} = gen_tcp:recv(Socket, 0, 6000),
|
||||||
|
ok.
|
||||||
|
|
||||||
ws_deflate_opts_client_context_takeover(Config) ->
|
ws_deflate_opts_client_context_takeover(Config) ->
|
||||||
doc("Handler is configured with client context takeover enabled."),
|
doc("Handler is configured with client context takeover enabled."),
|
||||||
{ok, _, Headers1} = do_handshake("/ws_deflate_opts?client_context_takeover",
|
{ok, _, Headers1} = do_handshake("/ws_deflate_opts?client_context_takeover",
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
-export([websocket_info/2]).
|
-export([websocket_info/2]).
|
||||||
|
|
||||||
init(Req, State) ->
|
init(Req, State) ->
|
||||||
{cowboy_websocket, Req, State, #{max_frame_size => 8}}.
|
{cowboy_websocket, Req, State, #{max_frame_size => 8, compress => true}}.
|
||||||
|
|
||||||
websocket_handle({text, Data}, State) ->
|
websocket_handle({text, Data}, State) ->
|
||||||
{[{text, Data}], State};
|
{[{text, Data}], State};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue