examples/ibb.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Sat, 21 Mar 2009 03:42:49 +0200
changeset 41 9e39fd8a20df
child 43 7c22b1f2c6e5
permissions -rw-r--r--
Updated to library module ibb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
-- IN-BAND BYTESTREAMS (XEP-0047)
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
-- library
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
require 'lm'
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
require 'base64'
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
iq = { }
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
function iq.send ( conn, to, smtype, data, success, fail )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
	data.mtype = 'iq-' .. smtype
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
	data.to    = to
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
	conn:send ( lm.message.create ( data ),
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
		function ( conn, mess )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
			local mtype, smtype = mess:type ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
			if smtype == 'result' then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
				success ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
			elseif smtype == 'error' then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
				fail ( mess:child( 'error' ):children():name () ) -- FIXME
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
			else
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
				fail ( mess:xml () )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
				return false
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
			end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
			return true
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
		end )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
-- public
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
ibb = {
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
	block_size    = 4096,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
	streamhandler =
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
		function ( accept, reject )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
			reject ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
		end,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
}
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
local ibb_sid = 0 -- private
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
function ibb.send ( conn, to, success, fail, id )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
	local bs    = ibb.block_size -- local instance
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
	local sid   = id
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
	if not sid then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
		ibb_sid = ibb_sid + 1
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
		sid     = 'ibb_' .. ibb_sid
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
	end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
	iq.send ( conn, to, 'set',
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
		{
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
			open = { sid = sid, ['block-size'] = bs, xmlns = 'http://jabber.org/protocol/ibb' }
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
		},
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
		function ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
			local seq   = 0
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
			local noerr = true
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
			success (
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
				function ( data, success, fail )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
					if not data  then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
						iq.send ( conn, to, 'set',
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
							{
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
								close = { sid = sid, xmlns = 'http://jabber.org/protocol/ibb' },
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
							},
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
							function ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
								success ( 'end' ) -- XXX
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
							end,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
							fail )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
					elseif data ~= '' then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    67
						local encoded = base64.encode ( data )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    68
						while encoded:len () > 0 and noerr do
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    69
							local chunk = encoded:sub ( 1, bs )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
							local cseq  = seq -- local instance for closure
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
							encoded     = encoded:sub ( bs + 1 )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    72
							seq         = seq + 1
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
							iq.send ( conn, to, 'set',
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    74
								{
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    75
									data = { sid = sid, xmlns = 'http://jabber.org/protocol/ibb', seq = cseq,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    76
										chunk,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    77
									},
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    78
								},
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    79
								function ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    80
									success ( cseq )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    81
								end,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    82
								function ( mesg )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    83
									noerr = false
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    84
									fail ( mesg )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    85
								end )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    86
						end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    87
					end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    88
				end )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    89
		end,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    90
		fail )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    91
