aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2018-11-13 15:31:40 +0100
committerLoïc Hoguin <[email protected]>2018-11-13 15:31:40 +0100
commitdb7f61c0c27feb26fdc156cd6968d88a38ec0593 (patch)
tree7f288bd6a09c9abf79835068a2d4efc4c018dfe7
parentf760f979b48e6d8991be10499d9dd7217c98060b (diff)
downloadcowlib-db7f61c0c27feb26fdc156cd6968d88a38ec0593.tar.gz
cowlib-db7f61c0c27feb26fdc156cd6968d88a38ec0593.tar.bz2
cowlib-db7f61c0c27feb26fdc156cd6968d88a38ec0593.zip
Support uncompressed Websocket frames when deflate is enabled
-rw-r--r--src/cow_ws.erl12
1 files 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),