examples/lm/disco.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Tue, 31 Mar 2009 18:35:34 +0300
changeset 68 742878c74b8e
child 70 e43e386c8a33
permissions -rw-r--r--
Lm separation, privacy * Library parts moved to lm.* * mc_* renamed to plain names * Privacy lists suppart (not tested)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
-- SERVICE DISCOVERY (XEP-0030)
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
-- TODO handler
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
-- library
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
local iq = require 'lm.iq'
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
--
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
local F = { }
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
function F.items ( conn, to, success, fail, node )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
	iq.send ( conn, to, 'get',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
		{
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
			query = { xmlns = 'http://jabber.org/protocol/disco#items', node = node }
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
		},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
		function ( mess )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
			local item  = mess:child( 'query' ):child ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
			local items = { }
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
			while item do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
				if item:name () == 'item' then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
					table.insert ( items, { jid = item:attribute ( 'jid' ), node = item:attribute ( 'node' ), name = item:attribute ( 'name' ) } )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
				end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
				item = item:next ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
			success ( items )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
		end,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
		fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
function F.info ( conn, to, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
	iq.send ( conn, to, 'get',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
		{
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
			query = { xmlns='http://jabber.org/protocol/disco#info' }
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
		},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
		function ( mess )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
			local identities = { }
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
			local features   = { }
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
			local item       = mess:child( 'query' ):child ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
			while item do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
				local name  = item:name ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
				if name == 'identity' then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
					table.insert ( identities, { category = item:attribute ( 'category' ), type = item:attribute ( 'type' ), name = item:attribute ( 'name' ) } )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
				elseif name == 'feature' then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
					table.insert ( features, item:attribute ( 'var' ) )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
				end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
				item = item:next ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
			success ( identities, features )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
		end,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
		fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
return F
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
-- vim: se ts=4: --