Diff

util/stanza.lua @ 1:b8787e859fd2

Switched to new connection framework, courtesy of the luadch project Now supports SSL on 5223 Beginning support for presence (aka. the proper routing of stanzas)
author matthew
date Sun, 24 Aug 2008 01:51:02 +0000
parent 0:3e3171b59028
child 2:9bb397205f26
line wrap: on
line diff
--- a/util/stanza.lua	Fri Aug 22 21:09:04 2008 +0000
+++ b/util/stanza.lua	Sun Aug 24 01:51:02 2008 +0000
@@ -1,10 +1,11 @@
-local t_insert  =   table.insert;
-local t_remove  =   table.remove;
-local format    =  string.format;
-local tostring  =       tostring;
-local setmetatable= setmetatable;
-local pairs     =          pairs;
-local ipairs    =         ipairs;
+local t_insert      =  table.insert;
+local t_remove      =  table.remove;
+local format        = string.format;
+local tostring      =      tostring;
+local setmetatable  =  setmetatable;
+local pairs         =         pairs;
+local ipairs        =        ipairs;
+local type          =          type;
 
 module "stanza"
 
@@ -12,7 +13,7 @@
 stanza_mt.__index = stanza_mt;
 
 function stanza(name, attr)
-	local stanza = { name = name, attr = attr or {}, last_add = {}};
+	local stanza = { name = name, attr = attr or {}, tags = {}, last_add = {}};
 	return setmetatable(stanza, stanza_mt);
 end
 
@@ -46,6 +47,9 @@
 end
 
 function stanza_mt:add_child(child)
+	if type(child) == "table" then
+		t_insert(self.tags, child);
+	end
 	t_insert(self, child);
 end
 
@@ -55,6 +59,16 @@
 	end
 end
 
+function stanza_mt:children()
+	local i = 0;
+	return function (a)
+			i = i + 1
+			local v = a[i]
+			if v then return v; end
+		end, self, i;
+	                                    
+end
+
 function stanza_mt.__tostring(t)
 	local children_text = "";
 	for n, child in ipairs(t) do
@@ -63,14 +77,14 @@
 
 	local attr_string = "";
 	if t.attr then
-		for k, v in pairs(t.attr) do attr_string = attr_string .. format(" %s='%s'", k, tostring(v)); end
+		for k, v in pairs(t.attr) do if type(k) == "string" then attr_string = attr_string .. format(" %s='%s'", k, tostring(v)); end end
 	end
 
 	return format("<%s%s>%s</%s>", t.name, attr_string, children_text, t.name);
 end
 
 function stanza_mt.__add(s1, s2)
-	return s:add_child(s2);
+	return s1:add_child(s2);
 end