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});