From 2e735c5b6cdf59c4a96af39497b66a1e36371aea Mon Sep 17 00:00:00 2001 From: bt Date: Wed, 17 Sep 2008 22:20:08 +0300 Subject: Some docs written by Thorns. Need reviewing. --- core/.directory | 3 + doc/.directory | 3 + doc/lxmppd_core_offlinemessages.txt | 12 ++++ doc/lxmppd_core_rostermanager.txt | 9 +++ doc/lxmppd_core_stanz_dispatch.txt | 26 +++++++ util/stanza.lua | 6 +- util/stanza.lua~ | 138 ++++++++++++++++++++++++++++++++++++ 7 files changed, 194 insertions(+), 3 deletions(-) create mode 100644 core/.directory create mode 100644 doc/.directory create mode 100644 doc/lxmppd_core_offlinemessages.txt create mode 100644 doc/lxmppd_core_rostermanager.txt create mode 100644 doc/lxmppd_core_stanz_dispatch.txt create mode 100644 util/stanza.lua~ diff --git a/core/.directory b/core/.directory new file mode 100644 index 00000000..a4330e19 --- /dev/null +++ b/core/.directory @@ -0,0 +1,3 @@ +[Dolphin] +Timestamp=2008,9,15,21,41,24 +ViewMode=1 diff --git a/doc/.directory b/doc/.directory new file mode 100644 index 00000000..2bcc45d8 --- /dev/null +++ b/doc/.directory @@ -0,0 +1,3 @@ +[Dolphin] +Timestamp=2008,9,15,21,41,28 +ViewMode=1 diff --git a/doc/lxmppd_core_offlinemessages.txt b/doc/lxmppd_core_offlinemessages.txt new file mode 100644 index 00000000..fa06a8e0 --- /dev/null +++ b/doc/lxmppd_core_offlinemessages.txt @@ -0,0 +1,12 @@ +lxmppd -> core -> offlinemessages.lua + requires "util.datamanager" + module "offlinemessage" + +function new(user, host, stanza) + returns a function that stores the offline message it received + +This module offers storing of offline messages. + +Description: If the user that is supposed to get the message is not online, + we store the messages locally as offline messages for later + processing. \ No newline at end of file diff --git a/doc/lxmppd_core_rostermanager.txt b/doc/lxmppd_core_rostermanager.txt new file mode 100644 index 00000000..4f501158 --- /dev/null +++ b/doc/lxmppd_core_rostermanager.txt @@ -0,0 +1,9 @@ +lxmppd -> core -> rostermanager.lua + requires "util.datamanager" + module "rostermanager" + +function log(type, message) + logs a message of type "rostermanager" + +function getroster(username, host) + Retrieves the user's roster from the server and loads it with the datamanager \ No newline at end of file diff --git a/doc/lxmppd_core_stanz_dispatch.txt b/doc/lxmppd_core_stanz_dispatch.txt new file mode 100644 index 00000000..c76844e9 --- /dev/null +++ b/doc/lxmppd_core_stanz_dispatch.txt @@ -0,0 +1,26 @@ +lxmppd -> core -> stanza_dispatch + requires "util.stanza" + requires "core.usermanager" + +function init_stanza_dispatcher(session) + Initialises the stanza dispatcher which handles different stanza according + to their type and XML namespace, dispatching to required handlers. + + iq_handlers["jabber:iq:auth"] + A list of handlers for "jabber:iq:auth" stanzas -- authentication + (request) stanzas. + + function (stanza) + If one of username, password and resource are missing then it ????. + If not, then it validates the credentials and replies with the + appropriate stanza. + + iq_handlers["jabber:iq:roster"] + A list of handlers for "jabber:iq:roster" stanzas -- roster management + + function (stanza) + Parses the type of stanza for roster management and does what is + requested (roster retrieval, etc.) + + function (stanza) + Validates the stanza and calls the required handler diff --git a/util/stanza.lua b/util/stanza.lua index 35277e9c..3a17fc20 100644 --- a/util/stanza.lua +++ b/util/stanza.lua @@ -1,6 +1,6 @@ local t_insert = table.insert; local t_remove = table.remove; -local format = string.format; +local s_format = string.format; local tostring = tostring; local setmetatable = setmetatable; local pairs = pairs; @@ -97,10 +97,10 @@ function stanza_mt.__tostring(t) local attr_string = ""; if t.attr then - 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 + for k, v in pairs(t.attr) do if type(k) == "string" then attr_string = attr_string .. s_format(" %s='%s'", k, tostring(v)); end end end - return format("<%s%s>%s", t.name, attr_string, children_text, t.name); + return s_format("<%s%s>%s", t.name, attr_string, children_text, t.name); end function stanza_mt.__add(s1, s2) diff --git a/util/stanza.lua~ b/util/stanza.lua~ new file mode 100644 index 00000000..04259487 --- /dev/null +++ b/util/stanza.lua~ @@ -0,0 +1,138 @@ +local t_insert = table.insert; +local t_remove = table.remove; +local s_format = string.format; +local tostring = tostring; +local setmetatable = setmetatable; +local pairs = pairs; +local ipairs = ipairs; +local type = type; +local s_gsub = string.gsub; +module "stanza" + +stanza_mt = {}; +stanza_mt.__index = stanza_mt; + +function stanza(name, attr) + local stanza = { name = name, attr = attr or {}, tags = {}, last_add = {}}; + return setmetatable(stanza, stanza_mt); +end + +function stanza_mt:iq(attrs) + return self + stanza("iq", attrs) +end +function stanza_mt:message(attrs) + return self + stanza("message", attrs) +end +function stanza_mt:presence(attrs) + return self + stanza("presence", attrs) +end +function stanza_mt:query(xmlns) + return self:tag("query", { xmlns = xmlns }); +end +function stanza_mt:tag(name, attrs) + local s = stanza(name, attrs); + (self.last_add[#self.last_add] or self):add_child(s); + t_insert(self.last_add, s); + return self; +end + +function stanza_mt:text(text) + (self.last_add[#self.last_add] or self):add_child(text); + return self; +end + +function stanza_mt:up() + t_remove(self.last_add); + return self; +end + +function stanza_mt:add_child(child) + if type(child) == "table" then + t_insert(self.tags, child); + end + t_insert(self, child); +end + +function stanza_mt:child_with_name(name) + for _, child in ipairs(self) do + if child.name == name then return child; end + 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:childtags() + local i = 0; + return function (a) + i = i + 1 + local v = self.tags[i] + if v then return v; end + end, self.tags[1], i; + +end + +do + local xml_entities = { ["'"] = "'", ["\""] = """, ["<"] = "<", [">"] = ">", ["&"] = "&" }; + function xml_escape(s) return s_gsub(s, "['&<>\"]", xml_entities); end +end + +local xml_escape = xml_escape; + +function stanza_mt.__tostring(t) + local children_text = ""; + for n, child in ipairs(t) do + if type(child) == "string" then + children_text = children_text .. xml_escape(child); + else + children_text = children_text .. tostring(child); + end + end + + local attr_string = ""; + if t.attr then + for k, v in pairs(t.attr) do if type(k) == "string" then attr_string = attr_string .. s_format(" %s='%s'", k, tostring(v)); end end + end + + return s_format("<%s%s>%s", t.name, attr_string, children_text, t.name); +end + +function stanza_mt.__add(s1, s2) + return s1:add_child(s2); +end + + +do + local id = 0; + function new_id() + id = id + 1; + return "lx"..id; + end +end + +function message(attr, body) + if not body then + return stanza("message", attr); + else + return stanza("message", attr):tag("body"):text(body); + end +end +function iq(attr) + if attr and not attr.id then attr.id = new_id(); end + return stanza("iq", attr or { id = new_id() }); +end + +function reply(orig) + return stanza(orig.name, orig.attr and { to = orig.attr.from, from = orig.attr.to, id = orig.attr.id, type = ((orig.name == "iq" and "result") or nil) }); +end + +function presence(attr) + return stanza("presence", attr); +end + -- cgit v1.2.3 From facfe9608a22bdae34327b414df846686b4f63f9 Mon Sep 17 00:00:00 2001 From: bt Date: Wed, 17 Sep 2008 23:26:48 +0300 Subject: Removed ~ files --- util/stanza.lua~ | 138 ------------------------------------------------------- 1 file changed, 138 deletions(-) delete mode 100644 util/stanza.lua~ diff --git a/util/stanza.lua~ b/util/stanza.lua~ deleted file mode 100644 index 04259487..00000000 --- a/util/stanza.lua~ +++ /dev/null @@ -1,138 +0,0 @@ -local t_insert = table.insert; -local t_remove = table.remove; -local s_format = string.format; -local tostring = tostring; -local setmetatable = setmetatable; -local pairs = pairs; -local ipairs = ipairs; -local type = type; -local s_gsub = string.gsub; -module "stanza" - -stanza_mt = {}; -stanza_mt.__index = stanza_mt; - -function stanza(name, attr) - local stanza = { name = name, attr = attr or {}, tags = {}, last_add = {}}; - return setmetatable(stanza, stanza_mt); -end - -function stanza_mt:iq(attrs) - return self + stanza("iq", attrs) -end -function stanza_mt:message(attrs) - return self + stanza("message", attrs) -end -function stanza_mt:presence(attrs) - return self + stanza("presence", attrs) -end -function stanza_mt:query(xmlns) - return self:tag("query", { xmlns = xmlns }); -end -function stanza_mt:tag(name, attrs) - local s = stanza(name, attrs); - (self.last_add[#self.last_add] or self):add_child(s); - t_insert(self.last_add, s); - return self; -end - -function stanza_mt:text(text) - (self.last_add[#self.last_add] or self):add_child(text); - return self; -end - -function stanza_mt:up() - t_remove(self.last_add); - return self; -end - -function stanza_mt:add_child(child) - if type(child) == "table" then - t_insert(self.tags, child); - end - t_insert(self, child); -end - -function stanza_mt:child_with_name(name) - for _, child in ipairs(self) do - if child.name == name then return child; end - 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:childtags() - local i = 0; - return function (a) - i = i + 1 - local v = self.tags[i] - if v then return v; end - end, self.tags[1], i; - -end - -do - local xml_entities = { ["'"] = "'", ["\""] = """, ["<"] = "<", [">"] = ">", ["&"] = "&" }; - function xml_escape(s) return s_gsub(s, "['&<>\"]", xml_entities); end -end - -local xml_escape = xml_escape; - -function stanza_mt.__tostring(t) - local children_text = ""; - for n, child in ipairs(t) do - if type(child) == "string" then - children_text = children_text .. xml_escape(child); - else - children_text = children_text .. tostring(child); - end - end - - local attr_string = ""; - if t.attr then - for k, v in pairs(t.attr) do if type(k) == "string" then attr_string = attr_string .. s_format(" %s='%s'", k, tostring(v)); end end - end - - return s_format("<%s%s>%s", t.name, attr_string, children_text, t.name); -end - -function stanza_mt.__add(s1, s2) - return s1:add_child(s2); -end - - -do - local id = 0; - function new_id() - id = id + 1; - return "lx"..id; - end -end - -function message(attr, body) - if not body then - return stanza("message", attr); - else - return stanza("message", attr):tag("body"):text(body); - end -end -function iq(attr) - if attr and not attr.id then attr.id = new_id(); end - return stanza("iq", attr or { id = new_id() }); -end - -function reply(orig) - return stanza(orig.name, orig.attr and { to = orig.attr.from, from = orig.attr.to, id = orig.attr.id, type = ((orig.name == "iq" and "result") or nil) }); -end - -function presence(attr) - return stanza("presence", attr); -end - -- cgit v1.2.3 From a8530586f59ae6cdd61c99546c1ffe8b9dfd10d7 Mon Sep 17 00:00:00 2001 From: bt Date: Wed, 17 Sep 2008 23:30:48 +0300 Subject: Grrr! Don't use KDE apps to view this repo! --- core/.directory | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 core/.directory diff --git a/core/.directory b/core/.directory deleted file mode 100644 index a4330e19..00000000 --- a/core/.directory +++ /dev/null @@ -1,3 +0,0 @@ -[Dolphin] -Timestamp=2008,9,15,21,41,24 -ViewMode=1 -- cgit v1.2.3