- return true;
- end
- return ok, err;
-end
-
-function handle_stanza(host, origin, stanza)
- local name, xmlns, origin_type = stanza.name, stanza.attr.xmlns, origin.type;
- if name == "iq" and xmlns == "jabber:client" then
- if stanza.attr.type == "get" or stanza.attr.type == "set" then
- xmlns = stanza.tags[1].attr.xmlns or "jabber:client";
- log("debug", "Stanza of type %s from %s has xmlns: %s", name, origin_type, xmlns);
- else
- log("debug", "Discarding %s from %s of type: %s", name, origin_type, stanza.attr.type);
- return true;
- end
- end
- local handlers = stanza_handlers:get(host, origin_type, name, xmlns);
- if not handlers then handlers = stanza_handlers:get("*", origin_type, name, xmlns); end
- if handlers then
- log("debug", "Passing stanza to mod_%s", handler_info[handlers[1]].name);
- (handlers[1])(origin, stanza);
- return true;
- else
- log("debug", "Unhandled %s stanza: %s; xmlns=%s", origin.type, stanza.name, xmlns); -- we didn't handle it
- if stanza.attr.xmlns == "jabber:client" then
- if stanza.attr.type ~= "error" and stanza.attr.type ~= "result" then
- origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
- end
- elseif not(name == "features" and xmlns == "http://etherx.jabber.org/streams") then -- FIXME remove check once we handle S2S features
- origin:close("unsupported-stanza-type");
- end