Software /
code /
prosody
Comparison
plugins/mod_roster.lua @ 2907:767864297afe
mod_roster: Tidier code for the roster versioning logic
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 22 Mar 2010 01:54:22 +0000 |
parent | 2611:c3ea4d3f857f |
child | 2925:692b3c6c5bd2 |
comparison
equal
deleted
inserted
replaced
2906:2b54ef7cec32 | 2907:767864297afe |
---|---|
34 function (session, stanza) | 34 function (session, stanza) |
35 if stanza.tags[1].name == "query" then | 35 if stanza.tags[1].name == "query" then |
36 if stanza.attr.type == "get" then | 36 if stanza.attr.type == "get" then |
37 local roster = st.reply(stanza); | 37 local roster = st.reply(stanza); |
38 | 38 |
39 local ver = stanza.tags[1].attr.ver | 39 local client_ver = tonumber(stanza.tags[1].attr.ver); |
40 local server_ver = tonumber(session.roster[false].version or 1); | |
40 | 41 |
41 if (not ver) or tonumber(ver) ~= (session.roster[false].version or 1) then | 42 if not (client_ver and server_ver) or client_ver ~= server_ver then |
42 roster:query("jabber:iq:roster"); | 43 roster:query("jabber:iq:roster"); |
43 -- Client does not support versioning, or has stale roster | 44 -- Client does not support versioning, or has stale roster |
44 for jid in pairs(session.roster) do | 45 for jid in pairs(session.roster) do |
45 if jid ~= "pending" and jid then | 46 if jid ~= "pending" and jid then |
46 roster:tag("item", { | 47 roster:tag("item", { |
53 roster:tag("group"):text(group):up(); | 54 roster:tag("group"):text(group):up(); |
54 end | 55 end |
55 roster:up(); -- move out from item | 56 roster:up(); -- move out from item |
56 end | 57 end |
57 end | 58 end |
58 roster.tags[1].attr.ver = tostring(session.roster[false].version or "1"); | 59 roster.tags[1].attr.ver = server_ver; |
59 end | 60 end |
60 session.send(roster); | 61 session.send(roster); |
61 session.interested = true; -- resource is interested in roster updates | 62 session.interested = true; -- resource is interested in roster updates |
62 return true; | 63 return true; |
63 elseif stanza.attr.type == "set" then | 64 elseif stanza.attr.type == "set" then |