diff options
author | Matthew Wild <mwild1@gmail.com> | 2015-09-25 16:48:25 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2015-09-25 16:48:25 +0100 |
commit | 853f18a9cbbc25b6830f7edabdf135f3165c60ec (patch) | |
tree | eb0c521d8f585edf6c59b8919473e3a5c9988358 /plugins | |
parent | f2f24a13e074898e269169cbeb599cf3cb598dcc (diff) | |
download | prosody-853f18a9cbbc25b6830f7edabdf135f3165c60ec.tar.gz prosody-853f18a9cbbc25b6830f7edabdf135f3165c60ec.zip |
mod_pep: Don't store contacts' subscriptions to a user's nodes when that user is offline
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/mod_pep.lua | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/plugins/mod_pep.lua b/plugins/mod_pep.lua index 7b4c5ddc..22790869 100644 --- a/plugins/mod_pep.lua +++ b/plugins/mod_pep.lua @@ -16,6 +16,7 @@ local next = next; local type = type; local calculate_hash = require "util.caps".calculate_hash; local core_post_stanza = prosody.core_post_stanza; +local bare_sessions = prosody.bare_sessions; -- Used as canonical 'empty table' local NULL = {}; @@ -122,6 +123,9 @@ module:hook("presence/bare", function(event) local t = stanza.attr.type; local self = not stanza.attr.to; + -- Only cache subscriptions if user is online + if not bare_sessions[user] then return; end + if not t then -- available presence if self or subscription_presence(user, stanza.attr.from) then local recipient = stanza.attr.from; @@ -283,3 +287,11 @@ module:hook("account-disco-items", function(event) end end end); + +module:hook("resource-unbind", function (event) + local user_bare_jid = event.session.username.."@"..event.session.host; + if not bare_sessions[user_bare_jid] then -- User went offline + -- We don't need this info cached anymore, clear it. + recipients[user_bare_jid] = nil; + end +end); |