Diff

plugins/mod_presence.lua @ 2531:697ff4f98033

mod_presence: Added handler for presence subscriptions and probes to local hosts.
author Waqas Hussain <waqas20@gmail.com>
date Fri, 29 Jan 2010 21:06:51 +0500
parent 2525:e385511b3a54
child 2532:b1b1b4a7db26
line wrap: on
line diff
--- a/plugins/mod_presence.lua	Fri Jan 29 21:04:36 2010 +0500
+++ b/plugins/mod_presence.lua	Fri Jan 29 21:06:51 2010 +0500
@@ -309,13 +309,6 @@
 	end
 	return true;
 end);
-module:hook("presence/host", function (data)
-	local stanza = data.stanza;
-	local reply = st.reply(stanza);
-	reply.attr.type = "unsubscribed";
-	handle_inbound_presence_subscriptions_and_probes(data.origin, reply, jid_bare(stanza.attr.to), jid_bare(stanza.attr.from), core_route_stanza);
-	return true;
-end);
 module:hook("presence/full", function(data)
 	-- inbound presence to full JID recieved
 	local origin, stanza = data.origin, data.stanza;
@@ -333,6 +326,20 @@
 	end -- resource not online, discard
 	return true;
 end);
+module:hook("presence/host", function(data)
+	-- inbound presence to the host
+	local origin, stanza = data.origin, data.stanza;
+	
+	local from_bare = jid_bare(stanza.attr.from);
+	local t = stanza.attr.type;
+	if t == "probe" then
+		core_route_stanza(hosts[module.host], st.presence({ from = module.host, to = from_bare, id = stanza.attr.id }));
+	elseif t == "subscribe" then
+		core_route_stanza(hosts[module.host], st.presence({ from = module.host, to = from_bare, id = stanza.attr.id, type = "subscribed" }));
+		core_route_stanza(hosts[module.host], st.presence({ from = module.host, to = from_bare, id = stanza.attr.id }));
+	end
+	return true;
+end);
 
 module:hook("resource-unbind", function(event)
 	local session, err = event.session, event.error;