summaryrefslogtreecommitdiff
path: root/src/mod_roster.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_roster.erl')
-rw-r--r--src/mod_roster.erl62
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.