diff options
Diffstat (limited to '')
-rw-r--r-- | src/mod_roster.erl | 44 |
1 files changed, 12 insertions, 32 deletions
diff --git a/src/mod_roster.erl b/src/mod_roster.erl index 213c4655..56df1bc4 100644 --- a/src/mod_roster.erl +++ b/src/mod_roster.erl @@ -12,8 +12,9 @@ -export([]). --export([start/0, init/0, +-export([start/1, process_iq/3, + process_local_iq/3, get_subscription_lists/1, in_subscription/3, out_subscription/3]). @@ -32,40 +33,19 @@ xattrs = [], xs = []}). --define(ME, ejabberd_mod_roster). - -start() -> - register(?ME, spawn(mod_roster, init, [])). - -init() -> +start(Type) -> mnesia:create_table(roster,[{disc_copies, [node()]}, {attributes, record_info(fields, roster)}]), mnesia:add_table_index(roster, user), - ejabberd_local:register_iq_handler(?NS_ROSTER, - ?MODULE, process_iq), - loop(). + gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_ROSTER, + ?MODULE, process_local_iq, Type). -loop() -> - receive - {process_iq, From, To, {iq, ID, Type, XMLNS, SubEl}} -> - case Type of - set -> - ResIQ = process_iq_set(From, To, - {iq, ID, Type, XMLNS, SubEl}), - ejabberd_router ! {route, - To, - From, - jlib:iq_to_xml(ResIQ)}, - loop(); - get -> - ResIQ = process_iq_get(From, To, - {iq, ID, Type, XMLNS, SubEl}), - ejabberd_router ! {route, - To, - From, - jlib:iq_to_xml(ResIQ)}, - loop() - end +process_local_iq(From, To, {iq, _, Type, _, _} = IQ) -> + case Type of + set -> + process_iq_set(From, To, IQ); + get -> + process_iq_get(From, To, IQ) end. @@ -75,7 +55,7 @@ process_iq(From, To, IQ) -> {_, Server, _} = From, case ?MYNAME of Server -> - ?ME ! {process_iq, From, To, IQ}, + process_local_iq(From, To, IQ), ignore; _ -> {iq, ID, error, XMLNS, |