aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_sm_redis.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_sm_redis.erl')
-rw-r--r--src/ejabberd_sm_redis.erl36
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].