Mercurial > prosody-modules
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