|
|
|
|
@ -12,9 +12,10 @@ local t_concat = table.concat; |
|
|
|
|
local t_remove = table.remove; |
|
|
|
|
local t_concat = table.concat; |
|
|
|
|
local s_format = string.format; |
|
|
|
|
local s_match = string.match; |
|
|
|
|
local s_match = string.match; |
|
|
|
|
local tostring = tostring; |
|
|
|
|
local setmetatable = setmetatable; |
|
|
|
|
local getmetatable = getmetatable; |
|
|
|
|
local pairs = pairs; |
|
|
|
|
local ipairs = ipairs; |
|
|
|
|
local type = type; |
|
|
|
|
@ -215,6 +216,24 @@ function deserialize(stanza) |
|
|
|
|
return stanza; |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
function clone(stanza) |
|
|
|
|
local lookup_table = {}; |
|
|
|
|
local function _copy(object) |
|
|
|
|
if type(object) ~= "table" then |
|
|
|
|
return object; |
|
|
|
|
elseif lookup_table[object] then |
|
|
|
|
return lookup_table[object]; |
|
|
|
|
end |
|
|
|
|
local new_table = {}; |
|
|
|
|
lookup_table[object] = new_table; |
|
|
|
|
for index, value in pairs(object) do |
|
|
|
|
new_table[_copy(index)] = _copy(value); |
|
|
|
|
end |
|
|
|
|
return setmetatable(new_table, getmetatable(object)); |
|
|
|
|
end |
|
|
|
|
return _copy(stanza) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
function message(attr, body) |
|
|
|
|
if not body then |
|
|
|
|
return stanza("message", attr); |
|
|
|
|
|