Comparison

core/sessionmanager.lua @ 4230:23b68616b6d8

sessionmanager: Fire pre-resource-unbind to allow plugins (such as mod_smacks) to hook and prevent/override session destruction
author Matthew Wild <mwild1@gmail.com>
date Tue, 29 Mar 2011 14:10:00 +0100
parent 3459:543f31cdde19
child 4263:618e2a2b2d2c
comparison
equal deleted inserted replaced
4229:f15b4e9ba688 4230:23b68616b6d8
106 (session.log or log)("info", "Destroying session for %s (%s@%s)", session.full_jid or "(unknown)", session.username or "(unknown)", session.host or "(unknown)"); 106 (session.log or log)("info", "Destroying session for %s (%s@%s)", session.full_jid or "(unknown)", session.username or "(unknown)", session.host or "(unknown)");
107 if session.destroyed then return; end 107 if session.destroyed then return; end
108 108
109 -- Remove session/resource from user's session list 109 -- Remove session/resource from user's session list
110 if session.full_jid then 110 if session.full_jid then
111 hosts[session.host].sessions[session.username].sessions[session.resource] = nil; 111 local host_session = hosts[session.host];
112
113 -- Allow plugins to prevent session destruction
114 if host_session.events.fire_event("pre-resource-unbind", {session=session, error=err}) then
115 return;
116 end
117
118 host_session.sessions[session.username].sessions[session.resource] = nil;
112 full_sessions[session.full_jid] = nil; 119 full_sessions[session.full_jid] = nil;
113 120
114 if not next(hosts[session.host].sessions[session.username].sessions) then 121 if not next(host_session.sessions[session.username].sessions) then
115 log("debug", "All resources of %s are now offline", session.username); 122 log("debug", "All resources of %s are now offline", session.username);
116 hosts[session.host].sessions[session.username] = nil; 123 host_session.sessions[session.username] = nil;
117 bare_sessions[session.username..'@'..session.host] = nil; 124 bare_sessions[session.username..'@'..session.host] = nil;
118 end 125 end
119 126
120 hosts[session.host].events.fire_event("resource-unbind", {session=session, error=err}); 127 host_session.events.fire_event("resource-unbind", {session=session, error=err});
121 end 128 end
122 129
123 retire_session(session); 130 retire_session(session);
124 end 131 end
125 132