Software /
code /
prosody
Annotate
util/helpers.lua @ 10303:c434bff22b14
mod_csi_simple: Always remove session filters when disabling CSI
Only guard the actual pausing of outgoing data on the method existing.
This prevents the filters from lingering in case something happened to
the connection. Removing already removed filters should be a safe noop.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 05 Oct 2019 16:55:58 +0200 |
parent | 8411:a9e8523a5e73 |
child | 11059:ad89e3cc67b6 |
rev | line source |
---|---|
1964
101a8df23b29
util.helpers: Add copyright header
Matthew Wild <mwild1@gmail.com>
parents:
1959
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
1964
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
1964
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5415
diff
changeset
|
4 -- |
1964
101a8df23b29
util.helpers: Add copyright header
Matthew Wild <mwild1@gmail.com>
parents:
1959
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
101a8df23b29
util.helpers: Add copyright header
Matthew Wild <mwild1@gmail.com>
parents:
1959
diff
changeset
|
6 -- COPYING file in the source package for more information. |
101a8df23b29
util.helpers: Add copyright header
Matthew Wild <mwild1@gmail.com>
parents:
1959
diff
changeset
|
7 -- |
1531
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
4681
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
9 local debug = require "util.debug"; |
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
10 |
1531
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 -- Helper functions for debugging |
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 |
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 local log = require "util.logger".init("util.debug"); |
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
15 local function log_events(events, name, logger) |
1531
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 local f = events.fire_event; |
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 if not f then |
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 error("Object does not appear to be a util.events object"); |
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 end |
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 logger = logger or log; |
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 name = name or tostring(events); |
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 function events.fire_event(event, ...) |
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 logger("debug", "%s firing event: %s", name, event); |
1795
0e933d6f2c31
util.helpers: It would be a good idea to fire an event when we say we are
Matthew Wild <mwild1@gmail.com>
parents:
1531
diff
changeset
|
24 return f(event, ...); |
1531
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 end |
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 events[events.fire_event] = f; |
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 return events; |
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 end |
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
30 local function revert_log_events(events) |
4536
285450536ec0
util.helpers: After nearly 'fixing' this code, I conclude it instead only deserves a bigger smile
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
31 events.fire_event, events[events.fire_event] = events[events.fire_event], nil; -- :)) |
1531
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 end |
21051377f11b
util.helpers: New util library to aid with debugging, etc.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 |
6783
cd44427c7295
util.helpers: Fix order of functions using each other [fixes 00412b36166f]
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
34 local function log_host_events(host) |
cd44427c7295
util.helpers: Fix order of functions using each other [fixes 00412b36166f]
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
35 return log_events(prosody.hosts[host].events, host); |
cd44427c7295
util.helpers: Fix order of functions using each other [fixes 00412b36166f]
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
36 end |
cd44427c7295
util.helpers: Fix order of functions using each other [fixes 00412b36166f]
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
37 |
cd44427c7295
util.helpers: Fix order of functions using each other [fixes 00412b36166f]
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
38 local function revert_log_host_events(host) |
cd44427c7295
util.helpers: Fix order of functions using each other [fixes 00412b36166f]
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
39 return revert_log_events(prosody.hosts[host].events); |
cd44427c7295
util.helpers: Fix order of functions using each other [fixes 00412b36166f]
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
40 end |
cd44427c7295
util.helpers: Fix order of functions using each other [fixes 00412b36166f]
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
41 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
42 local function show_events(events, specific_event) |
4681
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
43 local event_handlers = events._handlers; |
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
44 local events_array = {}; |
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
45 local event_handler_arrays = {}; |
7720
7166750fb963
util.helpers: List event priorities instead of useless array index
Kim Alvefur <zash@zash.se>
parents:
6783
diff
changeset
|
46 for event, priorities in pairs(events._event_map) do |
4681
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
47 local handlers = event_handlers[event]; |
4705
447f5a94792d
util.helpers: show_events(): Make more robust, and allow filtering results to a specific event
Matthew Wild <mwild1@gmail.com>
parents:
4681
diff
changeset
|
48 if handlers and (event == specific_event or not specific_event) then |
447f5a94792d
util.helpers: show_events(): Make more robust, and allow filtering results to a specific event
Matthew Wild <mwild1@gmail.com>
parents:
4681
diff
changeset
|
49 table.insert(events_array, event); |
447f5a94792d
util.helpers: show_events(): Make more robust, and allow filtering results to a specific event
Matthew Wild <mwild1@gmail.com>
parents:
4681
diff
changeset
|
50 local handler_strings = {}; |
447f5a94792d
util.helpers: show_events(): Make more robust, and allow filtering results to a specific event
Matthew Wild <mwild1@gmail.com>
parents:
4681
diff
changeset
|
51 for i, handler in ipairs(handlers) do |
447f5a94792d
util.helpers: show_events(): Make more robust, and allow filtering results to a specific event
Matthew Wild <mwild1@gmail.com>
parents:
4681
diff
changeset
|
52 local upvals = debug.string_from_var_table(debug.get_upvalues_table(handler)); |
8411
a9e8523a5e73
util.helpers: Handle missing priorities, happens due to wildcard magic in net.http.server (fixes #1044)
Kim Alvefur <zash@zash.se>
parents:
7720
diff
changeset
|
53 handler_strings[i] = " "..(priorities[handler] or "?")..": "..tostring(handler)..(upvals and ("\n "..upvals) or ""); |
4705
447f5a94792d
util.helpers: show_events(): Make more robust, and allow filtering results to a specific event
Matthew Wild <mwild1@gmail.com>
parents:
4681
diff
changeset
|
54 end |
447f5a94792d
util.helpers: show_events(): Make more robust, and allow filtering results to a specific event
Matthew Wild <mwild1@gmail.com>
parents:
4681
diff
changeset
|
55 event_handler_arrays[event] = handler_strings; |
4681
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
56 end |
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
57 end |
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
58 table.sort(events_array); |
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
59 local i = 1; |
4705
447f5a94792d
util.helpers: show_events(): Make more robust, and allow filtering results to a specific event
Matthew Wild <mwild1@gmail.com>
parents:
4681
diff
changeset
|
60 while i <= #events_array do |
4681
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
61 local handlers = event_handler_arrays[events_array[i]]; |
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
62 for j=#handlers, 1, -1 do |
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
63 table.insert(events_array, i+1, handlers[j]); |
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
64 end |
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
65 if i > 1 then events_array[i] = "\n"..events_array[i]; end |
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
66 i = i + #handlers + 1 |
4705
447f5a94792d
util.helpers: show_events(): Make more robust, and allow filtering results to a specific event
Matthew Wild <mwild1@gmail.com>
parents:
4681
diff
changeset
|
67 end |
4681
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
68 return table.concat(events_array, "\n"); |
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
69 end |
3299223bbed5
util.helpers: Add show_events(), to show the events and handlers in a util.events object
Matthew Wild <mwild1@gmail.com>
parents:
4536
diff
changeset
|
70 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
71 local function get_upvalue(f, get_name) |
1959
f56670ce64de
util.helpers: Add get_upvalue(function, name) helper
Matthew Wild <mwild1@gmail.com>
parents:
1795
diff
changeset
|
72 local i, name, value = 0; |
f56670ce64de
util.helpers: Add get_upvalue(function, name) helper
Matthew Wild <mwild1@gmail.com>
parents:
1795
diff
changeset
|
73 repeat |
f56670ce64de
util.helpers: Add get_upvalue(function, name) helper
Matthew Wild <mwild1@gmail.com>
parents:
1795
diff
changeset
|
74 i = i + 1; |
f56670ce64de
util.helpers: Add get_upvalue(function, name) helper
Matthew Wild <mwild1@gmail.com>
parents:
1795
diff
changeset
|
75 name, value = debug.getupvalue(f, i); |
f56670ce64de
util.helpers: Add get_upvalue(function, name) helper
Matthew Wild <mwild1@gmail.com>
parents:
1795
diff
changeset
|
76 until name == get_name or name == nil; |
f56670ce64de
util.helpers: Add get_upvalue(function, name) helper
Matthew Wild <mwild1@gmail.com>
parents:
1795
diff
changeset
|
77 return value; |
f56670ce64de
util.helpers: Add get_upvalue(function, name) helper
Matthew Wild <mwild1@gmail.com>
parents:
1795
diff
changeset
|
78 end |
f56670ce64de
util.helpers: Add get_upvalue(function, name) helper
Matthew Wild <mwild1@gmail.com>
parents:
1795
diff
changeset
|
79 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
80 return { |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
81 log_host_events = log_host_events; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
82 revert_log_host_events = revert_log_host_events; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
83 log_events = log_events; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
84 revert_log_events = revert_log_events; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
85 show_events = show_events; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
86 get_upvalue = get_upvalue; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
87 }; |