Software /
code /
prosody
Diff
core/stanza_router.lua @ 119:b48a573608e8
Relocate presence broadcast to core_handle_stanza()
which is for processing stanzas that the server must handle (not route)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 23 Oct 2008 03:52:51 +0100 |
parent | 113:9026fdad1531 |
child | 121:74e5919e4737 |
line wrap: on
line diff
--- a/core/stanza_router.lua Wed Oct 22 23:12:26 2008 +0100 +++ b/core/stanza_router.lua Thu Oct 23 03:52:51 2008 +0100 @@ -37,9 +37,23 @@ -- TODO presence subscriptions if not to then + core_handle_stanza(origin, stanza); + elseif hosts[to] and hosts[to].type == "local" then + core_handle_stanza(origin, stanza); + elseif stanza.name == "iq" and not select(3, jid_split(to)) then + core_handle_stanza(origin, stanza); + elseif origin.type == "c2s" then + core_route_stanza(origin, stanza); + end +end + +function core_handle_stanza(origin, stanza) + -- Handlers + if origin.type == "c2s" or origin.type == "c2s_unauthed" then + local session = origin; + if stanza.name == "presence" and origin.roster then if stanza.attr.type == nil or stanza.attr.type == "available" or stanza.attr.type == "unavailable" then - --stanza.attr.from = origin.full_jid; for jid in pairs(origin.roster) do -- broadcast to all interested contacts local subscription = origin.roster[jid].subscription; if subscription == "both" or subscription == "from" then @@ -70,30 +84,9 @@ -- TODO error, bad type end else - core_handle_stanza(origin, stanza); + log("debug", "Routing stanza to local"); + handle_stanza(session, stanza); end - elseif hosts[to] and hosts[to].type == "local" then - core_handle_stanza(origin, stanza); - elseif stanza.name == "iq" and not select(3, jid_split(to)) then - core_handle_stanza(origin, stanza); - elseif origin.type == "c2s" then - core_route_stanza(origin, stanza); - end -end - -function core_handle_stanza(origin, stanza) - -- Handlers - if origin.type == "c2s" or origin.type == "c2s_unauthed" then - local session = origin; - - log("debug", "Routing stanza"); - -- Stanza has no to attribute - --local to_node, to_host, to_resource = jid_split(stanza.attr.to); - --if not to_host then error("Invalid destination JID: "..string.format("{ %q, %q, %q } == %q", to_node or "", to_host or "", to_resource or "", stanza.attr.to or "nil")); end - - -- Stanza is to this server, or a user on this server - log("debug", "Routing stanza to local"); - handle_stanza(session, stanza); end end