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