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:
-rw-r--r--src/ejabberd_c2s.erl26
-rw-r--r--src/ejabberd_sm.erl4
-rw-r--r--src/mod_privacy.erl16
-rw-r--r--src/mod_privacy_odbc.erl16
-rw-r--r--src/mod_roster.erl10
-rw-r--r--src/mod_roster_odbc.erl10
-rw-r--r--src/mod_shared_roster.erl10
7 files changed, 52 insertions, 40 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,
diff --git a/src/ejabberd_sm.erl b/src/ejabberd_sm.erl
index d85d474fd..ea722ae17 100644
--- a/src/ejabberd_sm.erl
+++ b/src/ejabberd_sm.erl
@@ -155,8 +155,8 @@ disconnect_removed_user(User, Server) ->
ejabberd_sm:route(exmpp_jid:make(),
exmpp_jid:make(User,
Server),
- #xmlel{name = 'broadcast',
- children = [{exit, "User removed"}]}).
+ #xmlel{name = 'broadcast', ns = exit,
+ attrs = [exmpp_xml:attribute(reason, "User removed")]}).
get_user_resources(User, Server)
when is_binary(User), is_binary(Server) ->
diff --git a/src/mod_privacy.erl b/src/mod_privacy.erl
index cffa523fc..ba5eee332 100644
--- a/src/mod_privacy.erl
+++ b/src/mod_privacy.erl
@@ -362,13 +362,13 @@ process_list_set(LUser, LServer, Name, Els) ->
{atomic, {error, _} = Error} ->
Error;
{atomic, {result, _} = Res} ->
+ ListString = lists:flatten(io_lib:format("~p.", [#userlist{name = Name, list = []}])),
ejabberd_router:route(
exmpp_jid:make(LUser, LServer),
exmpp_jid:make(LUser, LServer),
- #xmlel{name = 'broadcast',
- children=[{privacy_list,
- #userlist{name = Name, list = []},
- Name}]}),
+ #xmlel{name = 'broadcast', ns = privacy_list,
+ attrs = [exmpp_xml:attribute(list_name, Name)],
+ children = [exmpp_xml:cdata(ListString)]}),
Res;
_ ->
{error, 'internal-server-error'}
@@ -393,13 +393,13 @@ process_list_set(LUser, LServer, Name, Els) ->
{atomic, {error, _} = Error} ->
Error;
{atomic, {result, _} = Res} ->
+ ListString = lists:flatten(io_lib:format("~p.", [#userlist{name = Name, list = List}])),
ejabberd_router:route(
exmpp_jid:make(LUser, LServer),
exmpp_jid:make(LUser, LServer),
- #xmlel{name = 'broadcast',
- children=[{privacy_list,
- #userlist{name = Name, list = List},
- Name}]}),
+ #xmlel{name = 'broadcast', ns = privacy_list,
+ attrs = [exmpp_xml:attribute(list_name, Name)],
+ children = [exmpp_xml:cdata(ListString)]}),
Res;
_ ->
{error, 'internal_server_error'}
diff --git a/src/mod_privacy_odbc.erl b/src/mod_privacy_odbc.erl
index b0323a877..9b0200d43 100644
--- a/src/mod_privacy_odbc.erl
+++ b/src/mod_privacy_odbc.erl
@@ -362,13 +362,13 @@ process_list_set(LUser, LServer, Name, Els) ->
{atomic, {error, _} = Error} ->
Error;
{atomic, {result, _} = Res} ->
+ ListString = lists:flatten(io_lib:format("~p.", [#userlist{name = Name, list = []}])),
ejabberd_router:route(
exmpp_jid:make(LUser, LServer),
exmpp_jid:make(LUser, LServer),
- #xmlel{name = 'broadcast',
- children=[{privacy_list,
- #userlist{name = Name, list = []},
- Name}]}),
+ #xmlel{name = 'broadcast', ns = privacy_list,
+ attrs = [exmpp_xml:attribute(list_name, Name)],
+ children = [exmpp_xml:cdata(ListString)]}),
Res;
_ ->
{error, 'internal-server-error'}
@@ -394,13 +394,13 @@ process_list_set(LUser, LServer, Name, Els) ->
{atomic, {error, _} = Error} ->
Error;
{atomic, {result, _} = Res} ->
+ ListString = lists:flatten(io_lib:format("~p.", [#userlist{name = Name, list = List}])),
ejabberd_router:route(
exmpp_jid:make(LUser, LServer),
exmpp_jid:make(LUser, LServer),
- #xmlel{name = 'broadcast',
- children=[{privacy_list,
- #userlist{name = Name, list = List},
- Name}]}),
+ #xmlel{name = 'broadcast', ns = privacy_list,
+ attrs = [exmpp_xml:attribute(list_name, Name)],
+ children = [exmpp_xml:cdata(ListString)]}),
Res;
_ ->
{error, 'internal_server_error'}
diff --git a/src/mod_roster.erl b/src/mod_roster.erl
index 5d20c1ae6..bd62ec115 100644
--- a/src/mod_roster.erl
+++ b/src/mod_roster.erl
@@ -490,12 +490,14 @@ process_item_els(Item, []) ->
push_item(User, Server, From, Item)
when is_binary(User), is_binary(Server), ?IS_JID(From) ->
+ {U, S, R} = Item#roster.jid,
ejabberd_sm:route(exmpp_jid:make(),
exmpp_jid:make(User, Server),
- #xmlel{name = 'broadcast', children =
- [{item,
- Item#roster.jid,
- Item#roster.subscription}]}),
+ #xmlel{name = 'broadcast', ns = roster_item, attrs =
+ [exmpp_xml:attribute(u, U),
+ exmpp_xml:attribute(s, S),
+ exmpp_xml:attribute(r, R),
+ exmpp_xml:attribute(subs, Item#roster.subscription)]}),
case roster_versioning_enabled(Server) of
true ->
diff --git a/src/mod_roster_odbc.erl b/src/mod_roster_odbc.erl
index 5ad8e1f77..7deb89749 100644
--- a/src/mod_roster_odbc.erl
+++ b/src/mod_roster_odbc.erl
@@ -450,12 +450,14 @@ process_item_els(Item, []) ->
push_item(User, Server, From, Item) when is_binary(User), is_binary(Server) ->
+ {U, S, R} = Item#roster.jid,
ejabberd_sm:route(exmpp_jid:make(),
exmpp_jid:make(User, Server),
- #xmlel{name = 'broadcast', children =
- [{item,
- Item#roster.jid,
- Item#roster.subscription}]}),
+ #xmlel{name = 'broadcast', ns = roster_item, attrs =
+ [exmpp_xml:attribute(u, U),
+ exmpp_xml:attribute(s, S),
+ exmpp_xml:attribute(r, R),
+ exmpp_xml:attribute(subs, Item#roster.subscription)]}),
case roster_versioning_enabled(Server) of
true ->
push_item_version(Server, User, From, Item, roster_version(Server, User));
diff --git a/src/mod_shared_roster.erl b/src/mod_shared_roster.erl
index b6222fcfa..82297d3fc 100644
--- a/src/mod_shared_roster.erl
+++ b/src/mod_shared_roster.erl
@@ -735,11 +735,13 @@ push_item(User, Server, From, Item) ->
%% ejabberd_sm:route(jlib:make_jid("", "", ""),
%% jlib:make_jid(User, Server, "")
%% why?
+ {U, S, R} = Item#roster.jid,
ejabberd_sm:route(From, exmpp_jid:make(User, Server),
- #xmlel{name = 'broadcast', children =
- [{item,
- Item#roster.jid,
- Item#roster.subscription}]}),
+ #xmlel{name = 'broadcast', ns = roster_item, attrs =
+ [exmpp_xml:attribute(u, U),
+ exmpp_xml:attribute(s, S),
+ exmpp_xml:attribute(r, R),
+ exmpp_xml:attribute(subs, Item#roster.subscription)]}),
Request = #xmlel{ns = ?NS_ROSTER, name = 'query',
children = [item_to_xml(Item)]},
Stanza = exmpp_iq:set(?NS_JABBER_CLIENT, Request,