Software /
code /
prosody
Comparison
plugins/mod_presence.lua @ 2038:4ab83f96585a
mod_presence: Send unavailable presence when sending unsubscribed presence stanzas (some legacy clients continue to display unsubscribed contacts as available).
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Wed, 21 Oct 2009 19:01:02 +0500 |
parent | 1731:38d87682cb4a |
child | 2142:4b339020607f |
comparison
equal
deleted
inserted
replaced
2037:a919511c45ac | 2038:4ab83f96585a |
---|---|
140 end | 140 end |
141 end | 141 end |
142 stanza.attr.to = nil; -- reset it | 142 stanza.attr.to = nil; -- reset it |
143 end | 143 end |
144 | 144 |
145 function send_presence_of_available_resources(user, host, jid, recipient_session, core_route_stanza) | 145 function send_presence_of_available_resources(user, host, jid, recipient_session, core_route_stanza, stanza) |
146 local h = hosts[host]; | 146 local h = hosts[host]; |
147 local count = 0; | 147 local count = 0; |
148 if h and h.type == "local" then | 148 if h and h.type == "local" then |
149 local u = h.sessions[user]; | 149 local u = h.sessions[user]; |
150 if u then | 150 if u then |
151 for k, session in pairs(u.sessions) do | 151 for k, session in pairs(u.sessions) do |
152 local pres = session.presence; | 152 local pres = session.presence; |
153 if pres then | 153 if pres then |
154 if stanza then pres = stanza; pres.attr.from = session.full_jid; end | |
154 pres.attr.to = jid; | 155 pres.attr.to = jid; |
155 core_route_stanza(session, pres); | 156 core_route_stanza(session, pres); |
156 pres.attr.to = nil; | 157 pres.attr.to = nil; |
157 count = count + 1; | 158 count = count + 1; |
158 end | 159 end |
197 -- 2. roster push (subscription = none or to) | 198 -- 2. roster push (subscription = none or to) |
198 if rostermanager.unsubscribed(node, host, to_bare) then | 199 if rostermanager.unsubscribed(node, host, to_bare) then |
199 rostermanager.roster_push(node, host, to_bare); | 200 rostermanager.roster_push(node, host, to_bare); |
200 end | 201 end |
201 core_route_stanza(origin, stanza); | 202 core_route_stanza(origin, stanza); |
203 -- COMPAT: Some legacy clients keep displaying unsubscribed contacts as online unless an unavailable presence is sent: | |
204 send_presence_of_available_resources(node, host, to_bare, origin, core_route_stanza, | |
205 st.presence({ type="unavailable", from=from_bare, to=to_bare, id=stanza.attr.id })); | |
202 end | 206 end |
203 stanza.attr.from, stanza.attr.to = st_from, st_to; | 207 stanza.attr.from, stanza.attr.to = st_from, st_to; |
204 end | 208 end |
205 | 209 |
206 function handle_inbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare, core_route_stanza) | 210 function handle_inbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare, core_route_stanza) |