Software / code / prosody
Comparison
core/rostermanager.lua @ 6787:ad64e2eacd0e
rostermanager: Add forward declarations
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 08 Apr 2015 00:44:30 +0200 |
| parent | 6779:6236668da30a |
| child | 7064:b98006bfd97a |
comparison
equal
deleted
inserted
replaced
| 6786:3deeb38d79ab | 6787:ad64e2eacd0e |
|---|---|
| 21 local datamanager = require "util.datamanager" | 21 local datamanager = require "util.datamanager" |
| 22 local um_user_exists = require "core.usermanager".user_exists; | 22 local um_user_exists = require "core.usermanager".user_exists; |
| 23 local st = require "util.stanza"; | 23 local st = require "util.stanza"; |
| 24 | 24 |
| 25 local _ENV = nil; | 25 local _ENV = nil; |
| 26 | |
| 27 local save_roster; -- forward declaration | |
| 26 | 28 |
| 27 local function add_to_roster(session, jid, item) | 29 local function add_to_roster(session, jid, item) |
| 28 if session.roster then | 30 if session.roster then |
| 29 local old_item = session.roster[jid]; | 31 local old_item = session.roster[jid]; |
| 30 session.roster[jid] = item; | 32 session.roster[jid] = item; |
| 119 hosts[host].events.fire_event("roster-load", { username = username, host = host, roster = roster }); | 121 hosts[host].events.fire_event("roster-load", { username = username, host = host, roster = roster }); |
| 120 end | 122 end |
| 121 return roster, err; | 123 return roster, err; |
| 122 end | 124 end |
| 123 | 125 |
| 124 local function save_roster(username, host, roster) | 126 function save_roster(username, host, roster) |
| 125 if not um_user_exists(username, host) then | 127 if not um_user_exists(username, host) then |
| 126 log("debug", "not saving roster for %s@%s: the user doesn't exist", username, host); | 128 log("debug", "not saving roster for %s@%s: the user doesn't exist", username, host); |
| 127 return nil; | 129 return nil; |
| 128 end | 130 end |
| 129 | 131 |
| 159 item.ask = nil; | 161 item.ask = nil; |
| 160 return save_roster(username, host, roster); | 162 return save_roster(username, host, roster); |
| 161 end | 163 end |
| 162 end | 164 end |
| 163 | 165 |
| 166 local is_contact_pending_out -- forward declaration | |
| 167 | |
| 164 local function process_inbound_subscription_cancellation(username, host, jid) | 168 local function process_inbound_subscription_cancellation(username, host, jid) |
| 165 local roster = load_roster(username, host); | 169 local roster = load_roster(username, host); |
| 166 local item = roster[jid]; | 170 local item = roster[jid]; |
| 167 local changed = nil; | 171 local changed = nil; |
| 168 if is_contact_pending_out(username, host, jid) then | 172 if is_contact_pending_out(username, host, jid) then |
| 181 if changed then | 185 if changed then |
| 182 return save_roster(username, host, roster); | 186 return save_roster(username, host, roster); |
| 183 end | 187 end |
| 184 end | 188 end |
| 185 | 189 |
| 190 local is_contact_pending_in -- forward declaration | |
| 191 | |
| 186 local function process_inbound_unsubscribe(username, host, jid) | 192 local function process_inbound_unsubscribe(username, host, jid) |
| 187 local roster = load_roster(username, host); | 193 local roster = load_roster(username, host); |
| 188 local item = roster[jid]; | 194 local item = roster[jid]; |
| 189 local changed = nil; | 195 local changed = nil; |
| 190 if is_contact_pending_in(username, host, jid) then | 196 if is_contact_pending_in(username, host, jid) then |
| 221 local roster, err = load_roster(username, host); | 227 local roster, err = load_roster(username, host); |
| 222 local item = roster[jid]; | 228 local item = roster[jid]; |
| 223 return item and (item.subscription == "from" or item.subscription == "both"), err; | 229 return item and (item.subscription == "from" or item.subscription == "both"), err; |
| 224 end | 230 end |
| 225 | 231 |
| 226 local function is_contact_pending_in(username, host, jid) | 232 function is_contact_pending_in(username, host, jid) |
| 227 local roster = load_roster(username, host); | 233 local roster = load_roster(username, host); |
| 228 return roster[false].pending[jid]; | 234 return roster[false].pending[jid]; |
| 229 end | 235 end |
| 230 local function set_contact_pending_in(username, host, jid) | 236 local function set_contact_pending_in(username, host, jid) |
| 231 local roster = load_roster(username, host); | 237 local roster = load_roster(username, host); |
| 234 return; -- false | 240 return; -- false |
| 235 end | 241 end |
| 236 roster[false].pending[jid] = true; | 242 roster[false].pending[jid] = true; |
| 237 return save_roster(username, host, roster); | 243 return save_roster(username, host, roster); |
| 238 end | 244 end |
| 239 local function is_contact_pending_out(username, host, jid) | 245 function is_contact_pending_out(username, host, jid) |
| 240 local roster = load_roster(username, host); | 246 local roster = load_roster(username, host); |
| 241 local item = roster[jid]; | 247 local item = roster[jid]; |
| 242 return item and item.ask; | 248 return item and item.ask; |
| 243 end | 249 end |
| 244 local function set_contact_pending_out(username, host, jid) -- subscribe | 250 local function set_contact_pending_out(username, host, jid) -- subscribe |