diff mod_adhoc/adhoc/adhoc.lib.lua @ 124:843cadf36306

mod_adhoc*: Move state handling to mod_adhoc itself
author Florian Zeitz <florob@babelmonkeys.de>
date Sat, 23 Jan 2010 04:43:28 +0100
parents c04443ea114c
children b8a89ebf71e3
line wrap: on
line diff
--- a/mod_adhoc/adhoc/adhoc.lib.lua	Fri Jan 22 19:05:28 2010 +0100
+++ b/mod_adhoc/adhoc/adhoc.lib.lua	Sat Jan 23 04:43:28 2010 +0100
@@ -1,7 +1,9 @@
-local st = require "util.stanza";
+local st, uuid = require "util.stanza", require "util.uuid";
 
 local xmlns_cmd = "http://jabber.org/protocol/commands";
 
+local states = {}
+
 local _M = {};
 
 function _cmdtag(desc, status, sessionid, action)
@@ -17,24 +19,28 @@
 end
 
 function _M.handle_cmd(command, origin, stanza)
-	local sessionid = stanza.tags[1].attr.sessionid or nil;
+	local sessionid = stanza.tags[1].attr.sessionid or uuid.generate();
 	local dataIn = {};
 	dataIn.to = stanza.attr.to;
 	dataIn.from = stanza.attr.from;
 	dataIn.action = stanza.tags[1].attr.action or nil;
 	dataIn.form = stanza.tags[1]:child_with_ns("jabber:x:data");
 
-	local data, sessid = command:handler(dataIn, sessionid);
+	local data, state = command:handler(dataIn, states[sessionid]);
+	states[sessionid] = state;
 	local stanza = st.reply(stanza);
 	if data.status == "completed" then
-		cmdtag = command:cmdtag("completed", sessid);
+		states[sessionid] = nil;
+		cmdtag = command:cmdtag("completed", sessionid);
 	elseif data.status == "canceled" then
-		cmdtag = command:cmdtag("canceled", sessid);
+		states[sessionid] = nil;
+		cmdtag = command:cmdtag("canceled", sessionid);
 	elseif data.status == "error" then
+		states[sessionid] = nil;
 		stanza = st.error_reply(stanza, data.error.type, data.error.condition, data.error.message);
-		cmdtag = command:cmdtag("canceled", sessid);
+		cmdtag = command:cmdtag("canceled", sessionid);
 	else 
-		cmdtag = command:cmdtag("executing", sessid);
+		cmdtag = command:cmdtag("executing", sessionid);
 	end
 
 	for name, content in pairs(data) do