Annotate

util/filters.lua @ 5915:e6fed1d80116

Back out 1b0ac7950129, as SSLv3 appears to still be in moderate use on the network. Also, although obsolete, SSLv3 isn't documented to have any weaknesses that TLS 1.0 (the most common version used today) doesn't also have. Get your act together clients!
author Matthew Wild <mwild1@gmail.com>
date Tue, 12 Nov 2013 02:13:01 +0000
parent 5849:8f451d370dd4
child 5850:e8c743f4213f
child 6366:8dee696c33cc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3133
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 -- Prosody IM
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 --
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 -- COPYING file in the source package for more information.
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 --
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 local t_insert, t_remove = table.insert, table.remove;
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 module "filters"
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12
3625
f8d61da5bcc1 util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents: 3331
diff changeset
13 local new_filter_hooks = {};
f8d61da5bcc1 util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents: 3331
diff changeset
14
3134
9a29ad6a9b97 util.filters: Expose the initialization function
Matthew Wild <mwild1@gmail.com>
parents: 3133
diff changeset
15 function initialize(session)
3142
3cf02e5e632b util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents: 3140
diff changeset
16 if not session.filters then
3cf02e5e632b util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents: 3140
diff changeset
17 local filters = {};
3cf02e5e632b util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents: 3140
diff changeset
18 session.filters = filters;
3cf02e5e632b util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents: 3140
diff changeset
19
3cf02e5e632b util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents: 3140
diff changeset
20 function session.filter(type, data)
3cf02e5e632b util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents: 3140
diff changeset
21 local filter_list = filters[type];
3cf02e5e632b util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents: 3140
diff changeset
22 if filter_list then
3cf02e5e632b util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents: 3140
diff changeset
23 for i = 1, #filter_list do
3625
f8d61da5bcc1 util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents: 3331
diff changeset
24 data = filter_list[i](data, session);
3142
3cf02e5e632b util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents: 3140
diff changeset
25 if data == nil then break; end
3cf02e5e632b util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents: 3140
diff changeset
26 end
3139
7b4f180d7c6f util.filters: Don't traceback with no filters of a type added
Matthew Wild <mwild1@gmail.com>
parents: 3135
diff changeset
27 end
3142
3cf02e5e632b util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents: 3140
diff changeset
28 return data;
3133
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 end
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 end
3625
f8d61da5bcc1 util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents: 3331
diff changeset
31
f8d61da5bcc1 util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents: 3331
diff changeset
32 for i=1,#new_filter_hooks do
f8d61da5bcc1 util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents: 3331
diff changeset
33 new_filter_hooks[i](session);
f8d61da5bcc1 util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents: 3331
diff changeset
34 end
f8d61da5bcc1 util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents: 3331
diff changeset
35
3142
3cf02e5e632b util.filters: Ensure initialize() never initializes an object twice - and return the filter function to the caller
Matthew Wild <mwild1@gmail.com>
parents: 3140
diff changeset
36 return session.filter;
3133
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 end
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 function add_filter(session, type, callback, priority)
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 if not session.filters then
3134
9a29ad6a9b97 util.filters: Expose the initialization function
Matthew Wild <mwild1@gmail.com>
parents: 3133
diff changeset
41 initialize(session);
3133
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 end
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 local filter_list = session.filters[type];
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 if not filter_list then
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 filter_list = {};
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 session.filters[type] = filter_list;
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 end
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50 priority = priority or 0;
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 local i = 0;
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 repeat
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 i = i + 1;
5849
8f451d370dd4 util.filters: Fix inserting items so that higher priority filters run first
Kim Alvefur <zash@zash.se>
parents: 3943
diff changeset
55 until not filter_list[i] or filter_list[filter_list[i]] < priority;
3133
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 t_insert(filter_list, i, callback);
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 filter_list[callback] = priority;
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59 end
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61 function remove_filter(session, type, callback)
3135
f29a297471e3 util.filters: Don't traceback when trying to remove a filter from an uninitialized object
Matthew Wild <mwild1@gmail.com>
parents: 3134
diff changeset
62 if not session.filters then return; end
3133
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 local filter_list = session.filters[type];
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
64 if filter_list and filter_list[callback] then
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65 for i=1, #filter_list do
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 if filter_list[i] == callback then
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 t_remove(filter_list, i);
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68 filter_list[callback] = nil;
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 return true;
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 end
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
71 end
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 end
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73 end
d3f16b4c1ecb util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74
3625
f8d61da5bcc1 util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents: 3331
diff changeset
75 function add_filter_hook(callback)
f8d61da5bcc1 util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents: 3331
diff changeset
76 t_insert(new_filter_hooks, callback);
f8d61da5bcc1 util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents: 3331
diff changeset
77 end
f8d61da5bcc1 util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
Matthew Wild <mwild1@gmail.com>
parents: 3331
diff changeset
78
3943
ad5924c31953 util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents: 3625
diff changeset
79 function remove_filter_hook(callback)
ad5924c31953 util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents: 3625
diff changeset
80 for i=1,#new_filter_hooks do
ad5924c31953 util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents: 3625
diff changeset
81 if new_filter_hooks[i] == callback then
ad5924c31953 util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents: 3625
diff changeset
82 t_remove(new_filter_hooks, i);
ad5924c31953 util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents: 3625
diff changeset
83 end
ad5924c31953 util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents: 3625
diff changeset
84 end
ad5924c31953 util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents: 3625
diff changeset
85 end
ad5924c31953 util.filters: Add remove_filter_hook()
Matthew Wild <mwild1@gmail.com>
parents: 3625
diff changeset
86
3331
57a9cf5f4259 util.filters: Add newline at end of file
Matthew Wild <mwild1@gmail.com>
parents: 3142
diff changeset
87 return _M;