From 7d63169215f0c4c0384c717980ef54ab458c5cf3 Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Sun, 22 Nov 2009 21:45:31 +0500 Subject: mod_presence: Acknowledge subscription requests by responding with an unavailable presence. --- plugins/mod_presence.lua | 1 + 1 file changed, 1 insertion(+) (limited to 'plugins/mod_presence.lua') diff --git a/plugins/mod_presence.lua b/plugins/mod_presence.lua index f83e017b..468049cc 100644 --- a/plugins/mod_presence.lua +++ b/plugins/mod_presence.lua @@ -233,6 +233,7 @@ function handle_inbound_presence_subscriptions_and_probes(origin, stanza, from_b -- 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); -- cgit v1.2.3 From 889562f945cc57d19db944d6085fdfe5683dea5d Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Sun, 22 Nov 2009 21:47:54 +0500 Subject: mod_presence: Route incoming presence subscription stanzas (types unsubscribe, subscribed and unsubscribed) to the user before roster pushes. --- plugins/mod_presence.lua | 3 +++ 1 file changed, 3 insertions(+) (limited to 'plugins/mod_presence.lua') diff --git a/plugins/mod_presence.lua b/plugins/mod_presence.lua index 468049cc..cda8dab0 100644 --- a/plugins/mod_presence.lua +++ b/plugins/mod_presence.lua @@ -242,14 +242,17 @@ function handle_inbound_presence_subscriptions_and_probes(origin, stanza, from_b 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 -- cgit v1.2.3 From cfce018b808e0978ab6d573ef09a4a9d4ec0eddd Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Thu, 26 Nov 2009 13:00:11 +0500 Subject: mod_presence: Removed an unnecessary compatibility workaround which was causing issues with unavailable presence exchange after subscription removal. --- plugins/mod_presence.lua | 3 --- 1 file changed, 3 deletions(-) (limited to 'plugins/mod_presence.lua') diff --git a/plugins/mod_presence.lua b/plugins/mod_presence.lua index cda8dab0..939df6b8 100644 --- a/plugins/mod_presence.lua +++ b/plugins/mod_presence.lua @@ -200,9 +200,6 @@ function handle_outbound_presence_subscriptions_and_probes(origin, stanza, from_ rostermanager.roster_push(node, host, to_bare); end core_route_stanza(origin, stanza); - -- COMPAT: Some legacy clients keep displaying unsubscribed contacts as online unless an unavailable presence is sent: - send_presence_of_available_resources(node, host, to_bare, origin, core_route_stanza, - st.presence({ type="unavailable", from=from_bare, to=to_bare, id=stanza.attr.id })); end stanza.attr.from, stanza.attr.to = st_from, st_to; end -- cgit v1.2.3 From 0554c71543ee4a199b056accac6a4bc1bc26d216 Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Thu, 26 Nov 2009 13:02:10 +0500 Subject: mod_presence: Use the local host as origin for subscription request acks. --- plugins/mod_presence.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'plugins/mod_presence.lua') diff --git a/plugins/mod_presence.lua b/plugins/mod_presence.lua index 939df6b8..d3818a5d 100644 --- a/plugins/mod_presence.lua +++ b/plugins/mod_presence.lua @@ -230,7 +230,7 @@ function handle_inbound_presence_subscriptions_and_probes(origin, stanza, from_b -- 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 + core_route_stanza(hosts[host], 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); -- cgit v1.2.3 From de4aa7b47a2c991271943b5c12edfd567cf4de60 Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Thu, 26 Nov 2009 15:19:59 +0500 Subject: mod_presence: Use the local host object as the origin for auto-generated subscription approvals and cancellations. --- plugins/mod_presence.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'plugins/mod_presence.lua') diff --git a/plugins/mod_presence.lua b/plugins/mod_presence.lua index d3818a5d..abbc3a3d 100644 --- a/plugins/mod_presence.lua +++ b/plugins/mod_presence.lua @@ -220,11 +220,11 @@ function handle_inbound_presence_subscriptions_and_probes(origin, stanza, from_b -- 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="unsubscribed"})); + core_route_stanza(hosts[host], st.presence({from=to_bare, to=from_bare, type="unsubscribed"})); end elseif stanza.attr.type == "subscribe" then if rostermanager.is_contact_subscribed(node, host, from_bare) then - core_route_stanza(origin, st.presence({from=to_bare, to=from_bare, type="subscribed"})); -- already subscribed + core_route_stanza(hosts[host], st.presence({from=to_bare, to=from_bare, type="subscribed"})); -- already subscribed -- Sending presence is not clearly stated in the RFC, but it seems appropriate if 0 == send_presence_of_available_resources(node, host, from_bare, origin, core_route_stanza) then -- TODO send last recieved unavailable presence (or we MAY do nothing, which is fine too) -- cgit v1.2.3