diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-02-23 10:12:19 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-02-23 10:12:19 +0300 |
commit | 7d6811226536fe260d83617a16fd741edb2d97f3 (patch) | |
tree | 4a0745ff2168078cf83233bcb68bafcf6cbd4e01 /src/ejabberd_local.erl | |
parent | Remove unused macro (diff) |
Start/stop virtual hosts when reloading configuration file
Diffstat (limited to 'src/ejabberd_local.erl')
-rw-r--r-- | src/ejabberd_local.erl | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/src/ejabberd_local.erl b/src/ejabberd_local.erl index 2095dfc78..7a9034563 100644 --- a/src/ejabberd_local.erl +++ b/src/ejabberd_local.erl @@ -36,7 +36,8 @@ process_iq_reply/1, get_features/1, register_iq_handler/5, register_iq_response_handler/4, register_iq_response_handler/5, unregister_iq_handler/2, - unregister_iq_response_handler/2, bounce_resource_packet/1]). + unregister_iq_response_handler/2, bounce_resource_packet/1, + host_up/1, host_down/1]). %% gen_server callbacks -export([init/1, handle_call/3, handle_cast/2, @@ -196,16 +197,9 @@ get_features(_, _, XMLNSs) -> %%==================================================================== init([]) -> - lists:foreach(fun (Host) -> - ejabberd_router:register_route(Host, - Host, - {apply, ?MODULE, - route}), - ejabberd_hooks:add(local_send_to_resource_hook, Host, - ?MODULE, bounce_resource_packet, - 100) - end, - ?MYHOSTS), + lists:foreach(fun host_up/1, ?MYHOSTS), + ejabberd_hooks:add(host_up, ?MODULE, host_up, 10), + ejabberd_hooks:add(host_down, ?MODULE, host_down, 100), catch ets:new(?IQTABLE, [named_table, public, ordered_set]), update_table(), ejabberd_mnesia:create(?MODULE, iq_response, @@ -245,6 +239,9 @@ handle_info(Info, State) -> {noreply, State}. terminate(_Reason, _State) -> + lists:foreach(fun host_down/1, ?MYHOSTS), + ejabberd_hooks:delete(host_up, ?MODULE, host_up, 10), + ejabberd_hooks:delete(host_down, ?MODULE, host_down, 100), ok. code_change(_OldVsn, State, _Extra) -> @@ -281,6 +278,16 @@ update_table() -> ok end. +host_up(Host) -> + ejabberd_router:register_route(Host, Host, {apply, ?MODULE, route}), + ejabberd_hooks:add(local_send_to_resource_hook, Host, + ?MODULE, bounce_resource_packet, 100). + +host_down(Host) -> + ejabberd_router:unregister_route(Host), + ejabberd_hooks:delete(local_send_to_resource_hook, Host, + ?MODULE, bounce_resource_packet, 100). + -spec get_iq_callback(binary()) -> {ok, module(), atom() | function()} | error. get_iq_callback(ID) -> case mnesia:dirty_read(iq_response, ID) of |