Merge 0.10->trunk
[prosody.git] / util / stanza.lua
index 8bb9ba0545df6e8bc4d7a2eb7a1bf85526d6494b..a598a81ecd1e35c8f18688734194776c2adb5113 100644 (file)
@@ -40,8 +40,8 @@ local _ENV = nil;
 local stanza_mt = { __type = "stanza" };
 stanza_mt.__index = stanza_mt;
 
-local function new_stanza(name, attr)
-       local stanza = { name = name, attr = attr or {}, tags = {} };
+local function new_stanza(name, attr, namespaces)
+       local stanza = { name = name, attr = attr or {}, namespaces = namespaces, tags = {} };
        return setmetatable(stanza, stanza_mt);
 end
 
@@ -53,8 +53,8 @@ function stanza_mt:body(text, attr)
        return self:tag("body", attr):text(text);
 end
 
-function stanza_mt:tag(name, attrs)
-       local s = new_stanza(name, attrs);
+function stanza_mt:tag(name, attr, namespaces)
+       local s = new_stanza(name, attr, namespaces);
        local last_add = self.last_add;
        if not last_add then last_add = {}; self.last_add = last_add; end
        (last_add[#last_add] or self):add_direct_child(s);
@@ -332,7 +332,12 @@ end
 local function clone(stanza)
        local attr, tags = {}, {};
        for k,v in pairs(stanza.attr) do attr[k] = v; end
-       local new = { name = stanza.name, attr = attr, tags = tags };
+       local old_namespaces, namespaces = stanza.namespaces;
+       if old_namespaces then
+               namespaces = {};
+               for k,v in pairs(old_namespaces) do namespaces[k] = v; end
+       end
+       local new = { name = stanza.name, attr = attr, namespaces = namespaces, tags = tags };
        for i=1,#stanza do
                local child = stanza[i];
                if child.name then