author | Myhailo Danylenko <isbear@ukrpost.net> |
Sat, 21 Mar 2009 05:05:14 +0200 | |
changeset 44 | bd66956cd397 |
parent 42 | 18d801679feb |
permissions | -rw-r--r-- |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
1 |
|
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
2 |
receiving_files = {} |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
3 |
ibb_block_size = 4096 |
42 | 4 |
local ibb_sid = 0 |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
5 |
|
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
6 |
ibb_incoming_iq_handler = lm.message_handler.new ( |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
7 |
function ( conn, mess ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
8 |
local id = mess:attribute ( 'id' ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
9 |
local from = mess:attribute ( 'from' ) |
38
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
10 |
|
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
11 |
local open = mess:child ( 'open' ) |
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
12 |
if open and open:attribute ( 'xmlns' ) == 'http://jabber.org/protocol/ibb' then |
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
13 |
local sid = open:attribute ( 'sid' ) |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
14 |
if not receiving_files[sid] then |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
15 |
local buffer = '' |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
16 |
receiving_files[sid] = { from = from, status = 'pending' } |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
17 |
receiving_files[sid].accept = |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
18 |
function ( name ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
19 |
main.print_info ( from, string.format ( "Receiving stream from %s, id %s", from, sid ) ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
20 |
conn:send ( lm.message.create { to = from, mtype = 'iq-result', id = id } ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
21 |
receiving_files[sid].name = name |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
22 |
receiving_files[sid].status = 'accepted' |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
23 |
end |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
24 |
receiving_files[sid].reject = |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
25 |
function () |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
26 |
conn:send ( |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
27 |
lm.message.create { to = from, mtype = 'iq-error', id = id, |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
28 |
error = { code = '405', type = 'cancel', |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
29 |
['not-allowed'] = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' } |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
30 |
} |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
31 |
} ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
32 |
receiving_files[sid].status = 'rejected' |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
33 |
end |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
34 |
print ( 'You have a new bytestream to receive. To save it use /ibb accept ' .. sid .. ' filename' ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
35 |
else |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
36 |
conn:send ( |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
37 |
lm.message.create { to = from, mtype = 'iq-error', id = id, |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
38 |
error = { code = '409', type = 'cancel', |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
39 |
conflict = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' } |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
40 |
} |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
41 |
} ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
42 |
end |
38
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
43 |
return true |
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
44 |
end |
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
45 |
|
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
46 |
local qdata = mess:child ( 'data' ) |
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
47 |
if qdata and qdata:attribute ( 'xmlns' ) == 'http://jabber.org/protocol/ibb' then |
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
48 |
local sid = qdata:attribute ( 'sid' ) |
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
49 |
local seq = qdata:attribute ( 'seq' ) |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
50 |
if receiving_files[sid] and from == receiving_files[sid].from and not receiving_files[sid][tonumber(seq)+1] then |
38
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
51 |
local data = qdata:value () |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
52 |
main.print_info ( from, string.format ( " - stream part %s, id %s, %d bytes", seq, sid, data:len() ) ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
53 |
conn:send ( lm.message.create { to = from, mtype = 'iq-result', id = id } ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
54 |
receiving_files[sid][tonumber(seq)+1] = data |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
55 |
else |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
56 |
receiving_files[sid] = nil -- invalidate session |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
57 |
conn:send ( |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
58 |
lm.message.create { to = from, mtype = 'iq-error', id = id, |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
59 |
error = { code = '409', type = 'cancel', |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
60 |
conflict = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' } |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
61 |
} |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
62 |
} ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
63 |
end |
38
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
64 |
return true |
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
65 |
end |
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
66 |
|
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
67 |
local close = mess:child ( 'close' ) |
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
68 |
if close and close:attribute ( 'xmlns' ) == 'http://jabber.org/protocol/ibb' then |
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
69 |
local sid = close:attribute ( 'sid' ) |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
70 |
if receiving_files[sid] and from == receiving_files[sid].from then |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
71 |
main.print_info ( from, "Done with stream id " .. sid ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
72 |
conn:send ( lm.message.create { to = from, mtype = 'iq-result', id = id } ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
73 |
local decoder = io.popen ( string.format ( "base64 -d -i >%q", receiving_files[sid].name ), "w" ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
74 |
if not decoder then |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
75 |
main.print_info ( from, "Error opening decoder" ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
76 |
else |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
77 |
for i, v in ipairs ( receiving_files[sid] ) do |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
78 |
decoder:write ( v ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
79 |
end |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
80 |
decoder:close () |
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 |
else |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
83 |
receiving_files[sid] = nil -- invalidate session |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
84 |
conn:send ( |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
85 |
lm.message.create { to = from, mtype = 'iq-error', id = id, |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
86 |
error = { code = '409', type = 'cancel', |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
87 |
conflict = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' } |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
88 |
} |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
89 |
} ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
90 |
end |
38
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
91 |
return true |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
92 |
end |
38
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
93 |
|
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
94 |
return false |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
95 |
end ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
96 |
|
42 | 97 |
function ibb_send_file ( conn, to, name, id ) |
10 | 98 |
if not to then |
99 |
to = main.full_jid () |
|
100 |
elseif not to:match ( "/" ) then |
|
101 |
to = main.full_jid ( to ) |
|
102 |
end |
|
42 | 103 |
local sid = id |
104 |
if not sid then -- XXX: move out of here? |
|
105 |
ibb_sid = ibb_sid + 1 |
|
106 |
sid = 'ibb_' .. ibb_sid |
|
107 |
end |
|
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
108 |
conn:send ( |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
109 |
lm.message.create { to = to, mtype = 'iq-set', |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
110 |
open = { sid = sid, ['block-size'] = ibb_block_size, xmlns = 'http://jabber.org/protocol/ibb' } |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
111 |
}, |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
112 |
function ( conn, message ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
113 |
if message:child ( 'error' ) then |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
114 |
main.print_info ( to, "Stream request refused: " .. message:child( 'error' ):children():name () ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
115 |
else |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
116 |
main.print_info ( to, "Stream accepted, starting sequence" ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
117 |
local buffer = '' |
42 | 118 |
main.bgread ( string.format ( 'base64 -w 0 %q', name ), -- FIXME: stream reader function? XXX: then we need in-place base64 encoder. |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
119 |
function ( data ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
120 |
if data then |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
121 |
buffer = buffer .. data |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
122 |
return true |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
123 |
else |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
124 |
local seq = 0 |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
125 |
local msgbuf = buffer:sub ( 1, ibb_block_size ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
126 |
buffer = buffer:sub ( ibb_block_size + 1 ) |
42 | 127 |
local function handler ( conn, mess ) |
128 |
local mtype, smtype = mess:type () |
|
129 |
if smtype == 'error' then |
|
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
130 |
main.print_info ( to, "Stream error, transfer ceased at seq = " .. seq .. ": " .. message:child( 'error' ):children():name () ) |
42 | 131 |
elseif smtype == 'result' then |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
132 |
main.print_info ( to, " - acquired seq = " .. seq ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
133 |
seq = seq + 1 |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
134 |
if buffer:len () == 0 then |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
135 |
conn:send ( |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
136 |
lm.message.create { to = to, mtype = 'iq-set', |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
137 |
close = { sid = sid, xmlns = 'http://jabber.org/protocol/ibb' } |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
138 |
}, |
42 | 139 |
function ( conn, mess ) |
140 |
local mtype, smtype = mess:type () |
|
141 |
if smtype == 'error' then |
|
142 |
main.print_info ( to, "Error at closing stream: " .. mess:child( 'error' ):children():name () ) |
|
143 |
elseif smtype == 'result' then |
|
144 |
main.print_info ( to, "File successfully transferred" ) |
|
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
145 |
else |
42 | 146 |
print ( 'Weird response for close of ibb stream: ' .. mess:xml () ) |
147 |
return false |
|
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
148 |
end |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
149 |
return true |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
150 |
end ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
151 |
else |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
152 |
local msgbuf = buffer:sub ( 1, ibb_block_size ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
153 |
buffer = buffer:sub ( ibb_block_size ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
154 |
conn:send ( |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
155 |
lm.message.create { to = to, mtype = 'iq-set', |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
156 |
data = { sid = sid, xmlns = 'http://jabber.org/protocol/ibb', seq = seq, |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
157 |
msgbuf |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
158 |
} |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
159 |
}, |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
160 |
handler ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
161 |
end |
42 | 162 |
else |
163 |
print ( 'Weird response for ibb block: ' .. mess:xml () ) |
|
164 |
return false |
|
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
165 |
end |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
166 |
return true |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
167 |
end |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
168 |
conn:send ( |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
169 |
lm.message.create { to = to, mtype = 'iq-set', |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
170 |
data = { sid = sid, xmlns = 'http://jabber.org/protocol/ibb', seq = seq, |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
171 |
msgbuf |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
172 |
} |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
173 |
}, |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
174 |
handler ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
175 |
return false |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
176 |
end |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
177 |
end ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
178 |
end |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
179 |
return true |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
180 |
end ) |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
181 |
end |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
182 |
|
7
eb6d89bf1fbf
Commands and init improvements
Myhailo Danylenko <isbear@ukrpost.net>
parents:
5
diff
changeset
|
183 |
main.command ( 'ibb', |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
184 |
function ( args ) |
24 | 185 |
local action = args[1] |
186 |
if action == 'send' then |
|
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
187 |
local who |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
188 |
if args.t then |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
189 |
who = args.t |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
190 |
else |
10 | 191 |
who = main.full_jid () |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
192 |
end |
38
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
193 |
ibb_send_file ( lm.connection.bless ( main.connection () ), who, args[2] ) |
24 | 194 |
elseif action == 'accept' then |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
195 |
local id = args[2] |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
196 |
if receiving_files[id] then |
24 | 197 |
receiving_files[id].accept ( args[3] ) |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
198 |
end |
24 | 199 |
elseif action == 'reject' then |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
200 |
local id = args[2] |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
201 |
if receiving_files[id] then |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
202 |
receiving_files[id].reject () |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
203 |
end |
24 | 204 |
elseif action == 'del' then |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
205 |
local id = args[2] |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
206 |
receiving_files[id] = nil |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
207 |
else |
24 | 208 |
local text = '' |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
209 |
for sid, data in pairs ( receiving_files ) do |
24 | 210 |
text = text .. '\n' .. sid .. ': ' .. ( data.name or '(not set)' ) .. ' [' .. data.status .. ']' |
211 |
end |
|
212 |
if text ~= '' then |
|
213 |
print ( 'List of incoming streams:' .. text ) |
|
214 |
else |
|
215 |
print ( 'No streams' ) |
|
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
216 |
end |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
217 |
end |
34
8206d7cb1447
Args auto-parsing, use main.binding
Myhailo Danylenko <isbear@ukrpost.net>
parents:
27
diff
changeset
|
218 |
end, true, { "send", "accept", "reject", "del" } ) |
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
219 |
|
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
220 |
commands_help['ibb'] = "[[-t target_jid] send filename | accept sid filename | reject sid filename | del sid]\n\nRequests, accepts or rejects sending file via in-band bytestream." |
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
221 |
|
8 | 222 |
hooks_d['hook-post-connect'].xep0047 = |
223 |
function ( args ) |
|
224 |
lm.connection.bless( main.connection () ):handler ( ibb_incoming_iq_handler, 'iq', 'normal' ) |
|
225 |
ibb_handler_registered = true |
|
226 |
hooks_d['hook-post-connect'].xep0047 = nil |
|
227 |
hooks_d['hook-quit'].xep0047 = |
|
228 |
function ( args ) |
|
229 |
if ibb_handler_registered then |
|
230 |
lm.connection.bless( main.connection () ):handler ( ibb_incoming_iq_handler, 'iq' ) |
|
231 |
end |
|
232 |
end |
|
233 |
end |
|
234 |
||
38
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
235 |
main.add_feature ( 'http://jabber.org/protocol/ibb' ) |
1f141d9a081a
IBB uses user connection, optimization
Myhailo Danylenko <isbear@ukrpost.net>
parents:
34
diff
changeset
|
236 |
|
5
cba039bd6f13
Included sample configuration into package
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
237 |
-- vim: se ts=4: -- |