Software /
code /
prosody
Annotate
plugins/mod_csi_simple.lua @ 10800:62794e065e33
MAM: Remove 1% of contents when reaching limits, fix #1545
With mod\_storage\_internal this counts out to 100 messages out of 10 000,
meaning should not hit the quota limit immediately until that many
messages have been added again.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 05 May 2020 22:21:39 +0200 |
parent | 10772:31e702c5f475 |
child | 10801:2b97aac0ea3c |
rev | line source |
---|---|
10724
7835b9f14cb8
mod_csi_simple: Allow configuring extra tags indicating importance
Kim Alvefur <zash@zash.se>
parents:
10414
diff
changeset
|
1 -- Copyright (C) 2016-2020 Kim Alvefur |
9589
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"; |
9912
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
12 local filters = require "util.filters"; |
9589
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 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
|
15 |
10724
7835b9f14cb8
mod_csi_simple: Allow configuring extra tags indicating importance
Kim Alvefur <zash@zash.se>
parents:
10414
diff
changeset
|
16 local important_payloads = module:get_option_set("csi_important_payloads", { }); |
7835b9f14cb8
mod_csi_simple: Allow configuring extra tags indicating importance
Kim Alvefur <zash@zash.se>
parents:
10414
diff
changeset
|
17 |
9589
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 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
|
19 local stanza = event.stanza; |
9632
fdefc43bffff
mod_csi_simple: Consider non-stanza objects important
Kim Alvefur <zash@zash.se>
parents:
9631
diff
changeset
|
20 if not st.is_stanza(stanza) then |
10771
c562edcf51bf
mod_csi_simple: Clarify what might not be stanzas here
Kim Alvefur <zash@zash.se>
parents:
10770
diff
changeset
|
21 -- whitespace pings etc |
9632
fdefc43bffff
mod_csi_simple: Consider non-stanza objects important
Kim Alvefur <zash@zash.se>
parents:
9631
diff
changeset
|
22 return true; |
fdefc43bffff
mod_csi_simple: Consider non-stanza objects important
Kim Alvefur <zash@zash.se>
parents:
9631
diff
changeset
|
23 end |
10770
b4cbe72966c9
mod_csi_simple: Consider nonzas important
Kim Alvefur <zash@zash.se>
parents:
10769
diff
changeset
|
24 if stanza.attr.xmlns ~= nil then |
b4cbe72966c9
mod_csi_simple: Consider nonzas important
Kim Alvefur <zash@zash.se>
parents:
10769
diff
changeset
|
25 -- stream errors, stream management etc |
b4cbe72966c9
mod_csi_simple: Consider nonzas important
Kim Alvefur <zash@zash.se>
parents:
10769
diff
changeset
|
26 return true; |
b4cbe72966c9
mod_csi_simple: Consider nonzas important
Kim Alvefur <zash@zash.se>
parents:
10769
diff
changeset
|
27 end |
9589
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 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
|
29 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
|
30 local st_type = stanza.attr.type; |
10769
8cecb85e4bc4
mod_csi_simple: Explicitly consider errors important
Kim Alvefur <zash@zash.se>
parents:
10733
diff
changeset
|
31 if st_type == "error" then |
8cecb85e4bc4
mod_csi_simple: Explicitly consider errors important
Kim Alvefur <zash@zash.se>
parents:
10733
diff
changeset
|
32 return true; |
8cecb85e4bc4
mod_csi_simple: Explicitly consider errors important
Kim Alvefur <zash@zash.se>
parents:
10733
diff
changeset
|
33 end |
9589
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 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
|
35 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
|
36 return false; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 return true; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 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
|
40 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
|
41 return false; |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 end |
9768
ab12fd48e124
mod_csi_simple: Consider messages forwarded from another of the users clients as important (fixes part of #1250)
Kim Alvefur <zash@zash.se>
parents:
9767
diff
changeset
|
43 if stanza:get_child("sent", "urn:xmpp:carbons:2") then |
ab12fd48e124
mod_csi_simple: Consider messages forwarded from another of the users clients as important (fixes part of #1250)
Kim Alvefur <zash@zash.se>
parents:
9767
diff
changeset
|
44 return true; |
ab12fd48e124
mod_csi_simple: Consider messages forwarded from another of the users clients as important (fixes part of #1250)
Kim Alvefur <zash@zash.se>
parents:
9767
diff
changeset
|
45 end |
9769
150e9574c149
mod_csi_simple: Unpack Carbons-forwarded messages (fixes part of #1250)
Kim Alvefur <zash@zash.se>
parents:
9768
diff
changeset
|
46 local forwarded = stanza:find("{urn:xmpp:carbons:2}received/{urn:xmpp:forward:0}/{jabber:client}message"); |
150e9574c149
mod_csi_simple: Unpack Carbons-forwarded messages (fixes part of #1250)
Kim Alvefur <zash@zash.se>
parents:
9768
diff
changeset
|
47 if forwarded then |
150e9574c149
mod_csi_simple: Unpack Carbons-forwarded messages (fixes part of #1250)
Kim Alvefur <zash@zash.se>
parents:
9768
diff
changeset
|
48 stanza = forwarded; |
150e9574c149
mod_csi_simple: Unpack Carbons-forwarded messages (fixes part of #1250)
Kim Alvefur <zash@zash.se>
parents:
9768
diff
changeset
|
49 end |
9767
57ceffb13963
mod_csi_simple: Tweak check for <body>
Kim Alvefur <zash@zash.se>
parents:
9651
diff
changeset
|
50 if stanza:get_child("body") then |
57ceffb13963
mod_csi_simple: Tweak check for <body>
Kim Alvefur <zash@zash.se>
parents:
9651
diff
changeset
|
51 return true; |
57ceffb13963
mod_csi_simple: Tweak check for <body>
Kim Alvefur <zash@zash.se>
parents:
9651
diff
changeset
|
52 end |
9770
76cb409db537
mod_csi_simple: Consider messages with subject (eg MUC joins) (fixes part of #1250)
Kim Alvefur <zash@zash.se>
parents:
9769
diff
changeset
|
53 if stanza:get_child("subject") then |
76cb409db537
mod_csi_simple: Consider messages with subject (eg MUC joins) (fixes part of #1250)
Kim Alvefur <zash@zash.se>
parents:
9769
diff
changeset
|
54 return true; |
76cb409db537
mod_csi_simple: Consider messages with subject (eg MUC joins) (fixes part of #1250)
Kim Alvefur <zash@zash.se>
parents:
9769
diff
changeset
|
55 end |
9771
bf92f37de137
mod_csi_simple: Consider messages encrypted payload as important (fixes part of #1250)
Kim Alvefur <zash@zash.se>
parents:
9770
diff
changeset
|
56 if stanza:get_child("encryption", "urn:xmpp:eme:0") then |
bf92f37de137
mod_csi_simple: Consider messages encrypted payload as important (fixes part of #1250)
Kim Alvefur <zash@zash.se>
parents:
9770
diff
changeset
|
57 return true; |
bf92f37de137
mod_csi_simple: Consider messages encrypted payload as important (fixes part of #1250)
Kim Alvefur <zash@zash.se>
parents:
9770
diff
changeset
|
58 end |
10733
89e0f5cb60a1
mod_csi_simple: Consider MUC invites important
Kim Alvefur <zash@zash.se>
parents:
10724
diff
changeset
|
59 if stanza:get_child("x", "jabber:x:conference") or stanza:find("{http://jabber.org/protocol/muc#user}x/invite") then |
89e0f5cb60a1
mod_csi_simple: Consider MUC invites important
Kim Alvefur <zash@zash.se>
parents:
10724
diff
changeset
|
60 return true; |
89e0f5cb60a1
mod_csi_simple: Consider MUC invites important
Kim Alvefur <zash@zash.se>
parents:
10724
diff
changeset
|
61 end |
10724
7835b9f14cb8
mod_csi_simple: Allow configuring extra tags indicating importance
Kim Alvefur <zash@zash.se>
parents:
10414
diff
changeset
|
62 for important in important_payloads do |
7835b9f14cb8
mod_csi_simple: Allow configuring extra tags indicating importance
Kim Alvefur <zash@zash.se>
parents:
10414
diff
changeset
|
63 if stanza:find(important) then |
7835b9f14cb8
mod_csi_simple: Allow configuring extra tags indicating importance
Kim Alvefur <zash@zash.se>
parents:
10414
diff
changeset
|
64 return true; |
7835b9f14cb8
mod_csi_simple: Allow configuring extra tags indicating importance
Kim Alvefur <zash@zash.se>
parents:
10414
diff
changeset
|
65 end |
7835b9f14cb8
mod_csi_simple: Allow configuring extra tags indicating importance
Kim Alvefur <zash@zash.se>
parents:
10414
diff
changeset
|
66 end |
9767
57ceffb13963
mod_csi_simple: Tweak check for <body>
Kim Alvefur <zash@zash.se>
parents:
9651
diff
changeset
|
67 return false; |
10772
31e702c5f475
mod_csi_simple: Explicitly mention iq stanzas
Kim Alvefur <zash@zash.se>
parents:
10771
diff
changeset
|
68 elseif st_name == "iq" then |
31e702c5f475
mod_csi_simple: Explicitly mention iq stanzas
Kim Alvefur <zash@zash.se>
parents:
10771
diff
changeset
|
69 return true; |
9589
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 end |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
71 end, -1); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 |
9911
ed011935c22d
mod_csi_simple: Break out stanza timestamping into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
9909
diff
changeset
|
73 local function with_timestamp(stanza, from) |
ed011935c22d
mod_csi_simple: Break out stanza timestamping into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
9909
diff
changeset
|
74 if st.is_stanza(stanza) and stanza.attr.xmlns == nil and stanza.name ~= "iq" then |
ed011935c22d
mod_csi_simple: Break out stanza timestamping into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
9909
diff
changeset
|
75 stanza = st.clone(stanza); |
ed011935c22d
mod_csi_simple: Break out stanza timestamping into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
9909
diff
changeset
|
76 stanza:add_direct_child(st.stanza("delay", {xmlns = "urn:xmpp:delay", from = from, stamp = dt.datetime()})); |
ed011935c22d
mod_csi_simple: Break out stanza timestamping into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
9909
diff
changeset
|
77 end |
ed011935c22d
mod_csi_simple: Break out stanza timestamping into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
9909
diff
changeset
|
78 return stanza; |
ed011935c22d
mod_csi_simple: Break out stanza timestamping into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
9909
diff
changeset
|
79 end |
ed011935c22d
mod_csi_simple: Break out stanza timestamping into a function for future reuse
Kim Alvefur <zash@zash.se>
parents:
9909
diff
changeset
|
80 |
9912
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
81 local function manage_buffer(stanza, session) |
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
82 local ctr = session.csi_counter or 0; |
9921
ec138e4254ed
mod_csi_simple: Improve debug logs by mentioing why the buffer gets flushed
Kim Alvefur <zash@zash.se>
parents:
9920
diff
changeset
|
83 if ctr >= queue_size then |
9923
e83dfcdeab59
mod_csi_simple: Include queue size in debug messages
Kim Alvefur <zash@zash.se>
parents:
9922
diff
changeset
|
84 session.log("debug", "Queue size limit hit, flushing buffer (queue size is %d)", session.csi_counter); |
9921
ec138e4254ed
mod_csi_simple: Improve debug logs by mentioing why the buffer gets flushed
Kim Alvefur <zash@zash.se>
parents:
9920
diff
changeset
|
85 session.conn:resume_writes(); |
ec138e4254ed
mod_csi_simple: Improve debug logs by mentioing why the buffer gets flushed
Kim Alvefur <zash@zash.se>
parents:
9920
diff
changeset
|
86 elseif module:fire_event("csi-is-stanza-important", { stanza = stanza, session = session }) then |
9923
e83dfcdeab59
mod_csi_simple: Include queue size in debug messages
Kim Alvefur <zash@zash.se>
parents:
9922
diff
changeset
|
87 session.log("debug", "Important stanza, flushing buffer (queue size is %d)", session.csi_counter); |
9912
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
88 session.conn:resume_writes(); |
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
89 else |
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
90 stanza = with_timestamp(stanza, jid.join(session.username, session.host)) |
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
91 end |
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
92 session.csi_counter = ctr + 1; |
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
93 return stanza; |
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
94 end |
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
95 |
9913
7d78b24d8449
mod_csi_simple: Trigger buffer flush on seeing incoming data
Kim Alvefur <zash@zash.se>
parents:
9912
diff
changeset
|
96 local function flush_buffer(data, session) |
10302
4c53e58d2468
mod_csi_simple: Try not to flush buffer while already flushing it
Kim Alvefur <zash@zash.se>
parents:
10277
diff
changeset
|
97 if session.csi_flushing then |
4c53e58d2468
mod_csi_simple: Try not to flush buffer while already flushing it
Kim Alvefur <zash@zash.se>
parents:
10277
diff
changeset
|
98 return data; |
4c53e58d2468
mod_csi_simple: Try not to flush buffer while already flushing it
Kim Alvefur <zash@zash.se>
parents:
10277
diff
changeset
|
99 end |
4c53e58d2468
mod_csi_simple: Try not to flush buffer while already flushing it
Kim Alvefur <zash@zash.se>
parents:
10277
diff
changeset
|
100 session.csi_flushing = true; |
9923
e83dfcdeab59
mod_csi_simple: Include queue size in debug messages
Kim Alvefur <zash@zash.se>
parents:
9922
diff
changeset
|
101 session.log("debug", "Client sent something, flushing buffer once (queue size is %d)", session.csi_counter); |
9913
7d78b24d8449
mod_csi_simple: Trigger buffer flush on seeing incoming data
Kim Alvefur <zash@zash.se>
parents:
9912
diff
changeset
|
102 session.conn:resume_writes(); |
7d78b24d8449
mod_csi_simple: Trigger buffer flush on seeing incoming data
Kim Alvefur <zash@zash.se>
parents:
9912
diff
changeset
|
103 return data; |
7d78b24d8449
mod_csi_simple: Trigger buffer flush on seeing incoming data
Kim Alvefur <zash@zash.se>
parents:
9912
diff
changeset
|
104 end |
7d78b24d8449
mod_csi_simple: Trigger buffer flush on seeing incoming data
Kim Alvefur <zash@zash.se>
parents:
9912
diff
changeset
|
105 |
9918
6e9dcec259d0
mod_csi_simple: Separate out functions to enable/disable optimizations
Kim Alvefur <zash@zash.se>
parents:
9917
diff
changeset
|
106 function enable_optimizations(session) |
10277
45a58127a3e5
mod_csi_simple: Remove duplicated check for connection
Kim Alvefur <zash@zash.se>
parents:
10025
diff
changeset
|
107 if session.conn and session.conn.pause_writes then |
9909
3229be01a08a
mod_csi_simple: Use write locks in net.server if available
Kim Alvefur <zash@zash.se>
parents:
9771
diff
changeset
|
108 session.conn:pause_writes(); |
9912
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
109 filters.add_filter(session, "stanzas/out", manage_buffer); |
9913
7d78b24d8449
mod_csi_simple: Trigger buffer flush on seeing incoming data
Kim Alvefur <zash@zash.se>
parents:
9912
diff
changeset
|
110 filters.add_filter(session, "bytes/in", flush_buffer); |
9589
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
111 else |
9917
45b5528b128a
mod_csi_simple: Remove old "pump" queue/buffer method, handled in net.server now
Kim Alvefur <zash@zash.se>
parents:
9914
diff
changeset
|
112 session.log("warn", "Session connection does not support write pausing"); |
9589
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
113 end |
9918
6e9dcec259d0
mod_csi_simple: Separate out functions to enable/disable optimizations
Kim Alvefur <zash@zash.se>
parents:
9917
diff
changeset
|
114 end |
9589
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
115 |
9922
06bf5ccd859f
mod_csi_simple: Fix type in function name
Matthew Wild <mwild1@gmail.com>
parents:
9921
diff
changeset
|
116 function disable_optimizations(session) |
10303
c434bff22b14
mod_csi_simple: Always remove session filters when disabling CSI
Kim Alvefur <zash@zash.se>
parents:
10302
diff
changeset
|
117 session.csi_flushing = nil; |
c434bff22b14
mod_csi_simple: Always remove session filters when disabling CSI
Kim Alvefur <zash@zash.se>
parents:
10302
diff
changeset
|
118 filters.remove_filter(session, "stanzas/out", manage_buffer); |
c434bff22b14
mod_csi_simple: Always remove session filters when disabling CSI
Kim Alvefur <zash@zash.se>
parents:
10302
diff
changeset
|
119 filters.remove_filter(session, "bytes/in", flush_buffer); |
10277
45a58127a3e5
mod_csi_simple: Remove duplicated check for connection
Kim Alvefur <zash@zash.se>
parents:
10025
diff
changeset
|
120 if session.conn and session.conn.resume_writes then |
9909
3229be01a08a
mod_csi_simple: Use write locks in net.server if available
Kim Alvefur <zash@zash.se>
parents:
9771
diff
changeset
|
121 session.conn:resume_writes(); |
9589
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
122 end |
9918
6e9dcec259d0
mod_csi_simple: Separate out functions to enable/disable optimizations
Kim Alvefur <zash@zash.se>
parents:
9917
diff
changeset
|
123 end |
6e9dcec259d0
mod_csi_simple: Separate out functions to enable/disable optimizations
Kim Alvefur <zash@zash.se>
parents:
9917
diff
changeset
|
124 |
6e9dcec259d0
mod_csi_simple: Separate out functions to enable/disable optimizations
Kim Alvefur <zash@zash.se>
parents:
9917
diff
changeset
|
125 module:hook("csi-client-inactive", function (event) |
6e9dcec259d0
mod_csi_simple: Separate out functions to enable/disable optimizations
Kim Alvefur <zash@zash.se>
parents:
9917
diff
changeset
|
126 local session = event.origin; |
6e9dcec259d0
mod_csi_simple: Separate out functions to enable/disable optimizations
Kim Alvefur <zash@zash.se>
parents:
9917
diff
changeset
|
127 enable_optimizations(session); |
6e9dcec259d0
mod_csi_simple: Separate out functions to enable/disable optimizations
Kim Alvefur <zash@zash.se>
parents:
9917
diff
changeset
|
128 end); |
6e9dcec259d0
mod_csi_simple: Separate out functions to enable/disable optimizations
Kim Alvefur <zash@zash.se>
parents:
9917
diff
changeset
|
129 |
6e9dcec259d0
mod_csi_simple: Separate out functions to enable/disable optimizations
Kim Alvefur <zash@zash.se>
parents:
9917
diff
changeset
|
130 module:hook("csi-client-active", function (event) |
6e9dcec259d0
mod_csi_simple: Separate out functions to enable/disable optimizations
Kim Alvefur <zash@zash.se>
parents:
9917
diff
changeset
|
131 local session = event.origin; |
9922
06bf5ccd859f
mod_csi_simple: Fix type in function name
Matthew Wild <mwild1@gmail.com>
parents:
9921
diff
changeset
|
132 disable_optimizations(session); |
9589
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
133 end); |
aeb054ee88c5
mod_csi_simple: Import modified version of mod_csi_pump from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
134 |
10025
4498f601516d
mod_csi_simple: Disable optimizations on disconnect (fixes #1358)
Kim Alvefur <zash@zash.se>
parents:
9923
diff
changeset
|
135 module:hook("pre-resource-unbind", function (event) |
4498f601516d
mod_csi_simple: Disable optimizations on disconnect (fixes #1358)
Kim Alvefur <zash@zash.se>
parents:
9923
diff
changeset
|
136 local session = event.session; |
4498f601516d
mod_csi_simple: Disable optimizations on disconnect (fixes #1358)
Kim Alvefur <zash@zash.se>
parents:
9923
diff
changeset
|
137 disable_optimizations(session); |
10414
51ebfdeccad7
mod_csi_simple: Make sure to disable optimizations before mod_smacks (thanks pep.)
Kim Alvefur <zash@zash.se>
parents:
10303
diff
changeset
|
138 end, 1); |
9912
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
139 |
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
140 module:hook("c2s-ondrain", function (event) |
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
141 local session = event.session; |
10277
45a58127a3e5
mod_csi_simple: Remove duplicated check for connection
Kim Alvefur <zash@zash.se>
parents:
10025
diff
changeset
|
142 if session.state == "inactive" and session.conn and session.conn.pause_writes then |
9923
e83dfcdeab59
mod_csi_simple: Include queue size in debug messages
Kim Alvefur <zash@zash.se>
parents:
9922
diff
changeset
|
143 session.conn:pause_writes(); |
e83dfcdeab59
mod_csi_simple: Include queue size in debug messages
Kim Alvefur <zash@zash.se>
parents:
9922
diff
changeset
|
144 session.log("debug", "Buffer flushed, resuming inactive mode (queue size was %d)", session.csi_counter); |
9912
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
145 session.csi_counter = 0; |
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
146 end |
601f9781a605
mod_csi_simple: Count buffered items and flush when it reaches configured limit
Kim Alvefur <zash@zash.se>
parents:
9911
diff
changeset
|
147 end); |
9919
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
148 |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
149 function module.load() |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
150 for _, user_session in pairs(prosody.hosts[module.host].sessions) do |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
151 for _, session in pairs(user_session.sessions) do |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
152 if session.state == "inactive" then |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
153 enable_optimizations(session); |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
154 end |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
155 end |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
156 end |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
157 end |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
158 |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
159 function module.unload() |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
160 for _, user_session in pairs(prosody.hosts[module.host].sessions) do |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
161 for _, session in pairs(user_session.sessions) do |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
162 if session.state == "inactive" then |
9922
06bf5ccd859f
mod_csi_simple: Fix type in function name
Matthew Wild <mwild1@gmail.com>
parents:
9921
diff
changeset
|
163 disable_optimizations(session); |
9919
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
164 end |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
165 end |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
166 end |
d602a495409b
mod_csi_simple: Disable optimizations on unload and re-enable on load
Kim Alvefur <zash@zash.se>
parents:
9918
diff
changeset
|
167 end |