annotate mod_delay/mod_delay.lua @ 2712:d89ab70808f6

mod_cloud_notify: fix bug when multiple resources are used This bug was triggered under the rare circumstances that a message arrived and one resource was smacks hibernated while the other one(s) were offline. Then only the hibernated resource but not the offline one(s) (or the other way round) got notified.
author tmolitor <thilo@eightysoft.de>
date Mon, 08 May 2017 18:24:29 +0200
parents 05248d5a7166
children 5e94061c1aa7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2393
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
1 local add_filter = require "util.filters".add_filter;
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
2 local remove_filter = require "util.filters".remove_filter;
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
3 local datetime = require "util.datetime";
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
4
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
5 local xmlns_delay = "urn:xmpp:delay";
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
6
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
7 -- Raise an error if the modules has been loaded as a component in prosody's config
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
8 if module:get_host_type() == "component" then
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
9 error(module.name.." should NOT be loaded as a component, check out http://prosody.im/doc/components", 0);
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
10 end
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
11
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
12 local add_delay = function(stanza, session)
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
13 if stanza and stanza.name == "message" and stanza:get_child("delay", xmlns_delay) == nil then
2435
05248d5a7166 mod_delay: Only add delay to messages of type chat or groupchat (fixes #811)
tmolitor <thilo@eightysoft.de>
parents: 2393
diff changeset
14 -- only add delay tag to chat or groupchat messages (should we add a delay to anything else, too???)
05248d5a7166 mod_delay: Only add delay to messages of type chat or groupchat (fixes #811)
tmolitor <thilo@eightysoft.de>
parents: 2393
diff changeset
15 if stanza.attr.type == "chat" or stanza.attr.type == "groupchat" then
05248d5a7166 mod_delay: Only add delay to messages of type chat or groupchat (fixes #811)
tmolitor <thilo@eightysoft.de>
parents: 2393
diff changeset
16 -- session.log("debug", "adding delay to message %s", tostring(stanza));
05248d5a7166 mod_delay: Only add delay to messages of type chat or groupchat (fixes #811)
tmolitor <thilo@eightysoft.de>
parents: 2393
diff changeset
17 stanza = stanza:tag("delay", { xmlns = xmlns_delay, from = session.host, stamp = datetime.datetime()});
05248d5a7166 mod_delay: Only add delay to messages of type chat or groupchat (fixes #811)
tmolitor <thilo@eightysoft.de>
parents: 2393
diff changeset
18 end
2393
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
19 end
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
20 return stanza;
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
21 end
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
22
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
23 module:hook("resource-bind", function(event)
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
24 add_filter(event.session, "stanzas/in", add_delay, 1);
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
25 end);
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
26
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
27 module:hook("pre-resource-unbind", function (event)
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
28 remove_filter(event.session, "stanzas/in", add_delay);
3b2c94ea0c2e mod_delay: initial commit
tmolitor <thilo@eightysoft.de>
parents:
diff changeset
29 end);