diff options
Diffstat (limited to 'src/mod_vcard.erl')
-rw-r--r-- | src/mod_vcard.erl | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/src/mod_vcard.erl b/src/mod_vcard.erl index 5f6bf4f5e..2dbc987c9 100644 --- a/src/mod_vcard.erl +++ b/src/mod_vcard.erl @@ -12,7 +12,7 @@ -behaviour(gen_mod). --export([start/1, init/1, +-export([start/1, init/2, stop/0, process_local_iq/3, process_sm_iq/3, reindex_vcards/0, @@ -64,14 +64,20 @@ start(Opts) -> gen_iq_handler:add_iq_handler(ejabberd_sm, ?NS_VCARD, ?MODULE, process_sm_iq, IQDisc), Host = gen_mod:get_opt(host, Opts, "vjud." ++ ?MYNAME), - spawn(?MODULE, init, [Host]). + Search = gen_mod:get_opt(search, Opts, true), + register(ejabberd_mod_vcard, spawn(?MODULE, init, [Host, Search])). -init(Host) -> - ejabberd_router:register_route(Host), - loop(). +init(Host, Search) -> + case Search of + true -> + ejabberd_router:register_route(Host), + loop(Host); + _ -> + loop(Host) + end. -loop() -> +loop(Host) -> receive {route, From, To, Packet} -> case catch do_route(From, To, Packet) of @@ -80,11 +86,19 @@ loop() -> _ -> ok end, - loop(); + loop(Host); + stop -> + catch ejabberd_router:unregister_route(Host), + ok; _ -> - loop() + loop(Host) end. +stop() -> + gen_iq_handler:remove_iq_handler(ejabberd_local, ?NS_VCARD), + gen_iq_handler:remove_iq_handler(ejabberd_sm, ?NS_VCARD), + ejabberd_mod_vcard ! stop, + ok. process_local_iq(_From, _To, #iq{type = Type, lang = Lang, sub_el = SubEl} = IQ) -> case Type of |