diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/stanza_router.lua | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/core/stanza_router.lua b/core/stanza_router.lua index 7fa18eb0..f133f891 100644 --- a/core/stanza_router.lua +++ b/core/stanza_router.lua @@ -67,17 +67,33 @@ function core_route_stanza(origin, stanza) local user = host_session.sessions[node]; if user then local res = user.sessions[resource]; - -- TODO do something about presence broadcast if not res then -- if we get here, resource was not specified or was unavailable - for k in pairs(user.sessions) do - res = user.sessions[k]; - break; + if stanza.name == "presence" then + for k in pairs(user.sessions) do -- presence broadcast to all user resources + if user.sessions[k].full_jid then + stanza.attr.to = user.sessions[k].full_jid; + send(user.sessions[k], stanza); + end + end + else if stanza.name == "message" then -- select a resource to recieve message + for k in pairs(user.sessions) do + if user.sessions[k].full_jid then + res = user.sessions[k]; + break; + end + end + -- TODO find resource with greatest priority + else + error("IQs should't get here"); end - -- TODO find resource with greatest priority end - stanza.attr.to = res.full_jid; - send(res, stanza); -- Yay \o/ + if res then + stanza.attr.to = res.full_jid; + send(res, stanza); -- Yay \o/ + elseif stanza.name == "message" then + -- TODO return message error + end else -- user not found send(origin, st.error_reply(stanza, "cancel", "service-unavailable")); |