Diff

core/sessionmanager.lua @ 4238:05f991b4a90e

Merge 0.8->trunk
author Matthew Wild <mwild1@gmail.com>
date Tue, 05 Apr 2011 13:26:43 +0100
parent 4230:23b68616b6d8
child 4263:618e2a2b2d2c
line wrap: on
line diff
--- a/core/sessionmanager.lua	Fri Mar 18 10:33:38 2011 +0000
+++ b/core/sessionmanager.lua	Tue Apr 05 13:26:43 2011 +0100
@@ -108,16 +108,23 @@
 	
 	-- Remove session/resource from user's session list
 	if session.full_jid then
-		hosts[session.host].sessions[session.username].sessions[session.resource] = nil;
+		local host_session = hosts[session.host];
+		
+		-- Allow plugins to prevent session destruction
+		if host_session.events.fire_event("pre-resource-unbind", {session=session, error=err}) then
+			return;
+		end
+		
+		host_session.sessions[session.username].sessions[session.resource] = nil;
 		full_sessions[session.full_jid] = nil;
 		
-		if not next(hosts[session.host].sessions[session.username].sessions) then
+		if not next(host_session.sessions[session.username].sessions) then
 			log("debug", "All resources of %s are now offline", session.username);
-			hosts[session.host].sessions[session.username] = nil;
+			host_session.sessions[session.username] = nil;
 			bare_sessions[session.username..'@'..session.host] = nil;
 		end
 
-		hosts[session.host].events.fire_event("resource-unbind", {session=session, error=err});
+		host_session.events.fire_event("resource-unbind", {session=session, error=err});
 	end
 	
 	retire_session(session);