diff options
author | Badlop <badlop@process-one.net> | 2010-06-18 15:20:10 +0400 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2010-06-18 23:24:51 +0400 |
commit | 67da88f0bdd0221d72afbd1b2416fc0ffb61e8b6 (patch) | |
tree | 79c446a88d4d6c9256169c3b08ae8f8a2cae4583 /src/ejabberd_c2s.erl | |
parent | 4fd7ec27f5b81726ded44c27475a1133885d8f44 (diff) |
Improve ejabberd's broadcast stanzas to satisfy #xmlel type
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r-- | src/ejabberd_c2s.erl | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 2ad933368..90d85e845 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -1198,19 +1198,25 @@ handle_info({route, From, To, Packet}, StateName, StateData) -> {false, Attrs, StateData} end end; - #xmlel{name = 'broadcast', attrs = Attrs} -> + #xmlel{name = broadcast, attrs = Attrs} -> ?DEBUG("broadcast~n~p~n", [Packet#xmlel.children]), - case Packet#xmlel.children of - [{item, {U, S, R} = _IJIDShort, ISubscription}] -> - IJID = exmpp_jid:make(U, - S, - R), + case Packet#xmlel.ns of + roster_item -> + IJID = exmpp_jid:make(exmpp_xml:get_attribute(Packet, u, <<"">>), + exmpp_xml:get_attribute(Packet, s, <<"">>), + exmpp_xml:get_attribute(Packet, r, <<"">>)), + ISubscription = exmpp_xml:get_attribute(Packet, subs, <<"none">>), {false, Attrs, - roster_change(IJID, ISubscription, - StateData)}; - [{exit, Reason}] -> + roster_change(IJID, ISubscription, StateData)}; + exit -> + Reason = exmpp_xml:get_attribute_as_list(Packet, reason, "Unknown reason"), {exit, Attrs, Reason}; - [{privacy_list, PrivList, PrivListName}] -> + privacy_list -> + PrivListName = exmpp_xml:get_attribute_as_list(Packet, list_name, "Unknown list name"), + CDataString = exmpp_xml:get_cdata_as_list(Packet), + {ok, A2, _} = erl_scan:string(CDataString), + {_, W} = erl_parse:parse_exprs(A2), + {value, PrivList, []} = erl_eval:exprs(W, []), case ejabberd_hooks:run_fold( privacy_updated_list, StateData#state.server, false, |