aboutsummaryrefslogtreecommitdiffstats
path: root/util/stanza.lua
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2008-10-09 00:50:45 +0100
committerMatthew Wild <mwild1@gmail.com>2008-10-09 00:50:45 +0100
commit5ec7a9c8b4d215817cb158d824be869ff2441dbc (patch)
tree8b23999f066a4bfbe93a5f4f011e3831d8719dd9 /util/stanza.lua
parentebf2876664150333b33e6ef2f359df6dab3dabfe (diff)
downloadprosody-5ec7a9c8b4d215817cb158d824be869ff2441dbc.tar.gz
prosody-5ec7a9c8b4d215817cb158d824be869ff2441dbc.zip
Stanza preserialize/deserialize helpers, to strip and restore stanzas respectively. Fixed mod_vcard to use these.
Diffstat (limited to 'util/stanza.lua')
-rw-r--r--util/stanza.lua37
1 files changed, 36 insertions, 1 deletions
diff --git a/util/stanza.lua b/util/stanza.lua
index 06991cda..a4fd0f82 100644
--- a/util/stanza.lua
+++ b/util/stanza.lua
@@ -6,6 +6,7 @@ local setmetatable = setmetatable;
local pairs = pairs;
local ipairs = ipairs;
local type = type;
+local unpack = unpack;
local s_gsub = string.gsub;
module "stanza"
@@ -107,6 +108,40 @@ do
end
end
+function preserialize(stanza)
+ local s = { name = stanza.name, attr = stanza.attr };
+ for _, child in ipairs(stanza) do
+ if type(child) == "table" then
+ t_insert(s, preserialize(child));
+ else
+ t_insert(s, child);
+ end
+ end
+ return s;
+end
+
+function deserialize(stanza)
+ -- Set metatable
+ setmetatable(stanza, stanza_mt);
+ for _, child in ipairs(stanza) do
+ if type(child) == "table" then
+ deserialize(child);
+ end
+ end
+ if not stanza.tags then
+ -- Rebuild tags
+ local tags = {};
+ for _, child in ipairs(stanza) do
+ if type(child) == "table" then
+ t_insert(tags, child);
+ end
+ end
+ stanza.tags = tags;
+ end
+
+ return stanza;
+end
+
function message(attr, body)
if not body then
return stanza("message", attr);
@@ -137,4 +172,4 @@ function presence(attr)
return stanza("presence", attr);
end
-return _M; \ No newline at end of file
+return _M;