5
5
%%% Created : 11 Dec 2002 by Alexey Shchepin <alexey@process-one.net>
8
%%% ejabberd, Copyright (C) 2002-2010 ProcessOne
8
%%% ejabberd, Copyright (C) 2002-2011 ProcessOne
10
10
%%% This program is free software; you can redistribute it and/or
11
11
%%% modify it under the terms of the GNU General Public License as
161
161
Feature = {xmlelement,
163
163
[{"xmlns", ?NS_ROSTER_VER}],
164
[{xmlelement, "optional", [], []}]},
412
412
% TODO: don't push to those who didn't load roster
413
413
push_item(User, Server, Resource, From, Item) ->
414
push_item(User, Server, Resource, From, Item, not_found).
416
push_item(User, Server, Resource, From, Item, RosterVersion) ->
417
ExtraAttrs = case RosterVersion of
419
_ -> [{"ver", RosterVersion}]
414
421
ResIQ = #iq{type = set, xmlns = ?NS_ROSTER,
415
422
id = "push" ++ randoms:get_string(),
416
423
sub_el = [{xmlelement, "query",
417
[{"xmlns", ?NS_ROSTER}],
424
[{"xmlns", ?NS_ROSTER}|ExtraAttrs],
418
425
[item_to_xml(Item)]}]},
419
426
ejabberd_router:route(
425
432
%% TODO: don't push to those who didn't load roster
426
433
push_item_version(Server, User, From, Item, RosterVersion) ->
427
434
lists:foreach(fun(Resource) ->
428
push_item_version(User, Server, Resource, From, Item, RosterVersion)
435
push_item(User, Server, Resource, From, Item, RosterVersion)
429
436
end, ejabberd_sm:get_user_resources(User, Server)).
431
push_item_version(User, Server, Resource, From, Item, RosterVersion) ->
432
IQPush = #iq{type = 'set', xmlns = ?NS_ROSTER,
433
id = "push" ++ randoms:get_string(),
434
sub_el = [{xmlelement, "query",
435
[{"xmlns", ?NS_ROSTER},
436
{"ver", RosterVersion}],
437
[item_to_xml(Item)]}]},
438
ejabberd_router:route(
440
jlib:make_jid(User, Server, Resource),
441
jlib:iq_to_xml(IQPush)).
443
438
get_subscription_lists(_, User, Server) ->
444
439
LUser = jlib:nodeprep(User),
445
440
LServer = jlib:nameprep(Server),