examples/ibb.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Sat, 28 Mar 2009 19:43:12 +0200
changeset 67 d33ca5572e91
parent 66 542f61e113cb
child 68 742878c74b8e
permissions -rw-r--r--
Fully object forms interface (untested)
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
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
     4
-- TODO bidirectionality
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
     5
--        thus, on stream accept we can add our sid to incoming files structure,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
     6
--        as if we received and accepted incoming request.
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
     7
--      message stanzas
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
     9
-- library
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    10
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    11
local lm     = require 'lm'
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    12
local iq     = require 'iq'
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    13
local base64 = require 'base64'
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    15
--
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    16
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    17
local F = { }
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    18
local M = { }
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    19
M.__index = M
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    20
local O = {
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    21
	handler =
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
		function ( accept, reject )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
			reject ()
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
}
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    27
function F.new ( conn, to, bs, sid )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    28
	local obj = {
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    29
		conn = conn,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    30
		to   = to,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    31
		sbs  = bs,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    32
		bs   = math.floor ( bs * 3 / 4 ),
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    33
		sid  = sid,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    34
		seq  = 0,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    35
	}
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    36
	setmetatable ( obj, M )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    37
	return obj
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    38
end
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    40
function M.open ( obj, success, fail )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    41
	iq.send ( obj.conn, obj.to, 'set',
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
		{
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    43
			open = { sid = obj.sid, ['block-size'] = obj.sbs, xmlns = 'http://jabber.org/protocol/ibb' }
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    44
		}, success, fail )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    45
end
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    46
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    47
function M.send ( obj, data, success, fail )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    48
	if data and data ~= '' then
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    49
		local start = 0
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    50
		while start < data:len () do
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    51
			local chunk = base64.encode ( data:sub ( start, obj.bs ) )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    52
			local cseq  = obj.seq -- local instance
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    53
			iq.send ( obj.conn, obj.to, 'set',
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    54
				{
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    55
					data = { sid = obj.sid, xmlns = 'http://jabber.org/protocol/ibb', seq = cseq,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    56
						chunk,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    57
					},
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    58
				},
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    59
				function ()
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    60
					success ( cseq )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    61
				end,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    62
				function ( mesg )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    63
					noerr = false
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    64
					fail ( mesg )
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
				end )
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    66
			start   = start + obj.bs
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    67
			obj.seq = obj.seq + 1
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    68
		end
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    69
	end
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    70
end
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    71
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    72
function M.close ( obj, success, fail )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    73
	iq.send ( obj.conn, obj.to, 'set',
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    74
		{
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    75
			close = { sid = obj.sid, xmlns = 'http://jabber.org/protocol/ibb' },
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    76
		}, success, fail )
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    77
end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    78
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    79
function F.handler ( handler )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    80
	O.handler = handler
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    81
end
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    82
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    83
local ibb_files = {}
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    84
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    85
function F.iq_handler ( conn, mess )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    86
	local mtype, smtype = mess:type ()
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    87
	if smtype ~= 'set' then
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    88
		return false
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    89
	end
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    90
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    91
	local child = mess:child ()
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    92
	if not child or child:attribute ( 'xmlns' ) ~= 'http://jabber.org/protocol/ibb' then
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    93
		return false
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    94
	end
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    95
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    96
	local id     = mess:attribute ( 'id' )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    97
	local from   = mess:attribute ( 'from' )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    98
	local action = child:name ()
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
    99
	local sid    = child:attribute ( 'sid' )
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   100
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   101
	if action == 'open' then
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   102
		if not ibb_files[sid] then
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   103
			O.handler ( from,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   104
				function ( success, fail )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   105
					ibb_files[sid] = { from = from, success = success, fail = fail }
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   106
					conn:send ( lm.message.create { to = from, mtype = 'iq-result', id = id } )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   107
				end,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   108
				function ()
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   109
					conn:send (
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   110
						lm.message.create { to = from, mtype = 'iq-error', id = id,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   111
							error = { code = '405', type = 'cancel',
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   112
								['not-allowed'] = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' },
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   113
							},
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   114
						} )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   115
				end )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   116
		else
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   117
			conn:send (
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   118
				lm.message.create { to = from, mtype = 'iq-error', id = id,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   119
					error = { code = '409', type = 'cancel',
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   120
						conflict = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' },
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   121
					},
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   122
				} )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   123
		end
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   124
	elseif action == 'data' then
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   125
		local seq = child:attribute ( 'seq' )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   126
		if ibb_files[sid] and from == ibb_files[sid].from and not ibb_files[sid][tonumber(seq)+1] then
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   127
			local data = child:value ()
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   128
			conn:send ( lm.message.create { to = from, mtype = 'iq-result', id = id } )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   129
			ibb_files[sid][tonumber(seq)+1] = data
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   130
-- XXX		ibb_files[sid].success ( seq )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   131
		else
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   132
			if ibb_files[sid] then
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   133
				ibb_files[sid].fail ( 'conflict' )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   134
				ibb_files[sid] = nil -- invalidate session
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   135
				conn:send (
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   136
					lm.message.create { to = from, mtype = 'iq-error', id = id,
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   137
						error = { code = '409', type = 'cancel',
51
a95a3a73482c Pubsub uses new forms
Myhailo Danylenko <isbear@ukrpost.net>
parents: 43
diff changeset
   138
							conflict = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' },
a95a3a73482c Pubsub uses new forms
Myhailo Danylenko <isbear@ukrpost.net>
parents: 43
diff changeset
   139
						},
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   140
					} )
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   141
			else
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   142
				conn:send (
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   143
					lm.message.create { to = from, mtype = 'iq-error', id = id,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   144
						error = { code = '404', type = 'cancel', -- XXX: check
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   145
							['item-not-found'] = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' },
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   146
						},
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   147
					} )
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   148
			end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   149
		end
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   150
	elseif action == 'close' then
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   151
		if ibb_files[sid] and from == ibb_files[sid].from then
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   152
			local data = ''
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   153
			for seq, chunk in ipairs ( ibb_files[sid] ) do
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   154
				data = data .. chunk
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   155
			end
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   156
			local decoded = base64.decode ( data )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   157
			ibb_files[sid].success ( decoded )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   158
			conn:send ( lm.message.create { to = from, mtype = 'iq-result', id = id } )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   159
			ibb_files[sid] = nil
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   160
		else
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   161
			if ibb_files[sid] then
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   162
				ibb_files[sid].fail ( 'conflict' )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   163
				ibb_files[sid] = nil -- invalidate session
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   164
				conn:send (
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   165
					lm.message.create { to = from, mtype = 'iq-error', id = id,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   166
						error = { code = '409', type = 'cancel',
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   167
							conflict = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' },
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   168
						},
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   169
					} )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   170
			else
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   171
				conn:send (
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   172
					lm.message.create { to = from, mtype = 'iq-error', id = id,
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   173
						error = { code = '404', type = 'cancel', -- XXX: check
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   174
							['item-not-found'] = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' },
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   175
						},
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   176
					} )
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   177
			end
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   178
		end
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   179
	else
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   180
		return false
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   181
	end
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   182
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   183
	return true
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   184
end
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   185
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 51
diff changeset
   186
return F
41
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   187
9e39fd8a20df Updated to library module ibb
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   188
-- vim: se ts=4: --