X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=core%2Fstanza_router.lua;h=ad312b850ef16d4dbe2ae7e70c5ba2b92fd9c6b2;hb=4f30ec4ac8e956391e63a65fe8b8515d615ad5ea;hp=4e3380e1265b57419161725da3e4e1cb5ab621fb;hpb=f5e15fa45532c9725b254c4401e192ae7c06c72e;p=prosody.git diff --git a/core/stanza_router.lua b/core/stanza_router.lua index 4e3380e1..ad312b85 100644 --- a/core/stanza_router.lua +++ b/core/stanza_router.lua @@ -1,4 +1,4 @@ --- Prosody IM v0.4 +-- Prosody IM -- Copyright (C) 2008-2009 Matthew Wild -- Copyright (C) 2008-2009 Waqas Hussain -- @@ -8,7 +8,7 @@ local log = require "util.logger".init("stanzarouter") -local hosts = _G.hosts; +local hosts = _G.prosody.hosts; local tostring = tostring; local st = require "util.stanza"; local send_s2s = require "core.s2smanager".send_to_host; @@ -17,6 +17,9 @@ local component_handle_stanza = require "core.componentmanager".handle_stanza; local jid_split = require "util.jid".split; local jid_prepped_split = require "util.jid".prepped_split; +local full_sessions = _G.prosody.full_sessions; +local bare_sessions = _G.prosody.bare_sessions; + function core_process_stanza(origin, stanza) (origin.log or log)("debug", "Received[%s]: %s", origin.type, stanza:top_tag()) @@ -26,7 +29,8 @@ function core_process_stanza(origin, stanza) -- TODO verify validity of stanza (as well as JID validity) 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 + if not stanza.attr.id then stanza.attr.id = ""; end -- COMPAT Jabiru doesn't send the id attribute on roster requests + if (stanza.attr.type == "set" or stanza.attr.type == "get") and (#stanza.tags ~= 1) then origin.send(st.error_reply(stanza, "modify", "bad-request")); return; end @@ -110,7 +114,7 @@ function core_process_stanza(origin, stanza) end if h.events.fire_event(event, {origin = origin, stanza = stanza}) then return; end end - if host and not hosts[host] then host = nil; end -- workaround for a Pidgin bug which sets 'to' to the SRV result + if host and not hosts[host] then host = nil; end -- COMPAT: workaround for a Pidgin bug which sets 'to' to the SRV result modules_handle_stanza(host or origin.host or origin.to_host, origin, stanza); end end @@ -150,11 +154,7 @@ function core_post_stanza(origin, stanza) component_handle_stanza(origin, stanza); return; end - if not modules_handle_stanza(h.host, origin, stanza) then - if stanza.attr.type ~= "result" and stanza.attr.type ~= "error" then - origin.send(st.error_reply(stanza, "cancel", "service-unavailable")); - end - end + modules_handle_stanza(h.host, origin, stanza); else core_route_stanza(origin, stanza); end @@ -180,7 +180,7 @@ function core_route_stanza(origin, stanza) local xmlns = stanza.attr.xmlns; --stanza.attr.xmlns = "jabber:server"; stanza.attr.xmlns = nil; - log("debug", "sending s2s stanza: %s", tostring(stanza)); + log("debug", "sending s2s stanza: %s", tostring(stanza.top_tag and stanza:top_tag()) or stanza); send_s2s(origin.host, host, stanza); -- TODO handle remote routing errors stanza.attr.xmlns = xmlns; -- reset else