Merge 0.9->0.10 (third time lucky)
[prosody.git] / plugins / adhoc / adhoc.lib.lua
index ecddcd1d173ec3e6e9196227ee8b3be90a39c825..5c90c91ba8931360cd87d2921504091b292d57eb 100644 (file)
@@ -25,16 +25,16 @@ function _M.new(name, node, handler, permission)
 end
 
 function _M.handle_cmd(command, origin, stanza)
-       local sessionid = stanza.tags[1].attr.sessionid or uuid.generate();
+       local cmdtag = stanza.tags[1]
+       local sessionid = cmdtag.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 "execute";
-       dataIn.form = stanza.tags[1]:child_with_ns("jabber:x:data");
+       dataIn.action = cmdtag.attr.action or "execute";
+       dataIn.form = cmdtag:get_child("x", "jabber:x:data");
 
        local data, state = command:handler(dataIn, states[sessionid]);
        states[sessionid] = state;
-       local stanza = st.reply(stanza);
        local cmdtag;
        if data.status == "completed" then
                states[sessionid] = nil;
@@ -44,8 +44,8 @@ function _M.handle_cmd(command, origin, stanza)
                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);
-               origin.send(stanza);
+               local reply = st.error_reply(stanza, data.error.type, data.error.condition, data.error.message);
+               origin.send(reply);
                return true;
        else
                cmdtag = command:cmdtag("executing", sessionid);
@@ -78,8 +78,9 @@ function _M.handle_cmd(command, origin, stanza)
                        cmdtag:add_child(content);
                end
        end
-       stanza:add_child(cmdtag);
-       origin.send(stanza);
+       local reply = st.reply(stanza);
+       reply:add_child(cmdtag);
+       origin.send(reply);
 
        return true;
 end