From db7f61c0c27feb26fdc156cd6968d88a38ec0593 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Tue, 13 Nov 2018 15:31:40 +0100 Subject: Support uncompressed Websocket frames when deflate is enabled --- src/cow_ws.erl | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/cow_ws.erl b/src/cow_ws.erl index 1300a65..d24dc12 100644 --- a/src/cow_ws.erl +++ b/src/cow_ws.erl @@ -645,11 +645,13 @@ frame({pong, Payload}, _) -> true = Len =< 125, [<< 1:1, 0:3, 10:4, 0:1, Len:7 >>, Payload]; %% Data frames, deflate-frame extension. -frame({text, Payload}, #{deflate := Deflate, deflate_takeover := TakeOver}) -> +frame({text, Payload}, #{deflate := Deflate, deflate_takeover := TakeOver}) + when Deflate =/= false -> Payload2 = deflate_frame(Payload, Deflate, TakeOver), Len = payload_length(Payload2), [<< 1:1, 1:1, 0:2, 1:4, 0:1, Len/bits >>, Payload2]; -frame({binary, Payload}, #{deflate := Deflate, deflate_takeover := TakeOver}) -> +frame({binary, Payload}, #{deflate := Deflate, deflate_takeover := TakeOver}) + when Deflate =/= false -> Payload2 = deflate_frame(Payload, Deflate, TakeOver), Len = payload_length(Payload2), [<< 1:1, 1:1, 0:2, 2:4, 0:1, Len/bits >>, Payload2]; @@ -691,12 +693,14 @@ masked_frame({pong, Payload}, _) -> MaskKeyBin = << MaskKey:32 >> = crypto:strong_rand_bytes(4), [<< 1:1, 0:3, 10:4, 1:1, Len:7 >>, MaskKeyBin, mask(iolist_to_binary(Payload), MaskKey, <<>>)]; %% Data frames, deflate-frame extension. -masked_frame({text, Payload}, #{deflate := Deflate, deflate_takeover := TakeOver}) -> +masked_frame({text, Payload}, #{deflate := Deflate, deflate_takeover := TakeOver}) + when Deflate =/= false -> MaskKeyBin = << MaskKey:32 >> = crypto:strong_rand_bytes(4), Payload2 = mask(deflate_frame(Payload, Deflate, TakeOver), MaskKey, <<>>), Len = payload_length(Payload2), [<< 1:1, 1:1, 0:2, 1:4, 1:1, Len/bits >>, MaskKeyBin, Payload2]; -masked_frame({binary, Payload}, #{deflate := Deflate, deflate_takeover := TakeOver}) -> +masked_frame({binary, Payload}, #{deflate := Deflate, deflate_takeover := TakeOver}) + when Deflate =/= false -> MaskKeyBin = << MaskKey:32 >> = crypto:strong_rand_bytes(4), Payload2 = mask(deflate_frame(Payload, Deflate, TakeOver), MaskKey, <<>>), Len = payload_length(Payload2), -- cgit v1.2.3