4 |
4 |
5 local jid_split = require "util.jid".split; |
5 local jid_split = require "util.jid".split; |
6 local t_concat = table.concat; |
6 local t_concat = table.concat; |
7 |
7 |
8 local rm_remove_from_roster = require "core.rostermanager".remove_from_roster; |
8 local rm_remove_from_roster = require "core.rostermanager".remove_from_roster; |
|
9 local rm_add_to_roster = require "core.rostermanager".add_to_roster; |
9 local rm_roster_push = require "core.rostermanager".roster_push; |
10 local rm_roster_push = require "core.rostermanager".roster_push; |
10 |
11 |
11 add_iq_handler("c2s", "jabber:iq:roster", |
12 add_iq_handler("c2s", "jabber:iq:roster", |
12 function (session, stanza) |
13 function (session, stanza) |
13 if stanza.tags[1].name == "query" then |
14 if stanza.tags[1].name == "query" then |
14 if stanza.attr.type == "get" then |
15 if stanza.attr.type == "get" then |
15 local roster = st.reply(stanza) |
16 local roster = st.reply(stanza) |
16 :query("jabber:iq:roster"); |
17 :query("jabber:iq:roster"); |
17 for jid in pairs(session.roster) do |
18 for jid in pairs(session.roster) do |
18 local item = st.stanza("item", { |
19 roster:tag("item", { |
19 jid = jid, |
20 jid = jid, |
20 subscription = session.roster[jid].subscription, |
21 subscription = session.roster[jid].subscription, |
21 name = session.roster[jid].name, |
22 name = session.roster[jid].name, |
22 }); |
23 }); |
23 for group in pairs(session.roster[jid].groups) do |
24 for group in pairs(session.roster[jid].groups) do |
24 item:tag("group"):text(group):up(); |
25 roster:tag("group"):text(group):up(); |
25 end |
26 end |
26 roster:add_child(item); |
|
27 end |
27 end |
28 send(session, roster); |
28 send(session, roster); |
29 return true; |
29 return true; |
30 elseif stanza.attr.type == "set" then |
30 elseif stanza.attr.type == "set" then |
31 local query = stanza.tags[1]; |
31 local query = stanza.tags[1]; |
50 end |
50 end |
51 else |
51 else |
52 local r_item = {name = item.attr.name, groups = {}}; |
52 local r_item = {name = item.attr.name, groups = {}}; |
53 if r_item.name == "" then r_item.name = nil; end |
53 if r_item.name == "" then r_item.name = nil; end |
54 if session.roster[item.attr.jid] then |
54 if session.roster[item.attr.jid] then |
55 r_item.subscription = session.roster[item.attr.jid]; |
55 r_item.subscription = session.roster[item.attr.jid].subscription; |
56 else |
56 else |
57 r_item.subscription = "none"; |
57 r_item.subscription = "none"; |
58 end |
58 end |
59 for _, child in ipairs(item) do |
59 for _, child in ipairs(item) do |
60 if child.name == "group" then |
60 if child.name == "group" then |