diff options
Diffstat (limited to 'src/ejabberd_router.erl')
-rw-r--r-- | src/ejabberd_router.erl | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/src/ejabberd_router.erl b/src/ejabberd_router.erl index 33093abb0..5ce8a8afb 100644 --- a/src/ejabberd_router.erl +++ b/src/ejabberd_router.erl @@ -43,7 +43,9 @@ unregister_route/1, unregister_routes/1, dirty_get_all_routes/0, - dirty_get_all_domains/0 + dirty_get_all_domains/0, + is_my_route/1, + is_my_host/1 ]). -export([start_link/0]). @@ -110,12 +112,12 @@ register_route(Domain) -> [?MODULE, ?MODULE]), register_route(Domain, ?MYNAME). --spec register_route(binary(), binary()) -> term(). +-spec register_route(binary(), binary()) -> ok. register_route(Domain, ServerHost) -> register_route(Domain, ServerHost, undefined). --spec register_route(binary(), binary(), local_hint()) -> term(). +-spec register_route(binary(), binary(), local_hint()) -> ok. register_route(Domain, ServerHost, LocalHint) -> case {jid:nameprep(Domain), jid:nameprep(ServerHost)} of @@ -165,6 +167,11 @@ register_route(Domain, ServerHost, LocalHint) -> end end, mnesia:transaction(F) + end, + if LocalHint == undefined -> + ?INFO_MSG("Route registered: ~s", [LDomain]); + true -> + ok end end. @@ -175,7 +182,7 @@ register_routes(Domains) -> end, Domains). --spec unregister_route(binary()) -> term(). +-spec unregister_route(binary()) -> ok. unregister_route(Domain) -> case jid:nameprep(Domain) of @@ -210,7 +217,8 @@ unregister_route(Domain) -> end end, mnesia:transaction(F) - end + end, + ?INFO_MSG("Route unregistered: ~s", [LDomain]) end. -spec unregister_routes([binary()]) -> ok. @@ -245,6 +253,29 @@ host_of_route(Domain) -> end end. +-spec is_my_route(binary()) -> boolean(). +is_my_route(Domain) -> + case jid:nameprep(Domain) of + error -> + erlang:error({invalid_domain, Domain}); + LDomain -> + mnesia:dirty_read(route, LDomain) /= [] + end. + +-spec is_my_host(binary()) -> boolean(). +is_my_host(Domain) -> + case jid:nameprep(Domain) of + error -> + erlang:error({invalid_domain, Domain}); + LDomain -> + case mnesia:dirty_read(route, LDomain) of + [#route{server_host = Host}|_] -> + Host == LDomain; + [] -> + false + end + end. + -spec process_iq(jid(), jid(), iq() | xmlel()) -> any(). process_iq(From, To, #iq{} = IQ) -> if To#jid.luser == <<"">> -> |