diff options
author | Matthew Wild <mwild1@gmail.com> | 2009-08-18 13:03:35 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2009-08-18 13:03:35 +0100 |
commit | 4b1f3c9e4ae2aaca4934660f5b5259ef46eea6f7 (patch) | |
tree | b70a070f34bd849d2e53290b5c9c4354758ed84c /util/discohelper.lua | |
parent | b5d5ab2446bacedb0ba7e4509f6ea45426b8bc5a (diff) | |
parent | dae72952d261b285282add61ba0ea9be9cdaa22a (diff) | |
download | prosody-4b1f3c9e4ae2aaca4934660f5b5259ef46eea6f7.tar.gz prosody-4b1f3c9e4ae2aaca4934660f5b5259ef46eea6f7.zip |
Merge waqas with Tobias. Eww.
Diffstat (limited to 'util/discohelper.lua')
-rw-r--r-- | util/discohelper.lua | 89 |
1 files changed, 0 insertions, 89 deletions
diff --git a/util/discohelper.lua b/util/discohelper.lua deleted file mode 100644 index 5d9bf287..00000000 --- a/util/discohelper.lua +++ /dev/null @@ -1,89 +0,0 @@ --- Prosody IM --- Copyright (C) 2008-2009 Matthew Wild --- Copyright (C) 2008-2009 Waqas Hussain --- --- This project is MIT/X11 licensed. Please see the --- COPYING file in the source package for more information. --- - - - -local t_insert = table.insert; -local jid_split = require "util.jid".split; -local ipairs = ipairs; -local st = require "util.stanza"; - -module "discohelper"; - -local function addDiscoItemsHandler(self, jid, func) - if self.item_handlers[jid] then - t_insert(self.item_handlers[jid], func); - else - self.item_handlers[jid] = {func}; - end -end - -local function addDiscoInfoHandler(self, jid, func) - if self.info_handlers[jid] then - t_insert(self.info_handlers[jid], func); - else - self.info_handlers[jid] = {func}; - end -end - -local function handle(self, stanza) - if stanza.name == "iq" and stanza.tags[1].name == "query" then - local query = stanza.tags[1]; - local to = stanza.attr.to; - local from = stanza.attr.from - local node = query.attr.node or ""; - local to_node, to_host = jid_split(to); - - local reply = st.reply(stanza):query(query.attr.xmlns); - local handlers; - if query.attr.xmlns == "http://jabber.org/protocol/disco#info" then -- select handler set - handlers = self.info_handlers; - elseif query.attr.xmlns == "http://jabber.org/protocol/disco#items" then - handlers = self.item_handlers; - end - local handler; - local found; -- to keep track of any handlers found - if to_node then -- handlers which get called always - handler = handlers["*node"]; - else - handler = handlers["*host"]; - end - if handler then -- call always called handler - for _, h in ipairs(handler) do - if h(reply, to, from, node) then found = true; end - end - end - handler = handlers[to]; -- get the handler - if not handler then -- if not found then use default handler - if to_node then - handler = handlers["*defaultnode"]; - else - handler = handlers["*defaulthost"]; - end - end - if handler then - for _, h in ipairs(handler) do - if h(reply, to, from, node) then found = true; end - end - end - if found then return reply; end -- return the reply if there was one - return st.error_reply(stanza, "cancel", "service-unavailable"); - end -end - -function new() - return { - item_handlers = {}; - info_handlers = {}; - addDiscoItemsHandler = addDiscoItemsHandler; - addDiscoInfoHandler = addDiscoInfoHandler; - handle = handle; - }; -end - -return _M; |