diff options
Diffstat (limited to 'src/ejabberd_sm_redis.erl')
-rw-r--r-- | src/ejabberd_sm_redis.erl | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/src/ejabberd_sm_redis.erl b/src/ejabberd_sm_redis.erl index 0283f9c3e..bf9e0eff5 100644 --- a/src/ejabberd_sm_redis.erl +++ b/src/ejabberd_sm_redis.erl @@ -1,6 +1,6 @@ %%%------------------------------------------------------------------- %%% @author Evgeny Khramtsov <ekhramtsov@process-one.net> -%%% @copyright (C) 2015, Evgeny Khramtsov +%%% @copyright (C) 2015-2016, Evgeny Khramtsov %%% @doc %%% %%% @end @@ -8,16 +8,13 @@ %%%------------------------------------------------------------------- -module(ejabberd_sm_redis). +-behaviour(ejabberd_config). + -behaviour(ejabberd_sm). -%% API --export([init/0, - set_session/1, - delete_session/4, - get_sessions/0, - get_sessions/1, - get_sessions/2, - get_sessions/3]). +-export([init/0, set_session/1, delete_session/4, + get_sessions/0, get_sessions/1, get_sessions/2, + get_sessions/3, opt_type/1]). -include("ejabberd.hrl"). -include("ejabberd_sm.hrl"). @@ -110,7 +107,7 @@ get_sessions() -> lists:flatmap( fun(LServer) -> get_sessions(LServer) - end, ?MYHOSTS). + end, ejabberd_sm:get_vh_by_backend(?MODULE)). -spec get_sessions(binary()) -> [#session{}]. get_sessions(LServer) -> @@ -134,7 +131,8 @@ get_sessions(LUser, LServer) -> [] end. --spec get_sessions(binary(), binary(), binary()) -> [#session{}]. +-spec get_sessions(binary(), binary(), binary()) -> + [#session{}]. get_sessions(LUser, LServer, LResource) -> USKey = us_to_key({LUser, LServer}), case eredis:q(?PROCNAME, ["HGETALL", USKey]) of @@ -206,4 +204,18 @@ clean_table() -> ?ERROR_MSG("failed to clean redis table for " "server ~s: ~p", [LServer, Err]) end - end, ?MYHOSTS). + end, ejabberd_sm:get_vh_by_backend(?MODULE)). + +opt_type(redis_connect_timeout) -> + fun (I) when is_integer(I), I > 0 -> I end; +opt_type(redis_db) -> + fun (I) when is_integer(I), I >= 0 -> I end; +opt_type(redis_password) -> fun iolist_to_list/1; +opt_type(redis_port) -> + fun (P) when is_integer(P), P > 0, P < 65536 -> P end; +opt_type(redis_reconnect_timeout) -> + fun (I) when is_integer(I), I > 0 -> I end; +opt_type(redis_server) -> fun iolist_to_list/1; +opt_type(_) -> + [redis_connect_timeout, redis_db, redis_password, + redis_port, redis_reconnect_timeout, redis_server]. |