Software / code / prosody
Annotate
plugins/mod_disco.lua @ 1699:53d16a28ee00
mod_disco: Handle disco#info queries using new APIs
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Tue, 18 Aug 2009 12:37:40 +0500 |
| parent | 1523:841d61be198f |
| child | 1700:255935c7a915 |
| rev | line source |
|---|---|
|
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 | 5 -- This project is MIT/X11 licensed. Please see the |
| 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:
896
diff
changeset
|
9 local discomanager_handle = require "core.discomanager".handle; |
|
83b2e07e9039
mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
896
diff
changeset
|
10 |
|
83b2e07e9039
mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
896
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:
896
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:
896
diff
changeset
|
13 |
|
83b2e07e9039
mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
896
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:
896
diff
changeset
|
15 session.send(discomanager_handle(stanza)); |
|
83b2e07e9039
mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
896
diff
changeset
|
16 end); |
|
83b2e07e9039
mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
896
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:
896
diff
changeset
|
18 session.send(discomanager_handle(stanza)); |
|
83b2e07e9039
mod_disco: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
896
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); |