aboutsummaryrefslogtreecommitdiff
path: root/src/mod_stream_mgmt.erl
diff options
context:
space:
mode:
authorEvgeny Khramtsov <ekhramtsov@process-one.net>2019-06-14 12:33:26 +0300
committerEvgeny Khramtsov <ekhramtsov@process-one.net>2019-06-14 12:33:26 +0300
commita02cff0e780bb735531594c4ece81e8628f79782 (patch)
tree6fe7d8219d14f58183be1741fcea262c216db447 /src/mod_stream_mgmt.erl
parentReturn jid_malformed error when sending presence without nick to conference (diff)
Use new configuration validator
Diffstat (limited to 'src/mod_stream_mgmt.erl')
-rw-r--r--src/mod_stream_mgmt.erl74
1 files changed, 20 insertions, 54 deletions
diff --git a/src/mod_stream_mgmt.erl b/src/mod_stream_mgmt.erl
index 1a4308c58..58b2c4395 100644
--- a/src/mod_stream_mgmt.erl
+++ b/src/mod_stream_mgmt.erl
@@ -28,7 +28,7 @@
%% gen_mod API
-export([start/2, stop/1, reload/3, depends/2, mod_opt_type/1, mod_options/1]).
%% hooks
--export([c2s_stream_init/2, c2s_stream_started/2, c2s_stream_features/2,
+-export([c2s_stream_started/2, c2s_stream_features/2,
c2s_authenticated_packet/2, c2s_unauthenticated_packet/2,
c2s_unbinded_packet/2, c2s_closed/2, c2s_terminated/2,
c2s_handle_send/3, c2s_handle_info/2, c2s_handle_call/3,
@@ -55,7 +55,6 @@
%%%===================================================================
start(Host, Opts) ->
init_cache(Opts),
- ejabberd_hooks:add(c2s_init, ?MODULE, c2s_stream_init, 50),
ejabberd_hooks:add(c2s_stream_started, Host, ?MODULE,
c2s_stream_started, 50),
ejabberd_hooks:add(c2s_post_auth_features, Host, ?MODULE,
@@ -74,12 +73,6 @@ start(Host, Opts) ->
ejabberd_hooks:add(c2s_terminated, Host, ?MODULE, c2s_terminated, 50).
stop(Host) ->
- case gen_mod:is_loaded_elsewhere(Host, ?MODULE) of
- true ->
- ok;
- false ->
- ejabberd_hooks:delete(c2s_init, ?MODULE, c2s_stream_init, 50)
- end,
ejabberd_hooks:delete(c2s_stream_started, Host, ?MODULE,
c2s_stream_started, 50),
ejabberd_hooks:delete(c2s_post_auth_features, Host, ?MODULE,
@@ -105,21 +98,6 @@ reload(_Host, NewOpts, _OldOpts) ->
depends(_Host, _Opts) ->
[].
-c2s_stream_init({ok, State}, Opts) ->
- MgmtOpts = lists:filter(
- fun({stream_management, _}) -> true;
- ({max_ack_queue, _}) -> true;
- ({resume_timeout, _}) -> true;
- ({max_resume_timeout, _}) -> true;
- ({ack_timeout, _}) -> true;
- ({resend_on_timeout, _}) -> true;
- ({queue_type, _}) -> true;
- (_) -> false
- end, Opts),
- {ok, State#{mgmt_options => MgmtOpts}};
-c2s_stream_init(Acc, _Opts) ->
- Acc.
-
c2s_stream_started(#{lserver := LServer} = State, _StreamStart) ->
State1 = maps:remove(mgmt_options, State),
ResumeTimeout = get_configured_resume_timeout(LServer),
@@ -749,7 +727,7 @@ init_cache(Opts) ->
ets_cache:new(?STREAM_MGMT_CACHE, cache_opts(Opts)).
cache_opts(Opts) ->
- [{max_size, gen_mod:get_opt(cache_size, Opts)},
+ [{max_size, mod_stream_mgmt_opt:cache_size(Opts)},
{life_time, infinity}].
-spec store_stanzas_in(ljid(), erlang:timestamp(), non_neg_integer()) -> boolean().
@@ -772,61 +750,49 @@ pop_stanzas_in(LJID, Time) ->
%%% Configuration processing
%%%===================================================================
get_max_ack_queue(Host) ->
- gen_mod:get_module_opt(Host, ?MODULE, max_ack_queue).
+ mod_stream_mgmt_opt:max_ack_queue(Host).
get_configured_resume_timeout(Host) ->
- gen_mod:get_module_opt(Host, ?MODULE, resume_timeout).
+ mod_stream_mgmt_opt:resume_timeout(Host).
get_max_resume_timeout(Host, ResumeTimeout) ->
- case gen_mod:get_module_opt(Host, ?MODULE, max_resume_timeout) of
+ case mod_stream_mgmt_opt:max_resume_timeout(Host) of
undefined -> ResumeTimeout;
Max when Max >= ResumeTimeout -> Max;
_ -> ResumeTimeout
end.
get_ack_timeout(Host) ->
- case gen_mod:get_module_opt(Host, ?MODULE, ack_timeout) of
- infinity -> infinity;
- T -> timer:seconds(T)
- end.
+ mod_stream_mgmt_opt:ack_timeout(Host).
get_resend_on_timeout(Host) ->
- gen_mod:get_module_opt(Host, ?MODULE, resend_on_timeout).
+ mod_stream_mgmt_opt:resend_on_timeout(Host).
get_queue_type(Host) ->
- gen_mod:get_module_opt(Host, ?MODULE, queue_type).
+ mod_stream_mgmt_opt:queue_type(Host).
mod_opt_type(max_ack_queue) ->
- fun(I) when is_integer(I), I > 0 -> I;
- (infinity) -> infinity
- end;
+ econf:pos_int(infinity);
mod_opt_type(resume_timeout) ->
- fun(I) when is_integer(I), I >= 0 -> I end;
+ econf:non_neg_int();
mod_opt_type(max_resume_timeout) ->
- fun(I) when is_integer(I), I >= 0 -> I;
- (undefined) -> undefined
- end;
+ econf:non_neg_int();
mod_opt_type(ack_timeout) ->
- fun(I) when is_integer(I), I > 0 -> I;
- (infinity) -> infinity
- end;
+ econf:timeout(second, infinity);
mod_opt_type(resend_on_timeout) ->
- fun(B) when is_boolean(B) -> B;
- (if_offline) -> if_offline
- end;
+ econf:either(
+ if_offline,
+ econf:bool());
mod_opt_type(cache_size) ->
- fun(I) when is_integer(I), I>0 -> I;
- (unlimited) -> infinity;
- (infinity) -> infinity
- end;
+ econf:well_known(cache_size, ?MODULE);
mod_opt_type(queue_type) ->
- fun(ram) -> ram; (file) -> file end.
+ econf:well_known(queue_type, ?MODULE).
mod_options(Host) ->
[{max_ack_queue, 5000},
{resume_timeout, 300},
{max_resume_timeout, undefined},
- {ack_timeout, 60},
- {cache_size, ejabberd_config:cache_size(Host)},
+ {ack_timeout, timer:seconds(60)},
+ {cache_size, ejabberd_option:cache_size(Host)},
{resend_on_timeout, false},
- {queue_type, ejabberd_config:default_queue_type(Host)}].
+ {queue_type, ejabberd_option:queue_type(Host)}].