247 return true; |
247 return true; |
248 end |
248 end |
249 return ok, err; |
249 return ok, err; |
250 end |
250 end |
251 |
251 |
252 function handle_stanza(host, origin, stanza) |
|
253 local name, xmlns, origin_type = stanza.name, stanza.attr.xmlns or "jabber:client", origin.type; |
|
254 if name == "iq" and xmlns == "jabber:client" then |
|
255 if stanza.attr.type == "get" or stanza.attr.type == "set" then |
|
256 xmlns = stanza.tags[1].attr.xmlns or "jabber:client"; |
|
257 log("debug", "Stanza of type %s from %s has xmlns: %s", name, origin_type, xmlns); |
|
258 else |
|
259 log("debug", "Discarding %s from %s of type: %s", name, origin_type, stanza.attr.type); |
|
260 return true; |
|
261 end |
|
262 end |
|
263 if stanza.attr.xmlns == nil then |
|
264 log("debug", "Unhandled %s stanza: %s; xmlns=%s", origin.type, stanza.name, xmlns); -- we didn't handle it |
|
265 if stanza.attr.type ~= "error" and stanza.attr.type ~= "result" then |
|
266 origin.send(st.error_reply(stanza, "cancel", "service-unavailable")); |
|
267 end |
|
268 elseif not((name == "features" or name == "error") and xmlns == "http://etherx.jabber.org/streams") then -- FIXME remove check once we handle S2S features |
|
269 log("warn", "Unhandled %s stream element: %s; xmlns=%s: %s", origin.type, stanza.name, xmlns, tostring(stanza)); -- we didn't handle it |
|
270 origin:close("unsupported-stanza-type"); |
|
271 end |
|
272 end |
|
273 |
|
274 function module_has_method(module, method) |
252 function module_has_method(module, method) |
275 return type(module.module[method]) == "function"; |
253 return type(module.module[method]) == "function"; |
276 end |
254 end |
277 |
255 |
278 function call_module_method(module, method, ...) |
256 function call_module_method(module, method, ...) |