author | Myhailo Danylenko <isbear@ukrpost.net> |
Mon, 23 Feb 2009 23:16:46 +0200 | |
changeset 4 | bca17e4a9851 |
permissions | -rw-r--r-- |
4
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
1 |
|
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
2 |
function disco_items ( callback, what, node ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
3 |
local request = |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
4 |
lm.message.create { to = what, mtype = 'iq-get', |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
5 |
query = { xmlns = 'http://jabber.org/protocol/disco#items' } |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
6 |
} |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
7 |
if node then |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
8 |
request:child( 'query' ):attribute ( 'node', node ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
9 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
10 |
return lm.connection.bless( main.connection () ):send ( request, |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
11 |
function ( conn, message ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
12 |
if message:child ( 'error' ) then |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
13 |
callback ( message:child( 'error' ):children():name () ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
14 |
else |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
15 |
local item = message:child( 'query' ):children () |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
16 |
local items = { } |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
17 |
while item do |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
18 |
if item:name () == 'item' then |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
19 |
table.insert ( items, { jid = item:attribute ( 'jid' ), node = item:attribute ( 'node' ), name = item:attribute ( 'name' ) } ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
20 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
21 |
item = item:next () |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
22 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
23 |
callback ( items ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
24 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
25 |
return true |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
26 |
end ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
27 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
28 |
|
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
29 |
function disco_info ( callback, what ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
30 |
return lm.connection.bless( main.connection () ):send ( |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
31 |
lm.message.create { to = what, mtype = 'iq-get', |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
32 |
query = { xmlns='http://jabber.org/protocol/disco#info' } |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
33 |
}, |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
34 |
function ( conn, message ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
35 |
local items_supported = false |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
36 |
if message:child ( 'error' ) then |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
37 |
callback ( message:child( 'error' ):children():name () ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
38 |
else |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
39 |
local item = message:child( 'query' ):children () |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
40 |
local identities = { } |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
41 |
local features = { } |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
42 |
while item do |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
43 |
if item:name () == 'identity' then |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
44 |
table.insert ( identities, { category = item:attribute ( 'category' ), type = item:attribute ( 'type' ), name = item:attribute ( 'name' ) } ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
45 |
elseif item:name () == 'feature' then |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
46 |
table.insert ( features, item:attribute ( 'var' ) ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
47 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
48 |
item = item:next () |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
49 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
50 |
callback ( identities, features ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
51 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
52 |
return true |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
53 |
end ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
54 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
55 |
|
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
56 |
main.add_command ( 'disco', |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
57 |
function ( args ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
58 |
args = parse_args ( args ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
59 |
local who |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
60 |
if args.t then |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
61 |
who = args.t |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
62 |
args.t = nil |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
63 |
else |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
64 |
who = full_current_jid () |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
65 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
66 |
if args[1] == 'items' then |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
67 |
local node = nil |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
68 |
if args[2] then |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
69 |
args[1] = nil |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
70 |
node = rebuild_args_string ( args ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
71 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
72 |
disco_items ( |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
73 |
function ( items ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
74 |
if type ( items ) == 'string' then |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
75 |
main.print_info ( who, string.format ( "Service items discovery for %s (%s) failed: %s", who, node or '', items ) ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
76 |
else |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
77 |
main.print_info ( who, string.format ( "Service items discovery result for %s (%s):", who, node or '' ) ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
78 |
for index, item in ipairs ( items ) do |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
79 |
main.print_info ( who, string.format ( " [%s (%s)] %s", item.jid or '', item.node or '', item.name or '' ) ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
80 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
81 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
82 |
end, who, node ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
83 |
else |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
84 |
disco_info ( |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
85 |
function ( identities, features ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
86 |
if type ( identities ) == 'string' then |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
87 |
main.print_info ( who, string.format ( "Service info discovery for %s failed: %s", who, identities ) ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
88 |
else |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
89 |
main.print_info ( who, string.format ( "Service info discovery result for %s:", who ) ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
90 |
main.print_info ( who, " Identities:" ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
91 |
for index, identity in ipairs ( identities ) do |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
92 |
main.print_info ( who, string.format ( " [%s (%s)] %s", identity.category or '', identity.type or '', identity.name or '' ) ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
93 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
94 |
main.print_info ( who, " Features:" ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
95 |
for index, feature in ipairs ( features ) do |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
96 |
main.print_info ( who, string.format ( " [%s]", feature or '' ) ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
97 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
98 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
99 |
end, who ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
100 |
end |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
101 |
end ) |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
102 |
|
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
103 |
commands_help['disco'] = "[-t target_jid] [info | items] [node]\n\nService discovery request.\nInfo is sent if omitted.\nIf info reveals, that buddy can do items, items request also will be sent." |
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
104 |
|
bca17e4a9851
Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
105 |
-- vim: se ts=4: -- |