- log("debug", "load_roster: asked for: "..username.."@"..host);
- if hosts[host] and hosts[host].sessions[username] then
- local roster = hosts[host].sessions[username].roster;
- if not roster then
- log("debug", "load_roster: loading for new user: "..username.."@"..host);
- roster = datamanager.load(username, host, "roster") or {};
- hosts[host].sessions[username].roster = roster;
- end
- return roster;
+ local jid = username.."@"..host;
+ log("debug", "load_roster: asked for: %s", jid);
+ local user = bare_sessions[jid];
+ local roster;
+ if user then
+ roster = user.roster;
+ if roster then return roster; end
+ log("debug", "load_roster: loading for new user: %s@%s", username, host);
+ else -- Attempt to load roster for non-loaded user
+ log("debug", "load_roster: loading for offline user: %s@%s", username, host);
+ end
+ local data, err = datamanager.load(username, host, "roster");
+ roster = data or {};
+ if user then user.roster = roster; end
+ if not roster[false] then roster[false] = { broken = err or nil }; end
+ if roster[jid] then
+ roster[jid] = nil;
+ log("warn", "roster for %s has a self-contact", jid);