aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_local.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-02-23 10:12:19 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-02-23 10:12:19 +0300
commit7d6811226536fe260d83617a16fd741edb2d97f3 (patch)
tree4a0745ff2168078cf83233bcb68bafcf6cbd4e01 /src/ejabberd_local.erl
parentRemove unused macro (diff)
Start/stop virtual hosts when reloading configuration file
Diffstat (limited to 'src/ejabberd_local.erl')
-rw-r--r--src/ejabberd_local.erl29
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