Software /
code /
prosody
Annotate
plugins/mod_csi_simple.lua @ 9631:d6104aaf94bc 0.11
mod_csi_simple: Skip delay tags on objects other than stanzas (thanks quest)
This may be triggered by sending strings, eg as done by mod_c2s for
keepalives, stream errors, "</stream>".
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 17 Nov 2018 15:28:49 +0100 |
parent | 9589:aeb054ee88c5 |
child | 9632:fdefc43bffff |
rev | line source |
---|---|
9589
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 -- Copyright (C) 2016-2018 Kim Alvefur |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 -- |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 -- This project is MIT/X11 licensed. Please see the |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 -- COPYING file in the source package for more information. |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 -- |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 module:depends"csi" |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 local jid = require "util.jid"; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 local st = require "util.stanza"; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 local dt = require "util.datetime"; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 local new_queue = require "util.queue".new; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 local function new_pump(output, ...) |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 -- luacheck: ignore 212/self |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 local q = new_queue(...); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 local flush = true; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 function q:pause() |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 flush = false; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 function q:resume() |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 flush = true; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 return q:flush(); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 local push = q.push; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 function q:push(item) |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 local ok = push(self, item); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 if not ok then |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 q:flush(); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 output(item, self); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 elseif flush then |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 return q:flush(); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 return true; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 function q:flush() |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 local item = self:pop(); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 while item do |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 output(item, self); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 item = self:pop(); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 return true; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 return q; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 local queue_size = module:get_option_number("csi_queue_size", 256); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 module:hook("csi-is-stanza-important", function (event) |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 local stanza = event.stanza; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 local st_name = stanza.name; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 if not st_name then return false; end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 local st_type = stanza.attr.type; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 if st_name == "presence" then |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 if st_type == nil or st_type == "unavailable" then |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 return false; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 return true; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 elseif st_name == "message" then |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 if st_type == "headline" then |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 return false; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 local body = stanza:get_child_text("body"); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 return body; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 return true; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
67 end, -1); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 module:hook("csi-client-inactive", function (event) |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 local session = event.origin; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
71 if session.pump then |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 session.pump:pause(); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 else |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 local bare_jid = jid.join(session.username, session.host); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 local send = session.send; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 session._orig_send = send; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 local pump = new_pump(session.send, queue_size); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 pump:pause(); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 session.pump = pump; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 function session.send(stanza) |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 if module:fire_event("csi-stanza-is-important", { stanza = stanza, session = session }) then |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
82 pump:flush(); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
83 send(stanza); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 else |
9631
d6104aaf94bc
mod_csi_simple: Skip delay tags on objects other than stanzas (thanks quest)
Kim Alvefur <zash@zash.se>
parents:
9589
diff
changeset
|
85 if st.is_stanza(stanza) then |
d6104aaf94bc
mod_csi_simple: Skip delay tags on objects other than stanzas (thanks quest)
Kim Alvefur <zash@zash.se>
parents:
9589
diff
changeset
|
86 stanza = st.clone(stanza); |
d6104aaf94bc
mod_csi_simple: Skip delay tags on objects other than stanzas (thanks quest)
Kim Alvefur <zash@zash.se>
parents:
9589
diff
changeset
|
87 stanza:add_direct_child(st.stanza("delay", {xmlns = "urn:xmpp:delay", from = bare_jid, stamp = dt.datetime()})); |
d6104aaf94bc
mod_csi_simple: Skip delay tags on objects other than stanzas (thanks quest)
Kim Alvefur <zash@zash.se>
parents:
9589
diff
changeset
|
88 end |
9589
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
89 pump:push(stanza); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
90 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
91 return true; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
92 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 end); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
95 |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 module:hook("csi-client-active", function (event) |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 local session = event.origin; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 if session.pump then |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
99 session.pump:resume(); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
100 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 end); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 |