Changeset

1261:497178e0ddbe

Automated merge with http://waqas.ath.cx:8000/
author Matthew Wild <mwild1@gmail.com>
date Mon, 01 Jun 2009 01:36:42 +0100
parents 1260:04c1fae0eb03 (diff) 1258:01b69efffb1c (current diff)
children 1263:7797354dc9b5
files
diffstat 2 files changed, 19 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/core/modulemanager.lua	Sun May 31 22:52:50 2009 +0100
+++ b/core/modulemanager.lua	Mon Jun 01 01:36:42 2009 +0100
@@ -49,6 +49,7 @@
 local features_table = multitable_new();
 local handler_table = multitable_new();
 local hooked = multitable_new();
+local hooks = multitable_new();
 local event_hooks = multitable_new();
 
 local NULL = {};
@@ -165,6 +166,13 @@
 		end
 	end
 	event_hooks:remove(host, name);
+	-- unhook event handlers hooked by module:hook
+	for event, handlers in pairs(hooks:get(host, name) or NULL) do
+		for handler in pairs(handlers or NULL) do
+			(hosts[host] or prosody).events.remove_handler(event, handler);
+		end
+	end
+	hooks:remove(host, name);
 	return true;
 end
 
@@ -356,6 +364,7 @@
 end
 
 function api:hook(event, handler)
+	hooks:set(self.host, self.name, event, handler, true);
 	(hosts[self.host] or prosody).events.add_handler(event, handler);
 end
 
--- a/plugins/mod_iq.lua	Sun May 31 22:52:50 2009 +0100
+++ b/plugins/mod_iq.lua	Mon Jun 01 01:36:42 2009 +0100
@@ -22,12 +22,20 @@
 
 	-- TODO if not user exists, return an error
 	-- TODO fire post processing events
-	-- TODO fire event with the xmlns:tag of the child, or with the id of errors and results
+	if #stanza.tags == 1 then
+		return module:fire_event("iq/bare/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].name);
+	else
+		return true; -- TODO do something with results and errors
+	end
 end);
 
 module:hook("iq/host", function(data)
 	-- IQ to a local host recieved
 	local origin, stanza = data.origin, data.stanza;
 
-	-- TODO fire event with the xmlns:tag of the child, or with the id of errors and results
+	if #stanza.tags == 1 then
+		return module:fire_event("iq/host/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].name);
+	else
+		return true; -- TODO do something with results and errors
+	end
 end);