Merge 0.10->trunk
authorKim Alvefur <zash@zash.se>
Fri, 25 Sep 2015 16:08:25 +0000 (18:08 +0200)
committerKim Alvefur <zash@zash.se>
Fri, 25 Sep 2015 16:08:25 +0000 (18:08 +0200)
net/dns.lua
plugins/mod_pep.lua

index 80bd895c3132ec441644ced22e1468d1dbc3b57d..d893e38f5cc982cc4b3e9bf53a8a5e5f3dccdd42 100644 (file)
@@ -853,9 +853,7 @@ function resolver:receive(rset)    -- - - - - - - - - - - - - - - - -  receive
                                        --self.print(response);
 
                                        for j,rr in pairs(response.answer) do
-                                               if rr.name:sub(-#response.question[1].name, -1) == response.question[1].name then
-                                                       self:remember(rr, response.question[1].type)
-                                               end
+                                               self:remember(rr, response.question[1].type)
                                        end
 
                                        -- retire the query
index a6916d1f8963b5345bace705d454be985df0590e..896f3e78b764842d04dfaee7c410d806f7c6ad38 100644 (file)
@@ -16,10 +16,15 @@ 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 = {};
+-- data[user_bare_jid][node] = item_stanza
 local data = {};
+--- recipients[user_bare_jid][contact_full_jid][subscribed_node] = true
 local recipients = {};
+-- hash_map[hash][subscribed_nodes] = true
 local hash_map = {};
 
 module.save = function()
@@ -120,6 +125,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 +291,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);