annotate plugins/mod_limits.lua @ 14024:f65302ea37b0 13.0 13.0.3

mod_limits: Allow configuration of general 's2s' limit, and have s2sout inherit from s2sin Most people don't currently have a limit set for s2sout, as usually such sessions don't have significant incoming traffic. However, having limits in place is still sensible, especially with the rising use of bidi. The goal here is to switch people to a general 's2s' limit, which s2sin and s2sout both inherit from. Due to the widespread existence of 's2sin' in existing configurations, s2sout will inherit from that unless explicitly set.
author Matthew Wild <mwild1@gmail.com>
date Mon, 05 Jan 2026 11:35:32 +0000
parents c8d949cf6b09
children 4087c5b600b1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8453
6b3e7fddd723 mod_limits: Fix typo in comment
Kim Alvefur <zash@zash.se>
parents: 8269
diff changeset
1 -- Because we deal with pre-authed sessions and streams we can't be host-specific
8256
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 module:set_global();
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3
12977
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 11735
diff changeset
4 local filters = require "prosody.util.filters";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 11735
diff changeset
5 local throttle = require "prosody.util.throttle";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 11735
diff changeset
6 local timer = require "prosody.util.timer";
8269
25237002aba4 mod_limits: Handle fractional outstanding balance values (caused by e3f7b6fa46ba)
Matthew Wild <mwild1@gmail.com>
parents: 8256
diff changeset
7 local ceil = math.ceil;
8256
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 local limits_cfg = module:get_option("limits", {});
13209
c8d949cf6b09 plugins: Switch to :get_option_period() for time range options
Kim Alvefur <zash@zash.se>
parents: 12977
diff changeset
10 local limits_resolution = module:get_option_period("limits_resolution", 1);
8256
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 local default_bytes_per_second = 3000;
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 local default_burst = 2;
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 local rate_units = { b = 1, k = 3, m = 6, g = 9, t = 12 } -- Plan for the future.
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 local function parse_rate(rate, sess_type)
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 local quantity, unit, exp;
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 if rate then
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 quantity, unit = rate:match("^(%d+) ?([^/]+)/s$");
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 exp = quantity and rate_units[unit:sub(1,1):lower()];
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 end
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 if not exp then
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 module:log("error", "Error parsing rate for %s: %q, using default rate (%d bytes/s)", sess_type, rate, default_bytes_per_second);
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 return default_bytes_per_second;
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 end
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 return quantity*(10^exp);
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 end
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 local function parse_burst(burst, sess_type)
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 if type(burst) == "string" then
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 burst = burst:match("^(%d+) ?s$");
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 end
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 local n_burst = tonumber(burst);
11550
929de6ade6b6 mod_limits: Don't emit error when no burst period is configured
Matthew Wild <mwild1@gmail.com>
parents: 8803
diff changeset
34 if burst and not n_burst then
10111
0f335815244f plugins: Remove tostring call from logging
Kim Alvefur <zash@zash.se>
parents: 10099
diff changeset
35 module:log("error", "Unable to parse burst for %s: %q, using default burst interval (%ds)", sess_type, burst, default_burst);
8256
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 end
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 return n_burst or default_burst;
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 end
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 -- Process config option into limits table:
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 -- limits = { c2s = { bytes_per_second = X, burst_seconds = Y } }
11554
db8e41eb6eff mod_limits: Use default limits if none configured
Matthew Wild <mwild1@gmail.com>
parents: 11550
diff changeset
42 local limits = {
db8e41eb6eff mod_limits: Use default limits if none configured
Matthew Wild <mwild1@gmail.com>
parents: 11550
diff changeset
43 c2s = {
db8e41eb6eff mod_limits: Use default limits if none configured
Matthew Wild <mwild1@gmail.com>
parents: 11550
diff changeset
44 bytes_per_second = 10 * 1024;
db8e41eb6eff mod_limits: Use default limits if none configured
Matthew Wild <mwild1@gmail.com>
parents: 11550
diff changeset
45 burst_seconds = 2;
db8e41eb6eff mod_limits: Use default limits if none configured
Matthew Wild <mwild1@gmail.com>
parents: 11550
diff changeset
46 };
14024
f65302ea37b0 mod_limits: Allow configuration of general 's2s' limit, and have s2sout inherit from s2sin
Matthew Wild <mwild1@gmail.com>
parents: 13209
diff changeset
47 s2s = {
11554
db8e41eb6eff mod_limits: Use default limits if none configured
Matthew Wild <mwild1@gmail.com>
parents: 11550
diff changeset
48 bytes_per_second = 30 * 1024;
db8e41eb6eff mod_limits: Use default limits if none configured
Matthew Wild <mwild1@gmail.com>
parents: 11550
diff changeset
49 burst_seconds = 2;
db8e41eb6eff mod_limits: Use default limits if none configured
Matthew Wild <mwild1@gmail.com>
parents: 11550
diff changeset
50 };
db8e41eb6eff mod_limits: Use default limits if none configured
Matthew Wild <mwild1@gmail.com>
parents: 11550
diff changeset
51 };
8256
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 for sess_type, sess_limits in pairs(limits_cfg) do
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 limits[sess_type] = {
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55 bytes_per_second = parse_rate(sess_limits.rate, sess_type);
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 burst_seconds = parse_burst(sess_limits.burst, sess_type);
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 };
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 end
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59
14024
f65302ea37b0 mod_limits: Allow configuration of general 's2s' limit, and have s2sout inherit from s2sin
Matthew Wild <mwild1@gmail.com>
parents: 13209
diff changeset
60 if not limits.s2sin and limits.s2s then
f65302ea37b0 mod_limits: Allow configuration of general 's2s' limit, and have s2sout inherit from s2sin
Matthew Wild <mwild1@gmail.com>
parents: 13209
diff changeset
61 limits.s2sin = limits.s2s;
f65302ea37b0 mod_limits: Allow configuration of general 's2s' limit, and have s2sout inherit from s2sin
Matthew Wild <mwild1@gmail.com>
parents: 13209
diff changeset
62 end
f65302ea37b0 mod_limits: Allow configuration of general 's2s' limit, and have s2sout inherit from s2sin
Matthew Wild <mwild1@gmail.com>
parents: 13209
diff changeset
63 if not limits.s2sout then
f65302ea37b0 mod_limits: Allow configuration of general 's2s' limit, and have s2sout inherit from s2sin
Matthew Wild <mwild1@gmail.com>
parents: 13209
diff changeset
64 limits.s2sout = limits.s2s or limits.s2sin;
f65302ea37b0 mod_limits: Allow configuration of general 's2s' limit, and have s2sout inherit from s2sin
Matthew Wild <mwild1@gmail.com>
parents: 13209
diff changeset
65 end
f65302ea37b0 mod_limits: Allow configuration of general 's2s' limit, and have s2sout inherit from s2sin
Matthew Wild <mwild1@gmail.com>
parents: 13209
diff changeset
66
8256
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 local default_filter_set = {};
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 function default_filter_set.bytes_in(bytes, session)
9941
a2f8d54dd445 mod_limits: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 8803
diff changeset
70 local sess_throttle = session.throttle;
a2f8d54dd445 mod_limits: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 8803
diff changeset
71 if sess_throttle then
10551
27b275633156 mod_limits: Remove an unused variable
Kim Alvefur <zash@zash.se>
parents: 10111
diff changeset
72 local ok, _, outstanding = sess_throttle:poll(#bytes, true);
8256
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73 if not ok then
9941
a2f8d54dd445 mod_limits: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 8803
diff changeset
74 session.log("debug", "Session over rate limit (%d) with %d (by %d), pausing", sess_throttle.max, #bytes, outstanding);
8269
25237002aba4 mod_limits: Handle fractional outstanding balance values (caused by e3f7b6fa46ba)
Matthew Wild <mwild1@gmail.com>
parents: 8256
diff changeset
75 outstanding = ceil(outstanding);
8256
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76 session.conn:pause(); -- Read no more data from the connection until there is no outstanding data
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77 local outstanding_data = bytes:sub(-outstanding);
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
78 bytes = bytes:sub(1, #bytes-outstanding);
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
79 timer.add_task(limits_resolution, function ()
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
80 if not session.conn then return; end
9941
a2f8d54dd445 mod_limits: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 8803
diff changeset
81 if sess_throttle:peek(#outstanding_data) then
8256
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
82 session.log("debug", "Resuming paused session");
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83 session.conn:resume();
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
84 end
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
85 -- Handle what we can of the outstanding data
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
86 session.data(outstanding_data);
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
87 end);
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 end
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
89 end
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
90 return bytes;
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91 end
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
92
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
93 local type_filters = {
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
94 c2s = default_filter_set;
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
95 s2sin = default_filter_set;
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
96 s2sout = default_filter_set;
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
97 };
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
98
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
99 local function filter_hook(session)
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
100 local session_type = session.type:match("^[^_]+");
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101 local filter_set, opts = type_filters[session_type], limits[session_type];
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
102 if opts then
10099
7e3196e0263e mod_limits: Use rate limiting in net.server if provided
Kim Alvefur <zash@zash.se>
parents: 9943
diff changeset
103 if session.conn and session.conn.setlimit then
7e3196e0263e mod_limits: Use rate limiting in net.server if provided
Kim Alvefur <zash@zash.se>
parents: 9943
diff changeset
104 session.conn:setlimit(opts.bytes_per_second);
7e3196e0263e mod_limits: Use rate limiting in net.server if provided
Kim Alvefur <zash@zash.se>
parents: 9943
diff changeset
105 -- Currently no burst support
7e3196e0263e mod_limits: Use rate limiting in net.server if provided
Kim Alvefur <zash@zash.se>
parents: 9943
diff changeset
106 else
7e3196e0263e mod_limits: Use rate limiting in net.server if provided
Kim Alvefur <zash@zash.se>
parents: 9943
diff changeset
107 session.throttle = throttle.create(opts.bytes_per_second * opts.burst_seconds, opts.burst_seconds);
7e3196e0263e mod_limits: Use rate limiting in net.server if provided
Kim Alvefur <zash@zash.se>
parents: 9943
diff changeset
108 filters.add_filter(session, "bytes/in", filter_set.bytes_in, 1000);
7e3196e0263e mod_limits: Use rate limiting in net.server if provided
Kim Alvefur <zash@zash.se>
parents: 9943
diff changeset
109 end
8256
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 end
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 end
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
112
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113 function module.load()
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 filters.add_filter_hook(filter_hook);
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
115 end
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117 function module.unload()
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
118 filters.remove_filter_hook(filter_hook);
cdffe33efae4 mod_limits: Import from prosody-modules 2c59f2f0c37d (fixes #129)
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
119 end
9942
b0d5f4ae92b7 mod_limits: Allow configuring a list of unrestricted JIDs (fixes #1323)
Kim Alvefur <zash@zash.se>
parents: 9941
diff changeset
120
11734
c0fc4ca74046 mod_limits: Factor out function for disabling limits allowing use from shell
Kim Alvefur <zash@zash.se>
parents: 11560
diff changeset
121 function unlimited(session)
c0fc4ca74046 mod_limits: Factor out function for disabling limits allowing use from shell
Kim Alvefur <zash@zash.se>
parents: 11560
diff changeset
122 local session_type = session.type:match("^[^_]+");
c0fc4ca74046 mod_limits: Factor out function for disabling limits allowing use from shell
Kim Alvefur <zash@zash.se>
parents: 11560
diff changeset
123 if session.conn and session.conn.setlimit then
c0fc4ca74046 mod_limits: Factor out function for disabling limits allowing use from shell
Kim Alvefur <zash@zash.se>
parents: 11560
diff changeset
124 session.conn:setlimit(0);
c0fc4ca74046 mod_limits: Factor out function for disabling limits allowing use from shell
Kim Alvefur <zash@zash.se>
parents: 11560
diff changeset
125 -- Currently no burst support
c0fc4ca74046 mod_limits: Factor out function for disabling limits allowing use from shell
Kim Alvefur <zash@zash.se>
parents: 11560
diff changeset
126 else
c0fc4ca74046 mod_limits: Factor out function for disabling limits allowing use from shell
Kim Alvefur <zash@zash.se>
parents: 11560
diff changeset
127 local filter_set = type_filters[session_type];
c0fc4ca74046 mod_limits: Factor out function for disabling limits allowing use from shell
Kim Alvefur <zash@zash.se>
parents: 11560
diff changeset
128 filters.remove_filter(session, "bytes/in", filter_set.bytes_in);
c0fc4ca74046 mod_limits: Factor out function for disabling limits allowing use from shell
Kim Alvefur <zash@zash.se>
parents: 11560
diff changeset
129 session.throttle = nil;
c0fc4ca74046 mod_limits: Factor out function for disabling limits allowing use from shell
Kim Alvefur <zash@zash.se>
parents: 11560
diff changeset
130 end
c0fc4ca74046 mod_limits: Factor out function for disabling limits allowing use from shell
Kim Alvefur <zash@zash.se>
parents: 11560
diff changeset
131 end
c0fc4ca74046 mod_limits: Factor out function for disabling limits allowing use from shell
Kim Alvefur <zash@zash.se>
parents: 11560
diff changeset
132
9942
b0d5f4ae92b7 mod_limits: Allow configuring a list of unrestricted JIDs (fixes #1323)
Kim Alvefur <zash@zash.se>
parents: 9941
diff changeset
133 function module.add_host(module)
b0d5f4ae92b7 mod_limits: Allow configuring a list of unrestricted JIDs (fixes #1323)
Kim Alvefur <zash@zash.se>
parents: 9941
diff changeset
134 local unlimited_jids = module:get_option_inherited_set("unlimited_jids", {});
b0d5f4ae92b7 mod_limits: Allow configuring a list of unrestricted JIDs (fixes #1323)
Kim Alvefur <zash@zash.se>
parents: 9941
diff changeset
135
9943
46773fe2be45 mod_limits: Fix typo
Kim Alvefur <zash@zash.se>
parents: 9942
diff changeset
136 if not unlimited_jids:empty() then
9942
b0d5f4ae92b7 mod_limits: Allow configuring a list of unrestricted JIDs (fixes #1323)
Kim Alvefur <zash@zash.se>
parents: 9941
diff changeset
137 module:hook("authentication-success", function (event)
b0d5f4ae92b7 mod_limits: Allow configuring a list of unrestricted JIDs (fixes #1323)
Kim Alvefur <zash@zash.se>
parents: 9941
diff changeset
138 local session = event.session;
b0d5f4ae92b7 mod_limits: Allow configuring a list of unrestricted JIDs (fixes #1323)
Kim Alvefur <zash@zash.se>
parents: 9941
diff changeset
139 local jid = session.username .. "@" .. session.host;
b0d5f4ae92b7 mod_limits: Allow configuring a list of unrestricted JIDs (fixes #1323)
Kim Alvefur <zash@zash.se>
parents: 9941
diff changeset
140 if unlimited_jids:contains(jid) then
11734
c0fc4ca74046 mod_limits: Factor out function for disabling limits allowing use from shell
Kim Alvefur <zash@zash.se>
parents: 11560
diff changeset
141 unlimited(session);
9942
b0d5f4ae92b7 mod_limits: Allow configuring a list of unrestricted JIDs (fixes #1323)
Kim Alvefur <zash@zash.se>
parents: 9941
diff changeset
142 end
b0d5f4ae92b7 mod_limits: Allow configuring a list of unrestricted JIDs (fixes #1323)
Kim Alvefur <zash@zash.se>
parents: 9941
diff changeset
143 end);
11735
7d29167bfcc3 mod_limits: Extend unlimited_jids to s2s sessions (for Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 11734
diff changeset
144
7d29167bfcc3 mod_limits: Extend unlimited_jids to s2s sessions (for Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 11734
diff changeset
145 module:hook("s2sout-established", function (event)
7d29167bfcc3 mod_limits: Extend unlimited_jids to s2s sessions (for Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 11734
diff changeset
146 local session = event.session;
7d29167bfcc3 mod_limits: Extend unlimited_jids to s2s sessions (for Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 11734
diff changeset
147 if unlimited_jids:contains(session.to_host) then
7d29167bfcc3 mod_limits: Extend unlimited_jids to s2s sessions (for Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 11734
diff changeset
148 unlimited(session);
7d29167bfcc3 mod_limits: Extend unlimited_jids to s2s sessions (for Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 11734
diff changeset
149 end
7d29167bfcc3 mod_limits: Extend unlimited_jids to s2s sessions (for Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 11734
diff changeset
150 end);
7d29167bfcc3 mod_limits: Extend unlimited_jids to s2s sessions (for Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 11734
diff changeset
151
7d29167bfcc3 mod_limits: Extend unlimited_jids to s2s sessions (for Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 11734
diff changeset
152 module:hook("s2sin-established", function (event)
7d29167bfcc3 mod_limits: Extend unlimited_jids to s2s sessions (for Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 11734
diff changeset
153 local session = event.session;
7d29167bfcc3 mod_limits: Extend unlimited_jids to s2s sessions (for Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 11734
diff changeset
154 if session.from_host and unlimited_jids:contains(session.from_host) then
7d29167bfcc3 mod_limits: Extend unlimited_jids to s2s sessions (for Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 11734
diff changeset
155 unlimited(session);
7d29167bfcc3 mod_limits: Extend unlimited_jids to s2s sessions (for Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 11734
diff changeset
156 end
7d29167bfcc3 mod_limits: Extend unlimited_jids to s2s sessions (for Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 11734
diff changeset
157 end);
7d29167bfcc3 mod_limits: Extend unlimited_jids to s2s sessions (for Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 11734
diff changeset
158
9942
b0d5f4ae92b7 mod_limits: Allow configuring a list of unrestricted JIDs (fixes #1323)
Kim Alvefur <zash@zash.se>
parents: 9941
diff changeset
159 end
b0d5f4ae92b7 mod_limits: Allow configuring a list of unrestricted JIDs (fixes #1323)
Kim Alvefur <zash@zash.se>
parents: 9941
diff changeset
160 end