plugins/mod_disco.lua

Tue, 18 Aug 2009 12:37:40 +0500

author
Waqas Hussain <waqas20@gmail.com>
date
Tue, 18 Aug 2009 12:37:40 +0500
changeset 1699
53d16a28ee00
parent 1523
841d61be198f
child 1700
255935c7a915
permissions
-rw-r--r--

mod_disco: Handle disco#info queries using new APIs

1523
841d61be198f Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents: 1510
diff changeset
1 -- Prosody IM
760
90ce865eebd8 Update copyright notices for 2009
Matthew Wild <mwild1@gmail.com>
parents: 759
diff changeset
2 -- Copyright (C) 2008-2009 Matthew Wild
90ce865eebd8 Update copyright notices for 2009
Matthew Wild <mwild1@gmail.com>
parents: 759
diff changeset
3 -- Copyright (C) 2008-2009 Waqas Hussain
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 438
diff changeset
4 --
758
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 615
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 615
diff changeset
6 -- COPYING file in the source package for more information.
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 438
diff changeset
7 --
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 438
diff changeset
8
1510
83b2e07e9039 mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
9 local discomanager_handle = require "core.discomanager".handle;
83b2e07e9039 mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
10
83b2e07e9039 mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
11 module:add_feature("http://jabber.org/protocol/disco#info");
83b2e07e9039 mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
12 module:add_feature("http://jabber.org/protocol/disco#items");
83b2e07e9039 mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
13
83b2e07e9039 mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
14 module:add_iq_handler({"c2s", "s2sin"}, "http://jabber.org/protocol/disco#info", function (session, stanza)
83b2e07e9039 mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
15 session.send(discomanager_handle(stanza));
83b2e07e9039 mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
16 end);
83b2e07e9039 mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
17 module:add_iq_handler({"c2s", "s2sin"}, "http://jabber.org/protocol/disco#items", function (session, stanza)
83b2e07e9039 mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
18 session.send(discomanager_handle(stanza));
83b2e07e9039 mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents: 894
diff changeset
19 end);
1699
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
20
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
21 local st = require "util.stanza"
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
22 module:hook("iq/host/http://jabber.org/protocol/disco#info:query", function(event)
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
23 local origin, stanza = event.origin, event.stanza;
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
24 if stanza.attr.type ~= "get" then return; end
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
25 local node = stanza.tags[1].attr.node;
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
26 if node and node ~= "" then return; end -- TODO fire event?
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
27
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
28 local reply = st.reply(stanza):query("http://jabber.org/protocol/disco#info");
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
29 local done = {};
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
30 for _,identity in ipairs(module:get_host_items("identity")) do
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
31 local identity_s = identity.category.."\0"..identity.type;
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
32 if not done[identity_s] then
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
33 reply:tag("identity", identity):up();
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
34 done[identity_s] = true;
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
35 end
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
36 end
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
37 for _,feature in ipairs(module:get_host_items("feature")) do
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
38 if not done[feature] then
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
39 reply:tag("feature", {var=feature}):up();
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
40 done[feature] = true;
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
41 end
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
42 end
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
43 origin.send(reply);
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
44 return true;
53d16a28ee00 mod_disco: Handle disco#info queries using new APIs
Waqas Hussain <waqas20@gmail.com>
parents: 1523
diff changeset
45 end);

mercurial