Fix ejabberd_router:is_my_route/1

This commit is contained in:
Evgeniy Khramtsov 2017-04-14 20:34:00 +03:00
parent 5f1f126613
commit d110cbb6e2
2 changed files with 19 additions and 4 deletions

View File

@ -268,7 +268,7 @@ is_my_route(Domain) ->
error -> error ->
erlang:error({invalid_domain, Domain}); erlang:error({invalid_domain, Domain});
LDomain -> LDomain ->
lists:member(LDomain, get_all_routes()) find_routes(LDomain) /= []
end. end.
-spec is_my_host(binary()) -> boolean(). -spec is_my_host(binary()) -> boolean().

View File

@ -38,6 +38,7 @@
-record(state, {}). -record(state, {}).
-define(ROUTES_KEY, <<"ejabberd:routes">>). -define(ROUTES_KEY, <<"ejabberd:routes">>).
-define(DOMAINS_KEY, <<"ejabberd:domains">>).
%%%=================================================================== %%%===================================================================
%%% API %%% API
@ -61,7 +62,12 @@ register_route(Domain, ServerHost, LocalHint, _, Pid) ->
case ejabberd_redis:multi( case ejabberd_redis:multi(
fun() -> fun() ->
ejabberd_redis:hset(DomKey, PidKey, T), 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 end) of
{ok, _} -> {ok, _} ->
ok; ok;
@ -80,7 +86,8 @@ unregister_route(Domain, _, Pid) ->
{ok, _} = ejabberd_redis:multi( {ok, _} = ejabberd_redis:multi(
fun() -> fun() ->
ejabberd_redis:del([DomKey]), ejabberd_redis:del([DomKey]),
ejabberd_redis:srem(?ROUTES_KEY, [Domain]) ejabberd_redis:srem(?ROUTES_KEY, [Domain]),
ejabberd_redis:srem(?DOMAINS_KEY, [Domain])
end), end),
ok; ok;
true -> true ->
@ -110,6 +117,14 @@ get_all_routes() ->
{error, db_failure} {error, db_failure}
end. end.
get_all_domains() ->
case ejabberd_redis:smembers(?DOMAINS_KEY) of
{ok, Domains} ->
{ok, Domains};
_ ->
{error, db_failure}
end.
%%%=================================================================== %%%===================================================================
%%% gen_server callbacks %%% gen_server callbacks
%%%=================================================================== %%%===================================================================
@ -147,7 +162,7 @@ clean_table() ->
end, find_routes()). end, find_routes()).
find_routes() -> find_routes() ->
case get_all_routes() of case get_all_domains() of
{ok, Domains} -> {ok, Domains} ->
lists:flatmap( lists:flatmap(
fun(Domain) -> fun(Domain) ->