33 |
33 |
34 function modulehelpers.add_handler(origin_type, tag, xmlns, handler) |
34 function modulehelpers.add_handler(origin_type, tag, xmlns, handler) |
35 if not (origin_type and tag and xmlns and handler) then return false; end |
35 if not (origin_type and tag and xmlns and handler) then return false; end |
36 handlers[origin_type] = handlers[origin_type] or {}; |
36 handlers[origin_type] = handlers[origin_type] or {}; |
37 if not handlers[origin_type][tag] then |
37 if not handlers[origin_type][tag] then |
38 handlers[origin_type][tag]= handler; |
38 handlers[origin_type][tag] = handlers[origin_type][tag] or {}; |
|
39 handlers[origin_type][tag][xmlns]= handler; |
39 handler_info[handler] = getfenv(2).module; |
40 handler_info[handler] = getfenv(2).module; |
40 log("debug", "mod_%s now handles tag '%s'", getfenv(2).module.name, tag); |
41 log("debug", "mod_%s now handles tag '%s'", getfenv(2).module.name, tag); |
41 elseif handler_info[handlers[origin_type][tag]] then |
42 elseif handler_info[handlers[origin_type][tag]] then |
42 log("warning", "mod_%s wants to handle tag '%s' but mod_%s already handles that", getfenv(2).module.name, tag, handler_info[handlers[origin_type][tag]].module.name); |
43 log("warning", "mod_%s wants to handle tag '%s' but mod_%s already handles that", getfenv(2).module.name, tag, handler_info[handlers[origin_type][tag]].module.name); |
43 end |
44 end |
44 end |
45 end |
45 |
46 |
46 function loadall() |
47 function loadall() |
47 load("saslauth"); |
48 load("saslauth"); |
48 load("legacyauth"); |
49 load("legacyauth"); |
49 load("roster"); |
50 load("roster"); |
50 end |
51 end |
83 |
84 |
84 end |
85 end |
85 elseif handlers[origin_type] then |
86 elseif handlers[origin_type] then |
86 local handler = handlers[origin_type][name]; |
87 local handler = handlers[origin_type][name]; |
87 if handler then |
88 if handler then |
88 log("debug", "Passing stanza to mod_%s", handler_info[handler].name); |
89 handler = handler[xmlns]; |
89 return handler(origin, stanza) or true; |
90 if handler then |
|
91 log("debug", "Passing stanza to mod_%s", handler_info[handler].name); |
|
92 return handler(origin, stanza) or true; |
|
93 end |
90 end |
94 end |
91 end |
95 end |
92 log("debug", "Stanza unhandled by any modules"); |
96 log("debug", "Stanza unhandled by any modules, xmlns: %s", stanza.attr.xmlns); |
93 return false; -- we didn't handle it |
97 return false; -- we didn't handle it |
94 end |
98 end |
95 |
99 |
96 do |
100 do |
97 local event_handlers = {}; |
101 local event_handlers = {}; |