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}].