diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/stanza_router.lua | 12 | ||||
-rw-r--r-- | core/xmlhandlers.lua | 47 |
2 files changed, 20 insertions, 39 deletions
diff --git a/core/stanza_router.lua b/core/stanza_router.lua index eb5bf410..8f3d2d1f 100644 --- a/core/stanza_router.lua +++ b/core/stanza_router.lua @@ -54,7 +54,7 @@ function core_process_stanza(origin, stanza) if not stanza.attr.xmlns then stanza.attr.xmlns = "jabber:client"; end -- FIXME Hack. This should be removed when we fix namespace handling. -- TODO verify validity of stanza (as well as JID validity) - if stanza.attr.xmlns == "error" and #stanza.tags == 0 then return; end -- TODO invalid stanza, log + if stanza.attr.type == "error" and #stanza.tags == 0 then return; end -- TODO invalid stanza, log if stanza.name == "iq" then if (stanza.attr.type == "set" or stanza.attr.type == "get") and #stanza.tags ~= 1 then origin.send(st.error_reply(stanza, "modify", "bad-request")); @@ -106,10 +106,9 @@ function core_process_stanza(origin, stanza) return; -- FIXME what should we do here? end]] -- FIXME - -- FIXME do stanzas not of jabber:client get handled by components? if (origin.type == "s2sin" or origin.type == "c2s" or origin.type == "component") and (not xmlns or xmlns == "jabber:server" or xmlns == "jabber:client") then local event_data = {origin=origin, stanza=stanza}; - fire_event(tostring(host or origin.host).."/"..stanza.name, event_data); + if fire_event(tostring(host or origin.host).."/"..stanza.name, event_data) then return; end if origin.type == "s2sin" and not origin.dummy then local host_status = origin.hosts[from_host]; if not host_status or not host_status.authed then -- remote server trying to impersonate some other server? @@ -117,11 +116,6 @@ function core_process_stanza(origin, stanza) return; -- FIXME what should we do here? does this work with subdomains? end end - if origin.type == "c2s" and stanza.name == "presence" and to ~= nil and not(origin.roster[to_bare] and (origin.roster[to_bare].subscription == "both" or origin.roster[to_bare].subscription == "from")) then -- directed presence - origin.directed = origin.directed or {}; - origin.directed[to] = true; - --t_insert(origin.directed, to); -- FIXME does it make more sense to add to_bare rather than to? - end if not to then core_handle_stanza(origin, stanza); elseif hosts[to] and hosts[to].type == "local" then -- directed at a local server @@ -134,8 +128,6 @@ function core_process_stanza(origin, stanza) component_handle_stanza(origin, stanza); elseif hosts[host] and hosts[host].type == "component" then -- directed at a component component_handle_stanza(origin, stanza); - elseif origin.type == "c2s" and stanza.name == "presence" and stanza.attr.type ~= nil and stanza.attr.type ~= "unavailable" and stanza.attr.type ~= "error" then - handle_outbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare, core_route_stanza); elseif hosts[host] and hosts[host].type == "local" and stanza.name == "iq" and not resource then -- directed at bare JID core_handle_stanza(origin, stanza); else diff --git a/core/xmlhandlers.lua b/core/xmlhandlers.lua index 7e09921c..573a9604 100644 --- a/core/xmlhandlers.lua +++ b/core/xmlhandlers.lua @@ -14,15 +14,8 @@ local st = stanza; local tostring = tostring; local pairs = pairs; local ipairs = ipairs; -local type = type; -local print = print; -local format = string.format; -local m_random = math.random; local t_insert = table.insert; -local t_remove = table.remove; local t_concat = table.concat; -local t_concatall = function (t, sep) local tt = {}; for _, s in ipairs(t) do t_insert(tt, tostring(s)); end return t_concat(tt, sep); end -local sm_destroy_session = import("core.sessionmanager", "destroy_session"); local default_log = require "util.logger".init("xmlhandlers"); @@ -68,15 +61,13 @@ function init_xmlhandlers(session, stream_callbacks) -- FIXME !!!!! for i, k in ipairs(attr) do - if type(k) == "string" then - local ns, nm = k:match("^([^|]+)|?([^|]-)$") - if ns and nm then - ns = ns_prefixes[ns]; - if ns then - attr[ns..":"..nm] = attr[k]; - attr[i] = ns..":"..nm; - attr[k] = nil; - end + local ns, nm = k:match("^([^|]+)|?([^|]-)$") + if ns and nm then + ns = ns_prefixes[ns]; + if ns then + attr[ns..":"..nm] = attr[k]; + attr[i] = ns..":"..nm; + attr[k] = nil; end end end @@ -129,19 +120,17 @@ function init_xmlhandlers(session, stream_callbacks) cb_error(session, "parse-error", "unexpected-element-close", name); end end - if stanza then - if #chardata > 0 then - -- We have some character data in the buffer - stanza:text(t_concat(chardata)); - chardata = {}; - end - -- Complete stanza - if #stanza.last_add == 0 then - cb_handlestanza(session, stanza); - stanza = nil; - else - stanza:up(); - end + if #chardata > 0 then + -- We have some character data in the buffer + stanza:text(t_concat(chardata)); + chardata = {}; + end + -- Complete stanza + if #stanza.last_add == 0 then + cb_handlestanza(session, stanza); + stanza = nil; + else + stanza:up(); end end return xml_handlers; |