aboutsummaryrefslogtreecommitdiff
path: root/src/mod_bosh.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_bosh.erl')
-rw-r--r--src/mod_bosh.erl108
1 files changed, 49 insertions, 59 deletions
diff --git a/src/mod_bosh.erl b/src/mod_bosh.erl
index 03bdc6e15..5ed3d5e8d 100644
--- a/src/mod_bosh.erl
+++ b/src/mod_bosh.erl
@@ -115,10 +115,9 @@ find_session(SID) ->
end
end.
-start(Host, Opts) ->
- start_jiffy(Opts),
- Mod = gen_mod:ram_db_mod(global, ?MODULE),
- init_cache(Mod),
+start(Host, _Opts) ->
+ Mod = gen_mod:ram_db_mod(Host, ?MODULE),
+ init_cache(Host, Mod),
Mod:init(),
clean_cache(),
TmpSup = gen_mod:get_module_proc(Host, ?MODULE),
@@ -132,30 +131,15 @@ stop(Host) ->
supervisor:terminate_child(ejabberd_gen_mod_sup, TmpSup),
supervisor:delete_child(ejabberd_gen_mod_sup, TmpSup).
-reload(_Host, NewOpts, _OldOpts) ->
- start_jiffy(NewOpts),
+reload(Host, _NewOpts, _OldOpts) ->
Mod = gen_mod:ram_db_mod(global, ?MODULE),
- init_cache(Mod),
+ init_cache(Host, Mod),
Mod:init(),
ok.
%%%===================================================================
%%% Internal functions
%%%===================================================================
-start_jiffy(Opts) ->
- case gen_mod:get_opt(json, Opts) of
- false ->
- ok;
- true ->
- case catch ejabberd:start_app(jiffy) of
- ok ->
- ok;
- Err ->
- ?WARNING_MSG("Failed to start JSON codec (jiffy): ~p. "
- "JSON support will be disabled", [Err])
- end
- end.
-
get_type(Hdrs) ->
try
{_, S} = lists:keyfind('Content-Type', 1, Hdrs),
@@ -170,31 +154,36 @@ depends(_Host, _Opts) ->
[].
mod_opt_type(json) ->
- fun (false) -> false;
- (true) -> true
- end;
+ econf:and_then(
+ econf:bool(),
+ fun(false) -> false;
+ (true) ->
+ ejabberd:start_app(jiffy),
+ true
+ end);
mod_opt_type(max_concat) ->
- fun (unlimited) -> unlimited;
- (N) when is_integer(N), N > 0 -> N
- end;
+ econf:pos_int(unlimited);
mod_opt_type(max_inactivity) ->
- fun (I) when is_integer(I), I > 0 -> I end;
+ econf:pos_int();
mod_opt_type(max_pause) ->
- fun (I) when is_integer(I), I > 0 -> I end;
+ econf:pos_int();
mod_opt_type(prebind) ->
- fun (B) when is_boolean(B) -> B end;
-mod_opt_type(ram_db_type) ->
- fun(T) -> ejabberd_config:v_db(?MODULE, T) end;
+ econf:bool();
mod_opt_type(queue_type) ->
- fun(ram) -> ram; (file) -> file end;
-mod_opt_type(O) when O == use_cache; O == cache_missed ->
- fun(B) when is_boolean(B) -> B end;
-mod_opt_type(O) when O == cache_size; O == cache_life_time ->
- fun(I) when is_integer(I), I>0 -> I;
- (unlimited) -> infinity;
- (infinity) -> infinity
- end.
-
+ econf:queue_type();
+mod_opt_type(ram_db_type) ->
+ econf:db_type(?MODULE);
+mod_opt_type(use_cache) ->
+ econf:bool();
+mod_opt_type(cache_size) ->
+ econf:pos_int(infinity);
+mod_opt_type(cache_missed) ->
+ econf:bool();
+mod_opt_type(cache_life_time) ->
+ econf:timeout(second, infinity).
+
+-spec mod_options(binary()) -> [{json, boolean()} |
+ {atom(), term()}].
mod_options(Host) ->
[{json, false},
{max_concat, unlimited},
@@ -202,29 +191,33 @@ mod_options(Host) ->
{max_pause, 120},
{prebind, false},
{ram_db_type, ejabberd_config:default_ram_db(Host, ?MODULE)},
- {queue_type, ejabberd_config:default_queue_type(Host)},
- {use_cache, ejabberd_config:use_cache(Host)},
- {cache_size, ejabberd_config:cache_size(Host)},
- {cache_missed, ejabberd_config:cache_missed(Host)},
- {cache_life_time, ejabberd_config:cache_life_time(Host)}].
+ {queue_type, ejabberd_option:queue_type(Host)},
+ {use_cache, ejabberd_option:use_cache(Host)},
+ {cache_size, ejabberd_option:cache_size(Host)},
+ {cache_missed, ejabberd_option:cache_missed(Host)},
+ {cache_life_time, ejabberd_option:cache_life_time(Host)}].
%%%----------------------------------------------------------------------
%%% Cache stuff
%%%----------------------------------------------------------------------
--spec init_cache(module()) -> ok.
-init_cache(Mod) ->
- case use_cache(Mod) of
+-spec init_cache(binary(), module()) -> ok.
+init_cache(Host, Mod) ->
+ case use_cache(Mod, Host) of
true ->
- ets_cache:new(?BOSH_CACHE, cache_opts());
+ ets_cache:new(?BOSH_CACHE, cache_opts(Host));
false ->
ets_cache:delete(?BOSH_CACHE)
end.
-spec use_cache(module()) -> boolean().
use_cache(Mod) ->
+ use_cache(Mod, global).
+
+-spec use_cache(module(), global | binary()) -> boolean().
+use_cache(Mod, Host) ->
case erlang:function_exported(Mod, use_cache, 0) of
true -> Mod:use_cache();
- false -> gen_mod:get_module_opt(global, ?MODULE, use_cache)
+ false -> mod_bosh_opt:use_cache(Host)
end.
-spec cache_nodes(module()) -> [node()].
@@ -243,14 +236,11 @@ delete_cache(Mod, SID) ->
ok
end.
--spec cache_opts() -> [proplists:property()].
-cache_opts() ->
- MaxSize = gen_mod:get_module_opt(global, ?MODULE, cache_size),
- CacheMissed = gen_mod:get_module_opt(global, ?MODULE, cache_missed),
- LifeTime = case gen_mod:get_module_opt(global, ?MODULE, cache_life_time) of
- infinity -> infinity;
- I -> timer:seconds(I)
- end,
+-spec cache_opts(binary()) -> [proplists:property()].
+cache_opts(Host) ->
+ MaxSize = mod_bosh_opt:cache_size(Host),
+ CacheMissed = mod_bosh_opt:cache_missed(Host),
+ LifeTime = mod_bosh_opt:cache_life_time(Host),
[{max_size, MaxSize}, {cache_missed, CacheMissed}, {life_time, LifeTime}].
-spec clean_cache(node()) -> non_neg_integer().