diff options
Diffstat (limited to 'src/mod_roster.erl')
-rw-r--r-- | src/mod_roster.erl | 62 |
1 files changed, 30 insertions, 32 deletions
diff --git a/src/mod_roster.erl b/src/mod_roster.erl index 84b469ef..2d0e8882 100644 --- a/src/mod_roster.erl +++ b/src/mod_roster.erl @@ -49,7 +49,7 @@ start(Opts) -> -ifdef(PSI_ROSTER_WORKAROUND). process_iq(From, To, IQ) -> - {iq, ID, _Type, XMLNS, SubEl} = IQ, + #iq{sub_el = SubEl} = IQ, #jid{lserver = LServer} = From, case ?MYNAME of LServer -> @@ -58,26 +58,24 @@ process_iq(From, To, IQ) -> jlib:iq_to_xml(ResIQ)), ignore; _ -> - {iq, ID, error, XMLNS, - [SubEl, ?ERR_ITEM_NOT_FOUND]} + IQ#iq{type = error, sub_el = [SubEl, ?ERR_ITEM_NOT_FOUND]} end. -else. process_iq(From, To, IQ) -> - {iq, ID, _Type, XMLNS, SubEl} = IQ, + #iq{sub_el = SubEl} = IQ, #jid{lserver = LServer} = From, case ?MYNAME of LServer -> process_local_iq(From, To, IQ); _ -> - {iq, ID, error, XMLNS, - [SubEl, ?ERR_ITEM_NOT_FOUND]} + IQ#iq{type = error, sub_el = [SubEl, ?ERR_ITEM_NOT_FOUND]} end. -endif. -process_local_iq(From, To, {iq, _, Type, _, _} = IQ) -> +process_local_iq(From, To, #iq{type = Type} = IQ) -> case Type of set -> process_iq_set(From, To, IQ); @@ -87,7 +85,7 @@ process_local_iq(From, To, {iq, _, Type, _, _} = IQ) -> -process_iq_get(From, _To, {iq, ID, _Type, XMLNS, SubEl}) -> +process_iq_get(From, _To, #iq{sub_el = SubEl} = IQ) -> #jid{luser = LUser} = From, F = fun() -> mnesia:index_read(roster, LUser, #roster.user) @@ -95,12 +93,12 @@ process_iq_get(From, _To, {iq, ID, _Type, XMLNS, SubEl}) -> case mnesia:transaction(F) of {atomic, Items} -> XItems = lists:map(fun item_to_xml/1, Items), - {iq, ID, result, XMLNS, [{xmlelement, "query", - [{"xmlns", ?NS_ROSTER}], - XItems}]}; + IQ#iq{type = result, + sub_el = [{xmlelement, "query", + [{"xmlns", ?NS_ROSTER}], + XItems}]}; _ -> - {iq, ID, error, XMLNS, - [SubEl, ?ERR_INTERNAL_SERVER_ERROR]} + IQ#iq{type = error, sub_el = [SubEl, ?ERR_INTERNAL_SERVER_ERROR]} end. item_to_xml(Item) -> @@ -139,10 +137,10 @@ item_to_xml(Item) -> {xmlelement, "item", Attrs, SubEls}. -process_iq_set(From, To, {iq, ID, _Type, XMLNS, SubEl}) -> +process_iq_set(From, To, #iq{sub_el = SubEl} = IQ) -> {xmlelement, _Name, _Attrs, Els} = SubEl, lists:foreach(fun(El) -> process_item_set(From, To, El) end, Els), - {iq, ID, result, XMLNS, []}. + IQ#iq{type = result, sub_el = []}. process_item_set(From, To, {xmlelement, _Name, Attrs, Els}) -> JID1 = jlib:string_to_jid(xml:get_attr_s("jid", Attrs)), @@ -287,27 +285,27 @@ push_item(User, From, Item) -> % TODO: don't push to those who not load roster -ifdef(PSI_ROSTER_WORKAROUND). -push_item(User, Resource, From, Item) -> - ResIQ = {iq, "", set, ?NS_ROSTER, - [{xmlelement, "query", - [{"xmlns", ?NS_ROSTER}], - [item_to_xml(Item)]}]}, - ejabberd_router ! {route, - jlib:make_jid(User, ?MYNAME, Resource), - jlib:make_jid(User, ?MYNAME, Resource), - jlib:iq_to_xml(ResIQ)}. +push_item(User, Resource, _From, Item) -> + ResIQ = #iq{type = set, xmlns = ?NS_ROSTER, + sub_el = [{xmlelement, "query", + [{"xmlns", ?NS_ROSTER}], + [item_to_xml(Item)]}]}, + ejabberd_router:route( + jlib:make_jid(User, ?MYNAME, Resource), + jlib:make_jid(User, ?MYNAME, Resource), + jlib:iq_to_xml(ResIQ)). -else. push_item(User, Resource, From, Item) -> - ResIQ = {iq, "", set, ?NS_ROSTER, - [{xmlelement, "query", - [{"xmlns", ?NS_ROSTER}], - [item_to_xml(Item)]}]}, - ejabberd_router ! {route, - From, - jlib:make_jid(User, ?MYNAME, Resource), - jlib:iq_to_xml(ResIQ)}. + ResIQ = #iq{type = set, xmlns = ?NS_ROSTER, + sub_el = [{xmlelement, "query", + [{"xmlns", ?NS_ROSTER}], + [item_to_xml(Item)]}]}, + ejabberd_router:route( + From, + jlib:make_jid(User, ?MYNAME, Resource), + jlib:iq_to_xml(ResIQ)). -endif. |