error ->
erlang:error({invalid_domain, Domain});
LDomain ->
- lists:member(LDomain, get_all_routes())
+ find_routes(LDomain) /= []
end.
-spec is_my_host(binary()) -> boolean().
-record(state, {}).
-define(ROUTES_KEY, <<"ejabberd:routes">>).
+-define(DOMAINS_KEY, <<"ejabberd:domains">>).
%%%===================================================================
%%% API
case ejabberd_redis:multi(
fun() ->
ejabberd_redis:hset(DomKey, PidKey, T),
- ejabberd_redis:sadd(?ROUTES_KEY, [Domain])
+ ejabberd_redis:sadd(?DOMAINS_KEY, [Domain]),
+ if Domain /= ServerHost ->
+ ejabberd_redis:sadd(?ROUTES_KEY, [Domain]);
+ true ->
+ ok
+ end
end) of
{ok, _} ->
ok;
{ok, _} = ejabberd_redis:multi(
fun() ->
ejabberd_redis:del([DomKey]),
- ejabberd_redis:srem(?ROUTES_KEY, [Domain])
+ ejabberd_redis:srem(?ROUTES_KEY, [Domain]),
+ ejabberd_redis:srem(?DOMAINS_KEY, [Domain])
end),
ok;
true ->
{error, db_failure}
end.
+get_all_domains() ->
+ case ejabberd_redis:smembers(?DOMAINS_KEY) of
+ {ok, Domains} ->
+ {ok, Domains};
+ _ ->
+ {error, db_failure}
+ end.
+
%%%===================================================================
%%% gen_server callbacks
%%%===================================================================
end, find_routes()).
find_routes() ->
- case get_all_routes() of
+ case get_all_domains() of
{ok, Domains} ->
lists:flatmap(
fun(Domain) ->