aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_websocket.erl
diff options
context:
space:
mode:
authorEvgeny Khramtsov <ekhramtsov@process-one.net>2019-04-23 16:21:06 +0300
committerEvgeny Khramtsov <ekhramtsov@process-one.net>2019-04-23 16:21:06 +0300
commit5faae61befb9cc85b5d58d14dc5cc270c91ebdd7 (patch)
tree4b7f2eddd98c2b1fa8055f5d2d78b321406e4116 /src/ejabberd_websocket.erl
parentImprove request_handlers validator (diff)
Move websocket options
Diffstat (limited to '')
-rw-r--r--src/ejabberd_websocket.erl24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/ejabberd_websocket.erl b/src/ejabberd_websocket.erl
index 767c3837b..7a05cd0f8 100644
--- a/src/ejabberd_websocket.erl
+++ b/src/ejabberd_websocket.erl
@@ -37,12 +37,12 @@
%%%----------------------------------------------------------------------
-module(ejabberd_websocket).
-
+-behaviour(ejabberd_config).
-protocol({rfc, 6455}).
-author('ecestari@process-one.net').
--export([check/2, socket_handoff/5]).
+-export([check/2, socket_handoff/5, opt_type/1]).
-include("logger.hrl").
@@ -409,4 +409,22 @@ websocket_close(Socket, WsHandleLoopPid, SocketMode, _CloseCode) ->
SocketMode:close(Socket).
get_origin() ->
- ejabberd_config:get_option({websocket_origin, ejabberd_config:get_myname()}, ignore). \ No newline at end of file
+ ejabberd_config:get_option(websocket_origin, ignore).
+
+opt_type(websocket_ping_interval) ->
+ fun (I) when is_integer(I), I >= 0 -> I end;
+opt_type(websocket_timeout) ->
+ fun (I) when is_integer(I), I > 0 -> I end;
+opt_type(websocket_origin) ->
+ %% Accept only values conforming to RFC6454 section 7.1
+ fun (<<"null">>) -> <<"null">>;
+ (null) -> <<"null">>;
+ (Origin) ->
+ URIs = [_|_] = lists:flatmap(
+ fun(<<>>) -> [];
+ (URI) -> [misc:try_url(URI)]
+ end, re:split(Origin, "\\s")),
+ str:join(URIs, <<" ">>)
+ end;
+opt_type(_) ->
+ [websocket_ping_interval, websocket_timeout, websocket_origin].