Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2010-06-18 15:20:10 +0400
committerBadlop <badlop@process-one.net>2010-06-18 23:24:51 +0400
commit67da88f0bdd0221d72afbd1b2416fc0ffb61e8b6 (patch)
tree79c446a88d4d6c9256169c3b08ae8f8a2cae4583 /src/ejabberd_c2s.erl
parent4fd7ec27f5b81726ded44c27475a1133885d8f44 (diff)
Improve ejabberd's broadcast stanzas to satisfy #xmlel type
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r--src/ejabberd_c2s.erl26
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,