end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    92
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    93
-- private
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    94
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    95
local ibb_files               = {}
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    96
local ibb_handler_registered  = false
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    97
local ibb_incoming_iq_handler = lm.message_handler.new ( 
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    98
	function ( conn, mess )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    99
		local mtype, smtype = mess:type ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   100
		if smtype ~= 'set' then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   101
			return false
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   102
		end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   103
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   104
		local child = mess:children ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   105
		if not child or child:attribute ( 'xmlns' ) ~= 'http://jabber.org/protocol/ibb' then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   106
			return false
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   107
		end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   108
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   109
		local id     = mess:attribute ( 'id' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   110
		local from   = mess:attribute ( 'from' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   111
		local action = child:name ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   112
		local sid    = child:attribute ( 'sid' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   113
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   114
		if action == 'open' then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   115
			if not ibb_files[sid] then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   116
				ibb.streamhandler ( from,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   117
					function ( success, fail )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   118
						ibb_files[sid] = { from = from, success = success, fail = fail }
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   119
						conn:send ( lm.message.create { to = from, mtype = 'iq-result', id = id } )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   120
					end,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   121
					function ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   122
						conn:send (
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   123
							lm.message.create { to = from, mtype = 'iq-error', id = id,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   124
								error = { code = '405', type = 'cancel',
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   125
									['not-allowed'] = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' }
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   126
								}
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   127
							} )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   128
					end )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   129
			else
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   130
				conn:send (
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   131
					lm.message.create { to = from, mtype = 'iq-error', id = id,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   132
						error = { code = '409', type = 'cancel',
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   133
							conflict = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' }
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   134
						}
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   135
					} )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   136
			end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   137
		elseif action == 'data' then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   138
			local seq = child:attribute ( 'seq' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   139
			if ibb_files[sid] and from == ibb_files[sid].from and not ibb_files[sid][tonumber(seq)+1] then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   140
				local data = child:value ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   141
				conn:send ( lm.message.create { to = from, mtype = 'iq-result', id = id } )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   142
				ibb_files[sid][tonumber(seq)+1] = data
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   143
-- XXX			ibb_files[sid].success ( seq )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   144
			else
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   145
				if ibb_files[sid] then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   146
					ibb_files[sid].fail ( 'conflict' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   147
					ibb_files[sid] = nil -- invalidate session
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   148
					conn:send (
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   149
						lm.message.create { to = from, mtype = 'iq-error', id = id,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   150
							error = { code = '409', type = 'cancel',
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   151
								conflict = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' }
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   152
							}
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   153
						} )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   154
				else
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   155
					conn:send (
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   156
						lm.message.create { to = from, mtype = 'iq-error', id = id,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   157
							error = { code = '404', type = 'cancel', -- XXX: check
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   158
								['item-not-found'] = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' }
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   159
							}
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   160
						} )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   161
				end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   162
			end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   163
		elseif action == 'close' then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   164
			if ibb_files[sid] and from == ibb_files[sid].from then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   165
				local data = ''
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   166
				for seq, chunk in ipairs ( ibb_files[sid] ) do
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   167
					data = data .. chunk
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   168
				end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   169
				local decoded = base64.decode ( data )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   170
				ibb_files[sid].success ( decoded )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   171
				conn:send ( lm.message.create { to = from, mtype = 'iq-result', id = id } )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   172
				ibb_files[sid] = nil
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   173
			else
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   174
				if ibb_files[sid] then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   175
					ibb_files[sid].fail ( 'conflict' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   176
					ibb_files[sid] = nil -- invalidate session
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   177
					conn:send (
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   178
						lm.message.create { to = from, mtype = 'iq-error', id = id,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   179
							error = { code = '409', type = 'cancel',
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   180
								conflict = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' }
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   181
							}
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   182
						} )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   183
				else
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   184
					conn:send (
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   185
						lm.message.create { to = from, mtype = 'iq-error', id = id,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   186
							error = { code = '404', type = 'cancel', -- XXX: check
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   187
								['item-not-found'] = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' }
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   188
							}
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   189
						} )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   190
				end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   191
			end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   192
		else
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   193
			return false
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   194
		end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   195
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   196
		return true
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   197
	end )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   198
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   199
-- mcabber
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   200
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   201
local mc_incoming_files = { }
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   202
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   203
ibb.streamhandler =
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   204
	function ( from, accept, reject )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   205
		local fid = #mc_incoming_files + 1
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   206
		mc_incoming_files[fid] = {
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   207
				from   = from,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   208
				accept =
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   209
					function ( name )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   210
						mc_incoming_files[fid].name = name
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   211
						accept (
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   212
							function ( data )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   213
								local h = io.open ( mc_incoming_files[fid].name, 'w' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   214
								if not h then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   215
									print ( 'Cannot open output file: ' .. mc_incoming_files[fid].name )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   216
									return
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   217
								end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   218
								h:write ( data )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   219
								h:close ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   220
								print ( 'Stream ' .. fid .. ' successfully saved to ' .. mc_incoming_files[fid].name )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   221
								mc_incoming_files[fid] = nil
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   222
							end,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   223
							function ( mesg )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   224
								main.print_info ( from, 'Stream error: ' .. mesg )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   225
								mc_incoming_files[fid] = nil -- XXX
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   226
							end )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   227
					end,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   228
				reject =
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   229
					function ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   230
						reject ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   231
						print ( 'Stream ' .. fid .. ' rejected' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   232
						mc_incoming_files[fid] = nil
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   233
					end,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   234
		}
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   235
		main.print_info ( from, from .. ' wants you to receive stream. Use /ibb [accept|reject] ' .. fid .. ' to process his request.' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   236
	end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   237
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   238
main.command ( 'ibb',
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   239
	function ( args )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   240
		local action = args[1]
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   241
		if action == 'send' then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   242
			local who
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   243
			if args.t then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   244
				who = args.t
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   245
			else
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   246
				who = main.full_jid ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   247
			end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   248
			local fname = args[2]
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   249
			ibb.send ( lm.connection.bless ( main.connection () ), who,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   250
				function ( sender )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   251
					main.print_info ( who, 'Stream accepted' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   252
					local noerr = true
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   253
					local h     = io.open ( fname, 'r' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   254
					if not h then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   255
						print ( 'Cannot open file ' .. fname )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   256
						return
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   257
					end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   258
					local data = h:read ( '*a' ) -- In fact, it is better to read it in chunks :/
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   259
					h:close ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   260
					local fail =
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   261
						function ( mesg )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   262
							noerr = false
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   263
							main.print_info ( who, 'Stream error: ' .. mesg )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   264
						end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   265
					sender ( data,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   266
						function ( seq )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   267
							main.print_info ( who, 'Delivery notification of chunk #' .. seq )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   268
						end, fail )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   269
					if noerr then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   270
						sender ( nil,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   271
							function ( seq )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   272
								main.print_info ( who, 'Stream finalizing notification' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   273
							end, fail )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   274
					end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   275
					if noerr then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   276
						main.print_info ( who, 'Stream sent' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   277
					else
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   278
						main.print_info ( who, 'Stream error occured' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   279
					end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   280
				end,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   281
				function ( mesg )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   282
					main.print_info ( who, 'Stream initiation error: ' .. mesg )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   283
				end )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   284
		elseif action == 'accept' then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   285
			local id = tonumber(args[2])
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   286
			if mc_incoming_files[id] then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   287
				mc_incoming_files[id].accept ( args[3] )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   288
			end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   289
		elseif action == 'reject' then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   290
			local id = tonumber(args[2])
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   291
			if mc_incoming_files[id] then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   292
				mc_incoming_files[id].reject ()
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   293
			end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   294
		else
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   295
			local text = ''
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   296
			for sid, data in pairs ( mc_incoming_files ) do
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   297
				text = text .. '\n' ..  sid .. ': ' .. data.from .. ' --> ' .. ( data.name or '?' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   298
			end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   299
			if text ~= '' then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   300
				print ( 'List of incoming streams:' .. text )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   301
			else
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   302
				print ( 'No streams' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   303
			end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   304
		end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   305
	end, true, { "send", "accept", "reject" } )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   306
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   307
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   308
commands_help['ibb'] = "[[-t target_jid] send filename | accept sid filename | reject sid]\n\nRequests, accepts or rejects sending file via in-band bytestream."
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   309
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   310
hooks_d['hook-post-connect'].ibb =
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   311
	function ( args )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   312
		lm.connection.bless( main.connection () ):handler ( ibb_incoming_iq_handler, 'iq', 'normal' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   313
		ibb_handler_registered = true
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   314
		hooks_d['hook-post-connect'].ibb = nil
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   315
		hooks_d['hook-quit'].ibb =
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   316
			function ( args )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   317
				if ibb_handler_registered then
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   318
					lm.connection.bless( main.connection () ):handler ( ibb_incoming_iq_handler, 'iq' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   319
				end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   320
			end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   321
	end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   322
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   323
main.add_feature ( 'http://jabber.org/protocol/ibb' )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   324
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   325
-- vim: se ts=4: --