sessionmanager: Fire pre-resource-unbind to allow plugins (such as mod_smacks) to hook and prevent/override session destruction

vault/0.11
Matthew Wild 15 years ago
parent 1f049ed80d
commit 4e83c7ddd6
  1. 15
      core/sessionmanager.lua

@ -108,16 +108,23 @@ function destroy_session(session, err)
-- 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);

Loading…
Cancel
Save