scripts/xep0047.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Mon, 23 Feb 2009 23:16:46 +0200
changeset 4 bca17e4a9851
permissions -rw-r--r--
Added sample configuration files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
receiving_files = {}
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
ibb_block_size  = 4096
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
current_sid_number = 0
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
-- FIXME: read from /dev/urandom?
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
function gen_unique_sid ()
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
	current_sid_number = current_sid_number + 1
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
	return 'mc-' .. tostring ( current_sid_number )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
ibb_incoming_iq_handler = lm.message_handler.new ( 
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
	function ( conn, mess )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
		local id   = mess:attribute ( 'id' )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
		local from = mess:attribute ( 'from' )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
		if mess:child ( 'open' ) and mess:child( 'open' ):attribute ( 'xmlns' ) == 'http://jabber.org/protocol/ibb' then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
			local sid  = mess:child( 'open' ):attribute ( 'sid' )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
			if not receiving_files[sid] then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
				local buffer = ''
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
				receiving_files[sid] = { from = from, status = 'pending' }
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
				receiving_files[sid].accept =
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
					function ( name )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
						main.print_info ( from, string.format ( "Receiving stream from %s, id %s", from, sid ) )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
						conn:send ( lm.message.create { to = from, mtype = 'iq-result', id = id } )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
						receiving_files[sid].name = name
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
						receiving_files[sid].status = 'accepted'
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
					end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
				receiving_files[sid].reject =
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
					function ()
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
						conn:send (
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
							lm.message.create { to = from, mtype = 'iq-error', id = id,
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
								error = { code = '405', type = 'cancel',
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
									['not-allowed'] = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' }
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
								}
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
							} )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
						receiving_files[sid].status = 'rejected'
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
					end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
				print ( 'You have a new bytestream to receive. To save it use /ibb accept ' .. sid .. ' filename' )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
			else
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
				conn:send (
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
					lm.message.create { to = from, mtype = 'iq-error', id = id,
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
						error = { code = '409', type = 'cancel',
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
							conflict = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' }
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
						}
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
					} )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
			end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
		elseif mess:child ( 'data' ) and mess:child( 'data' ):attribute ( 'xmlns' ) == 'http://jabber.org/protocol/ibb' then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
			local sid  = mess:child( 'data' ):attribute ( 'sid' )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
			local seq  = mess:child( 'data' ):attribute ( 'seq' )
bca17e4a9851 Added sample configuration files
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
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
				local data = mess:child( 'data' ):value ()
bca17e4a9851 Added sample configuration files
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() ) )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
				conn:send ( lm.message.create { to = from, mtype = 'iq-result', id = id } )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
				receiving_files[sid][tonumber(seq)+1] = data
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
			else
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
				receiving_files[sid] = nil -- invalidate session
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
				conn:send (
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
					lm.message.create { to = from, mtype = 'iq-error', id = id,
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
						error = { code = '409', type = 'cancel',
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
							conflict = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' }
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
						}
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
					} )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
			end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
		elseif mess:child ( 'close' ) and mess:child( 'close' ):attribute ( 'xmlns' ) == 'http://jabber.org/protocol/ibb' then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
			local sid  = mess:child( 'close' ):attribute ( 'sid' )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
			if receiving_files[sid] and from == receiving_files[sid].from then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    67
				main.print_info ( from, "Done with stream id " .. sid )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    68
				conn:send ( lm.message.create { to = from, mtype = 'iq-result', id = id } )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    69
				local decoder = io.popen ( string.format ( "base64 -d -i >%q", receiving_files[sid].name ), "w" )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
				if not decoder then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
					main.print_info ( from, "Error opening decoder" )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    72
				else
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
					for i, v in ipairs ( receiving_files[sid] ) do
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    74
						decoder:write ( v )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    75
					end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    76
					decoder:close ()
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    77
				end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    78
			else
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    79
				receiving_files[sid] = nil -- invalidate session
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    80
				conn:send (
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    81
					lm.message.create { to = from, mtype = 'iq-error', id = id,
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    82
						error = { code = '409', type = 'cancel',
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    83
							conflict = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' }
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    84
						}
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    85
					} )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    86
			end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    87
		else
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    88
			return false
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    89
		end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    90
		return true
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    91
	end )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    92
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    93
-- You must specify a full jid with resource!
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    94
function send_file ( to, name )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    95
	local sid = gen_unique_sid ()
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    96
	local conn = lm.connection.bless ( main.connection () )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    97
	conn:send (
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    98
		lm.message.create { to = to, mtype = 'iq-set',
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    99
			open = { sid = sid, ['block-size'] = ibb_block_size, xmlns = 'http://jabber.org/protocol/ibb' }
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   100
		},
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   101
		function ( conn, message )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   102
			if message:child ( 'error' ) then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   103
				main.print_info ( to, "Stream request refused: " .. message:child( 'error' ):children():name () )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   104
			else
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   105
				main.print_info ( to, "Stream accepted, starting sequence" )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   106
				local buffer = ''
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   107
				main.bgread ( string.format ( 'base64 -w 0 %q', name ),
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   108
					function ( data )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   109
						if data then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   110
							buffer = buffer .. data
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   111
							return true
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   112
						else
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   113
							local seq = 0
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   114
							local msgbuf = buffer:sub ( 1, ibb_block_size )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   115
							buffer = buffer:sub ( ibb_block_size + 1 )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   116
							local function handler ( conn, message )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   117
								if message:child ( 'error' ) then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   118
									main.print_info ( to, "Stream error, transfer ceased at seq = " .. seq .. ": " .. message:child( 'error' ):children():name () )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   119
								else
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   120
									main.print_info ( to, " - acquired seq = " .. seq )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   121
									seq = seq + 1
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   122
									if buffer:len () == 0 then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   123
										conn:send (
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   124
											lm.message.create { to = to, mtype = 'iq-set',
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   125
												close = { sid = sid, xmlns = 'http://jabber.org/protocol/ibb' }
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   126
											},
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   127
											function ( conn, message )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   128
												if message:child ( 'error' ) then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   129
													main.print_info ( to, "Error at closing stream: " .. message:child( 'error' ):children():name () )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   130
												else
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   131
													main.print_info ( to, "File successfully transferred" )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   132
												end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   133
												return true
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   134
											end )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   135
									else
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   136
										local msgbuf = buffer:sub ( 1, ibb_block_size )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   137
										buffer = buffer:sub ( ibb_block_size )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   138
										conn:send (
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   139
											lm.message.create { to = to, mtype = 'iq-set',
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   140
												data = { sid = sid, xmlns = 'http://jabber.org/protocol/ibb', seq = seq,
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   141
													msgbuf
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   142
												}
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   143
											},
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   144
											handler )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   145
									end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   146
								end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   147
								return true
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   148
							end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   149
							conn:send (
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   150
								lm.message.create { to = to, mtype = 'iq-set',
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   151
									data = { sid = sid, xmlns = 'http://jabber.org/protocol/ibb', seq = seq,
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   152
										msgbuf
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   153
									}
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   154
								},
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   155
								handler )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   156
							return false
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   157
						end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   158
					end )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   159
			end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   160
			return true
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   161
		end )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   162
