aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_websocket.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2019-10-05 17:32:50 +0200
committerLoïc Hoguin <[email protected]>2019-10-05 17:32:50 +0200
commit3e23aff1d1b6e4e2f736edd7a8f5465b02c4c6db (patch)
treeaa15ba2ab858e52be86250ddb7637466252e3bda /src/cowboy_websocket.erl
parentc50d6aa09c9028dca3365516d30f1242cfd43306 (diff)
downloadcowboy-3e23aff1d1b6e4e2f736edd7a8f5465b02c4c6db.tar.gz
cowboy-3e23aff1d1b6e4e2f736edd7a8f5465b02c4c6db.tar.bz2
cowboy-3e23aff1d1b6e4e2f736edd7a8f5465b02c4c6db.zip
Add Websocket option validate_utf8
This allows disabling the UTF-8 validation check for text and close frames.
Diffstat (limited to 'src/cowboy_websocket.erl')
-rw-r--r--src/cowboy_websocket.erl11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/cowboy_websocket.erl b/src/cowboy_websocket.erl
index 5cc061a..ad0dad5 100644
--- a/src/cowboy_websocket.erl
+++ b/src/cowboy_websocket.erl
@@ -73,7 +73,8 @@
deflate_opts => cow_ws:deflate_opts(),
idle_timeout => timeout(),
max_frame_size => non_neg_integer() | infinity,
- req_filter => fun((cowboy_req:req()) -> map())
+ req_filter => fun((cowboy_req:req()) -> map()),
+ validate_utf8 => boolean()
}.
-export_type([opts/0]).
@@ -91,7 +92,7 @@
hibernate = false :: boolean(),
frag_state = undefined :: cow_ws:frag_state(),
frag_buffer = <<>> :: binary(),
- utf8_state = 0 :: cow_ws:utf8_state(),
+ utf8_state :: cow_ws:utf8_state(),
deflate = true :: boolean(),
extensions = #{} :: map(),
req = #{} :: map()
@@ -133,7 +134,11 @@ upgrade(Req0=#{version := Version}, Env, Handler, HandlerState, Opts) ->
undefined -> maps:with([method, version, scheme, host, port, path, qs, peer], Req0);
FilterFun -> FilterFun(Req0)
end,
- State0 = #state{opts=Opts, handler=Handler, req=FilteredReq},
+ Utf8State = case maps:get(validate_utf8, Opts, true) of
+ true -> 0;
+ false -> undefined
+ end,
+ State0 = #state{opts=Opts, handler=Handler, utf8_state=Utf8State, req=FilteredReq},
try websocket_upgrade(State0, Req0) of
{ok, State, Req} ->
websocket_handshake(State, Req, HandlerState, Env);