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