Automated merge with http://waqas.ath.cx:8000/

Sat, 30 May 2009 13:49:38 +0100

author
Matthew Wild <mwild1@gmail.com>
date
Sat, 30 May 2009 13:49:38 +0100
changeset 1235
be8b51a8ab03
parent 1234
0ff02499f05c (diff)
parent 1230
53555f58586f (current diff)
child 1236
eca772495e20

Automated merge with http://waqas.ath.cx:8000/

--- a/core/modulemanager.lua	Fri May 29 22:11:44 2009 +0100
+++ b/core/modulemanager.lua	Sat May 30 13:49:38 2009 +0100
@@ -354,6 +354,14 @@
 	return eventmanager.fire_event(...);
 end
 
+function api:hook(event, handler)
+	if self.host ~= '*' then
+		hosts[self.host].events.add_handler(event, handler);
+	else
+		self:log("error", "Global module attempting to hook a host-specific event: %s", event);
+	end
+end
+
 --------------------------------------------------------------------
 
 local actions = {};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/mod_iq.lua	Sat May 30 13:49:38 2009 +0100
@@ -0,0 +1,33 @@
+
+local full_sessions = full_sessions;
+local bare_sessions = bare_sessions;
+
+module:hook("iq/full", function(data)
+	-- IQ to full JID recieved
+	local origin, stanza = data.origin, data.stanza;
+
+	local session = full_sessions[stanza.attr.to];
+	if session then
+		-- TODO fire post processing event
+		session.send(stanza);
+		return true;
+	else -- resource not online
+		-- TODO error reply
+	end
+end);
+
+module:hook("iq/bare", function(data)
+	-- IQ to bare JID recieved
+	local origin, stanza = data.origin, data.stanza;
+
+	-- 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
+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
+end);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/mod_message.lua	Sat May 30 13:49:38 2009 +0100
@@ -0,0 +1,41 @@
+
+local full_sessions = full_sessions;
+local bare_sessions = bare_sessions;
+
+local jid_bare = require "util.jid".bare;
+local user_exists = require "core.usermanager".user_exists;
+
+module:hook("message/full", function(data)
+	-- message to full JID recieved
+	local origin, stanza = data.origin, data.stanza;
+	
+	local session = full_sessions[stanza.attr.to];
+	if session then
+		-- TODO fire post processing event
+		session.send(stanza);
+		return true;
+	else -- resource not online
+		-- TODO fire event to send to bare JID
+	end
+end);
+
+module:hook("message/bare", function(data)
+	-- message to bare JID recieved
+	local origin, stanza = data.origin, data.stanza;
+
+	local sessions = bare_sessions[stanza.attr.to];
+	if sessions then sessions = sessions.sessions; end
+	
+	if sessions then
+		-- some resources are online
+		-- TODO find top resources willing to accept this message
+		-- TODO then send them each the stanza
+	else
+		-- no resources are online
+		-- TODO check if the user exists
+		-- TODO if it doesn't, return an error reply
+		-- TODO otherwise, apply the default privacy list
+		-- TODO and store into offline storage
+		-- TODO or maybe the offline store can apply privacy lists
+	end
+end);

mercurial