aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2018-04-30 11:52:00 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2018-04-30 11:52:00 +0300
commit4ea481d1dd68fdfd86201c632ed2de0717d61b14 (patch)
tree630108224190c848332b317f9d0990510afb86b2
parentUpdate mix.exs version (diff)
Add validator for 'accept_interval' listening option
-rw-r--r--src/ejabberd_c2s.erl4
-rw-r--r--src/ejabberd_http.erl2
-rw-r--r--src/ejabberd_listener.erl31
-rw-r--r--src/ejabberd_s2s_in.erl5
-rw-r--r--src/ejabberd_service.erl4
-rw-r--r--src/ejabberd_sip.erl4
-rw-r--r--src/ejabberd_stun.erl4
-rw-r--r--src/ejabberd_xmlrpc.erl5
-rw-r--r--src/mod_proxy65_stream.erl5
9 files changed, 27 insertions, 37 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index 4efdafef2..df1b9e2f9 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -1038,6 +1038,8 @@ listen_opt_type(inet) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(inet6) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(backlog) ->
fun(I) when is_integer(I), I>0 -> I end;
+listen_opt_type(accept_interval) ->
+ fun(I) when is_integer(I), I>=0 -> I end;
listen_opt_type(O) ->
StreamOpts = mod_stream_mgmt:mod_options(?MYNAME),
case lists:keyfind(O, 1, StreamOpts) of
@@ -1045,7 +1047,7 @@ listen_opt_type(O) ->
[access, shaper, certfile, ciphers, dhfile, cafile,
protocol_options, tls, tls_compression, starttls,
starttls_required, tls_verify, zlib, max_fsm_queue,
- backlog, inet, inet6];
+ backlog, inet, inet6, accept_interval];
_ ->
?ERROR_MSG("Listening option '~s' is ignored: use '~s' "
"option from mod_stream_mgmt module", [O, O]),
diff --git a/src/ejabberd_http.erl b/src/ejabberd_http.erl
index dee16927e..3f414244f 100644
--- a/src/ejabberd_http.erl
+++ b/src/ejabberd_http.erl
@@ -947,6 +947,8 @@ listen_opt_type(inet) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(inet6) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(backlog) ->
fun(I) when is_integer(I), I>0 -> I end;
+listen_opt_type(accept_interval) ->
+ fun(I) when is_integer(I), I>=0 -> I end;
listen_opt_type(_) ->
%% TODO
fun(A) -> A end.
diff --git a/src/ejabberd_listener.erl b/src/ejabberd_listener.erl
index 63842b626..68a41e33b 100644
--- a/src/ejabberd_listener.erl
+++ b/src/ejabberd_listener.erl
@@ -256,36 +256,7 @@ get_ip_tuple(IPOpt, _IPVOpt) ->
IPOpt.
accept(ListenSocket, Module, Opts) ->
- IntervalOpt =
- case proplists:get_value(accept_interval, Opts) of
- [{linear, [I1_, T1_, T2_, I2_]}] ->
- {linear, I1_, T1_, T2_, I2_};
- I_ -> I_
- end,
- Interval =
- case IntervalOpt of
- undefined ->
- 0;
- I when is_integer(I), I >= 0 ->
- I;
- {linear, I1, T1, T2, I2}
- when is_integer(I1),
- is_integer(T1),
- is_integer(T2),
- is_integer(I2),
- I1 >= 0,
- I2 >= 0,
- T2 > 0 ->
- {MSec, Sec, _USec} = os:timestamp(),
- TS = MSec * 1000000 + Sec,
- {linear, I1, TS + T1, T2, I2};
- I ->
- ?WARNING_MSG("There is a problem in the configuration: "
- "~p is a wrong accept_interval value. "
- "Using 0 as fallback",
- [I]),
- 0
- end,
+ Interval = proplists:get_value(accept_interval, Opts, 0),
accept(ListenSocket, Module, Opts, Interval).
accept(ListenSocket, Module, Opts, Interval) ->
diff --git a/src/ejabberd_s2s_in.erl b/src/ejabberd_s2s_in.erl
index a02834c78..bf4afb5b5 100644
--- a/src/ejabberd_s2s_in.erl
+++ b/src/ejabberd_s2s_in.erl
@@ -388,6 +388,9 @@ listen_opt_type(inet) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(inet6) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(backlog) ->
fun(I) when is_integer(I), I>0 -> I end;
+listen_opt_type(accept_interval) ->
+ fun(I) when is_integer(I), I>=0 -> I end;
listen_opt_type(_) ->
[shaper, certfile, ciphers, dhfile, cafile, protocol_options,
- tls_compression, tls, max_fsm_queue, backlog, inet, inet6].
+ tls_compression, tls, max_fsm_queue, backlog, inet, inet6,
+ accept_interval].
diff --git a/src/ejabberd_service.erl b/src/ejabberd_service.erl
index 6445406d2..4c3ae16a3 100644
--- a/src/ejabberd_service.erl
+++ b/src/ejabberd_service.erl
@@ -341,7 +341,9 @@ listen_opt_type(inet) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(inet6) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(backlog) ->
fun(I) when is_integer(I), I>0 -> I end;
+listen_opt_type(accept_interval) ->
+ fun(I) when is_integer(I), I>=0 -> I end;
listen_opt_type(_) ->
[access, shaper_rule, certfile, ciphers, dhfile, cafile, tls,
protocol_options, tls_compression, password, hosts, check_from,
- max_fsm_queue, global_routes, backlog, inet, inet6].
+ max_fsm_queue, global_routes, backlog, inet, inet6, accept_interval].
diff --git a/src/ejabberd_sip.erl b/src/ejabberd_sip.erl
index ec2bceb6b..4606d768c 100644
--- a/src/ejabberd_sip.erl
+++ b/src/ejabberd_sip.erl
@@ -93,8 +93,10 @@ listen_opt_type(certfile) ->
end;
listen_opt_type(tls) ->
fun(B) when is_boolean(B) -> B end;
+listen_opt_type(accept_interval) ->
+ fun(I) when is_integer(I), I>=0 -> I end;
listen_opt_type(_) ->
- [tls, certfile].
+ [tls, certfile, accept_interval].
%%%===================================================================
%%% Internal functions
diff --git a/src/ejabberd_stun.erl b/src/ejabberd_stun.erl
index adae05f00..1ba16d548 100644
--- a/src/ejabberd_stun.erl
+++ b/src/ejabberd_stun.erl
@@ -174,8 +174,10 @@ listen_opt_type(server_name) ->
fun iolist_to_binary/1;
listen_opt_type(backlog) ->
fun(I) when is_integer(I), I>0 -> I end;
+listen_opt_type(accept_interval) ->
+ fun(I) when is_integer(I), I>=0 -> I end;
listen_opt_type(_) ->
[shaper, auth_type, auth_realm, tls, certfile, turn_min_port,
turn_max_port, turn_max_allocations, turn_max_permissions,
- server_name, backlog].
+ server_name, backlog, accept_interval].
-endif.
diff --git a/src/ejabberd_xmlrpc.erl b/src/ejabberd_xmlrpc.erl
index fb5cbd850..6860f8cda 100644
--- a/src/ejabberd_xmlrpc.erl
+++ b/src/ejabberd_xmlrpc.erl
@@ -585,5 +585,8 @@ listen_opt_type(inet) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(inet6) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(backlog) ->
fun(I) when is_integer(I), I>0 -> I end;
+listen_opt_type(accept_interval) ->
+ fun(I) when is_integer(I), I>=0 -> I end;
listen_opt_type(_) ->
- [access_commands, maxsessions, timeout, backlog, inet, inet6].
+ [access_commands, maxsessions, timeout, backlog, inet, inet6,
+ accept_interval].
diff --git a/src/mod_proxy65_stream.erl b/src/mod_proxy65_stream.erl
index ad1844e0c..66577efac 100644
--- a/src/mod_proxy65_stream.erl
+++ b/src/mod_proxy65_stream.erl
@@ -294,10 +294,13 @@ listen_opt_type(recbuf) ->
fun (I) when is_integer(I), I > 0 -> I end;
listen_opt_type(shaper) -> fun acl:shaper_rules_validator/1;
listen_opt_type(sndbuf) ->
- fun (I) when is_integer(I), I > 0 -> I end.
+ fun (I) when is_integer(I), I > 0 -> I end;
+listen_opt_type(accept_interval) ->
+ fun(I) when is_integer(I), I>=0 -> I end.
listen_options() ->
[{auth_type, anonymous},
{recbuf, 8192},
{sndbuf, 8192},
+ {accept_interval, 0},
{shaper, none}].