Software /
code /
prosody
Diff
core/sessionmanager.lua @ 3116:90a98a6b52ac
Merge 0.7->trunk
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sun, 23 May 2010 23:11:00 +0100 (2010-05-23) |
parent | 3091:d6a059af2077 |
child | 3143:887a6374f51c |
child | 3236:4727b2b0e069 |
line wrap: on
line diff
--- a/core/sessionmanager.lua Sat May 22 20:51:01 2010 +0200 +++ b/core/sessionmanager.lua Sun May 23 23:11:00 2010 +0100 @@ -136,7 +136,7 @@ local sessions = hosts[session.host].sessions[session.username].sessions; local limit = config_get(session.host, "core", "max_resources") or 10; if #sessions >= limit then - return nil, "cancel", "conflict", "Resource limit reached; only "..limit.." resources allowed"; + return nil, "cancel", "resource-constraint", "Resource limit reached; only "..limit.." resources allowed"; end if sessions[resource] then -- Resource conflict @@ -174,7 +174,19 @@ hosts[session.host].sessions[session.username].sessions[resource] = session; full_sessions[session.full_jid] = session; - session.roster = rm_load_roster(session.username, session.host); + local err; + session.roster, err = rm_load_roster(session.username, session.host); + if err then + full_sessions[session.full_jid] = nil; + hosts[session.host].sessions[session.username].sessions[resource] = nil; + session.full_jid = nil; + session.resource = nil; + if next(bare_sessions[session.username..'@'..session.host].sessions) == nil then + bare_sessions[session.username..'@'..session.host] = nil; + hosts[session.host].sessions[session.username] = nil; + end + return nil, "cancel", "internal-server-error", "Error loading roster"; + end hosts[session.host].events.fire_event("resource-bind", {session=session});