Software /
code /
prosody
Comparison
util/filters.lua @ 3625:f8d61da5bcc1
util.filters: Support for 'filter hooks' that get called when a session is initialized for filters
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 13 Nov 2010 23:10:13 +0000 |
parent | 3331:57a9cf5f4259 |
child | 3943:ad5924c31953 |
comparison
equal
deleted
inserted
replaced
3624:e2cfc6b8fe5d | 3625:f8d61da5bcc1 |
---|---|
8 | 8 |
9 local t_insert, t_remove = table.insert, table.remove; | 9 local t_insert, t_remove = table.insert, table.remove; |
10 | 10 |
11 module "filters" | 11 module "filters" |
12 | 12 |
13 local new_filter_hooks = {}; | |
14 | |
13 function initialize(session) | 15 function initialize(session) |
14 if not session.filters then | 16 if not session.filters then |
15 local filters = {}; | 17 local filters = {}; |
16 session.filters = filters; | 18 session.filters = filters; |
17 | 19 |
18 function session.filter(type, data) | 20 function session.filter(type, data) |
19 local filter_list = filters[type]; | 21 local filter_list = filters[type]; |
20 if filter_list then | 22 if filter_list then |
21 for i = 1, #filter_list do | 23 for i = 1, #filter_list do |
22 data = filter_list[i](data); | 24 data = filter_list[i](data, session); |
23 if data == nil then break; end | 25 if data == nil then break; end |
24 end | 26 end |
25 end | 27 end |
26 return data; | 28 return data; |
27 end | 29 end |
28 end | 30 end |
31 | |
32 for i=1,#new_filter_hooks do | |
33 new_filter_hooks[i](session); | |
34 end | |
35 | |
29 return session.filter; | 36 return session.filter; |
30 end | 37 end |
31 | 38 |
32 function add_filter(session, type, callback, priority) | 39 function add_filter(session, type, callback, priority) |
33 if not session.filters then | 40 if not session.filters then |
63 end | 70 end |
64 end | 71 end |
65 end | 72 end |
66 end | 73 end |
67 | 74 |
75 function add_filter_hook(callback) | |
76 t_insert(new_filter_hooks, callback); | |
77 end | |
78 | |
68 return _M; | 79 return _M; |