Software / code / prosody
Comparison
core/modulemanager.lua @ 589:d564f94d5727
Removed pre-multitable code from module manager
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Sun, 07 Dec 2008 02:56:17 +0500 |
| parent | 579:81e68e5afce2 |
| child | 590:54afe37cccbf |
comparison
equal
deleted
inserted
replaced
| 579:81e68e5afce2 | 589:d564f94d5727 |
|---|---|
| 116 end | 116 end |
| 117 end | 117 end |
| 118 | 118 |
| 119 end | 119 end |
| 120 | 120 |
| 121 function _handle_stanza(host, origin, stanza) | |
| 122 local name, xmlns, origin_type = stanza.name, stanza.attr.xmlns, origin.type; | |
| 123 | |
| 124 local handlers = stanza_handlers[host]; | |
| 125 if not handlers then | |
| 126 log("warn", "No handlers for %s", host); | |
| 127 return false; | |
| 128 end | |
| 129 | |
| 130 if name == "iq" and xmlns == "jabber:client" and handlers[origin_type] then | |
| 131 local child = stanza.tags[1]; | |
| 132 if child then | |
| 133 local xmlns = child.attr.xmlns or xmlns; | |
| 134 log("debug", "Stanza of type %s from %s has xmlns: %s", name, origin_type, xmlns); | |
| 135 local handler = handlers[origin_type][name] and handlers[origin_type][name][xmlns]; | |
| 136 if handler then | |
| 137 log("debug", "Passing stanza to mod_%s", handler_info[handler].name); | |
| 138 return handler(origin, stanza) or true; | |
| 139 end | |
| 140 end | |
| 141 elseif handlers[origin_type] then | |
| 142 local handler = handlers[origin_type][name]; | |
| 143 if handler then | |
| 144 handler = handler[xmlns]; | |
| 145 if handler then | |
| 146 log("debug", "Passing stanza to mod_%s", handler_info[handler].name); | |
| 147 return handler(origin, stanza) or true; | |
| 148 end | |
| 149 end | |
| 150 end | |
| 151 log("debug", "Stanza unhandled by any modules, xmlns: %s", stanza.attr.xmlns); | |
| 152 return false; -- we didn't handle it | |
| 153 end | |
| 154 function handle_stanza(host, origin, stanza) | 121 function handle_stanza(host, origin, stanza) |
| 155 local name, xmlns, origin_type = stanza.name, stanza.attr.xmlns, origin.type; | 122 local name, xmlns, origin_type = stanza.name, stanza.attr.xmlns, origin.type; |
| 156 if name == "iq" and xmlns == "jabber:client" then | 123 if name == "iq" and xmlns == "jabber:client" then |
| 157 xmlns = stanza.tags[1].attr.xmlns; | 124 xmlns = stanza.tags[1].attr.xmlns; |
| 158 log("debug", "Stanza of type %s from %s has xmlns: %s", name, origin_type, xmlns); | 125 log("debug", "Stanza of type %s from %s has xmlns: %s", name, origin_type, xmlns); |
| 179 function api:get_host() | 146 function api:get_host() |
| 180 return self.host; | 147 return self.host; |
| 181 end | 148 end |
| 182 | 149 |
| 183 | 150 |
| 184 local function __add_iq_handler(module, origin_type, xmlns, handler) | |
| 185 local handlers = stanza_handlers[module.host]; | |
| 186 handlers[origin_type] = handlers[origin_type] or {}; | |
| 187 handlers[origin_type].iq = handlers[origin_type].iq or {}; | |
| 188 if not handlers[origin_type].iq[xmlns] then | |
| 189 handlers[origin_type].iq[xmlns]= handler; | |
| 190 handler_info[handler] = module; | |
| 191 module:log("debug", "I now handle tag 'iq' [%s] with payload namespace '%s'", origin_type, xmlns); | |
| 192 else | |
| 193 module:log("warn", "I wanted to handle tag 'iq' [%s] with payload namespace '%s' but mod_%s already handles that", origin_type, xmlns, handler_info[handlers[origin_type].iq[xmlns]].name); | |
| 194 end | |
| 195 end | |
| 196 local function _add_iq_handler(module, origin_type, xmlns, handler) | 151 local function _add_iq_handler(module, origin_type, xmlns, handler) |
| 197 local handlers = m_stanza_handlers:get(module.host, origin_type, "iq", xmlns); | 152 local handlers = m_stanza_handlers:get(module.host, origin_type, "iq", xmlns); |
| 198 if not handlers then | 153 if not handlers then |
| 199 m_stanza_handlers:add(module.host, origin_type, "iq", xmlns, handler); | 154 m_stanza_handlers:add(module.host, origin_type, "iq", xmlns, handler); |
| 200 handler_info[handler] = module; | 155 handler_info[handler] = module; |
| 224 end); | 179 end); |
| 225 end | 180 end |
| 226 | 181 |
| 227 function api:add_event_hook (...) return eventmanager.add_event_hook(...); end | 182 function api:add_event_hook (...) return eventmanager.add_event_hook(...); end |
| 228 | 183 |
| 229 local function __add_handler(module, origin_type, tag, xmlns, handler) | |
| 230 local handlers = stanza_handlers[module.host]; | |
| 231 handlers[origin_type] = handlers[origin_type] or {}; | |
| 232 if not handlers[origin_type][tag] then | |
| 233 handlers[origin_type][tag] = handlers[origin_type][tag] or {}; | |
| 234 handlers[origin_type][tag][xmlns]= handler; | |
| 235 handler_info[handler] = module; | |
| 236 module:log("debug", "I now handle tag '%s' [%s] with xmlns '%s'", tag, origin_type, xmlns); | |
| 237 elseif handler_info[handlers[origin_type][tag]] then | |
| 238 log("warning", "I wanted to handle tag '%s' [%s] but mod_%s already handles that", tag, origin_type, handler_info[handlers[origin_type][tag]].module.name); | |
| 239 end | |
| 240 end | |
| 241 local function _add_handler(module, origin_type, tag, xmlns, handler) | 184 local function _add_handler(module, origin_type, tag, xmlns, handler) |
| 242 local handlers = m_stanza_handlers:get(module.host, origin_type, tag, xmlns); | 185 local handlers = m_stanza_handlers:get(module.host, origin_type, tag, xmlns); |
| 243 if not handlers then | 186 if not handlers then |
| 244 m_stanza_handlers:add(module.host, origin_type, tag, xmlns, handler); | 187 m_stanza_handlers:add(module.host, origin_type, tag, xmlns, handler); |
| 245 handler_info[handler] = module; | 188 handler_info[handler] = module; |