end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   163
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   164
main.add_command ( 'ibb',
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   165
	function ( args )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   166
		args = parse_args ( args )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   167
		if args[1] == 'send' then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   168
			local who
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   169
			if args.t then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   170
				who = args.t
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   171
				args.t = nil
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   172
			else
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   173
				who = full_current_jid ()
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   174
			end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   175
			args[1] = nil
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   176
			send_file ( who, rebuild_args_string ( args ) )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   177
		elseif args[1] == 'accept' then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   178
			local id = args[2]
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   179
			args[1] = nil
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   180
			args[2] = nil
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   181
			if receiving_files[id] then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   182
				receiving_files[id].accept ( rebuild_args_string ( args ) )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   183
			end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   184
		elseif args[1] == 'reject' then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   185
			local id = args[2]
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   186
			if receiving_files[id] then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   187
				receiving_files[id].reject ()
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   188
			end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   189
		elseif args[1] == 'del' then
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   190
			local id = args[2]
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   191
			receiving_files[id] = nil
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   192
		else
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   193
			print ( 'List of incoming streams:' )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   194
			for sid, data in pairs ( receiving_files ) do
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   195
				print ( sid .. ': ' .. ( data.name or '(not set)' ) .. ' [' .. data.status .. ']' )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   196
			end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   197
		end
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   198
	end )
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   199
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   200
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."
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   201
bca17e4a9851 Added sample configuration files
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   202
-- vim: se ts=4: --