Software /
code /
prosody
Changeset
2144:8e59d37a0e68
Merged with 0.6.
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Sun, 22 Nov 2009 21:55:58 +0500 |
parents | 2138:8bb1a2d82896 (current diff) 2143:13ac68e8760b (diff) |
children | 2145:daeb6ebf304c |
files | core/sessionmanager.lua |
diffstat | 3 files changed, 32 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/core/loggingmanager.lua Sun Nov 22 15:06:30 2009 +0000 +++ b/core/loggingmanager.lua Sun Nov 22 21:55:58 2009 +0500 @@ -17,6 +17,12 @@ local os_date, os_getenv = os.date, os.getenv; local getstyle, getstring = require "util.termcolours".getstyle, require "util.termcolours".getstring; +if os.getenv("__FLUSH_LOG") then + local io_flush = io.flush; + local _io_write = io_write; + io_write = function(...) _io_write(...); io_flush(); end +end + local config = require "core.configmanager"; local eventmanager = require "core.eventmanager"; local logger = require "util.logger";
--- a/core/sessionmanager.lua Sun Nov 22 15:06:30 2009 +0000 +++ b/core/sessionmanager.lua Sun Nov 22 21:55:58 2009 +0500 @@ -201,22 +201,32 @@ end function send_to_available_resources(user, host, stanza) + local jid = user.."@"..host; local count = 0; - local to = stanza.attr.to; - stanza.attr.to = nil; - local h = hosts[host]; - if h and h.type == "local" then - local u = h.sessions[user]; - if u then - for k, session in pairs(u.sessions) do - if session.presence then - session.send(stanza); - count = count + 1; - end + local user = bare_sessions[jid]; + if user then + for k, session in pairs(user.sessions) do + if session.presence then + session.send(stanza); + count = count + 1; end end end - stanza.attr.to = to; + return count; +end + +function send_to_interested_resources(user, host, stanza) + local jid = user.."@"..host; + local count = 0; + local user = bare_sessions[jid]; + if user then + for k, session in pairs(user.sessions) do + if session.interested then + session.send(stanza); + count = count + 1; + end + end + end return count; end
--- a/plugins/mod_presence.lua Sun Nov 22 15:06:30 2009 +0000 +++ b/plugins/mod_presence.lua Sun Nov 22 21:55:58 2009 +0500 @@ -233,6 +233,7 @@ -- TODO send last recieved unavailable presence (or we MAY do nothing, which is fine too) end else + core_route_stanza(origin, st.presence({from=to_bare, to=from_bare, type="unavailable"})); -- acknowledging receipt if not rostermanager.is_contact_pending_in(node, host, from_bare) then if rostermanager.set_contact_pending_in(node, host, from_bare) then sessionmanager.send_to_available_resources(node, host, stanza); @@ -241,14 +242,17 @@ end elseif stanza.attr.type == "unsubscribe" then if rostermanager.process_inbound_unsubscribe(node, host, from_bare) then + sessionmanager.send_to_interested_resources(node, host, stanza); rostermanager.roster_push(node, host, from_bare); end elseif stanza.attr.type == "subscribed" then if rostermanager.process_inbound_subscription_approval(node, host, from_bare) then + sessionmanager.send_to_interested_resources(node, host, stanza); rostermanager.roster_push(node, host, from_bare); end elseif stanza.attr.type == "unsubscribed" then if rostermanager.process_inbound_subscription_cancellation(node, host, from_bare) then + sessionmanager.send_to_interested_resources(node, host, stanza); rostermanager.roster_push(node, host, from_bare); end end -- discard any other type