examples/oob.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Fri, 27 Mar 2009 12:06:19 +0200
changeset 66 542f61e113cb
parent 64 bf7521ed96eb
child 68 742878c74b8e
permissions -rw-r--r--
Modularization, I * activity * attention * avatar * disco * evil * geoloc * ibb * iq * mood * oob * ping * pubsub * tune * mpd * pep
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
-- OUT OF BAND DATA (XEP-0066)
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
-- library
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
     6
local lm = require 'lm'
64
bf7521ed96eb Rewrite of ibb in object style
Myhailo Danylenko <isbear@ukrpost.net>
parents: 48
diff changeset
     7
local iq = require 'iq'
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
     9
--
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    11
local O = {
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
	handler =
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
		function ( from, url, desc, success, fail )
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
			fail ()
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
		end,
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
}
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    18
local F = { }
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    19
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    20
function F.send ( conn, to, url, success, fail, desc )
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
	if desc then
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
		desc = { desc }
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
	end
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
	iq.send ( conn, to, 'set',
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
		{
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
			query = { xmlns = 'jabber:iq:oob',
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
				url  = { url },
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
				desc = desc,
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
			},
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
		}, success, fail )
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
end
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    33
function F.handler ( handler )
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    34
	O.handler = handler
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    35
end
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    37
function F.iq_handler ( conn, mess )
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    38
	local mtype, smtype = mess:type ()
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    39
	if smtype == 'set' then
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    40
		local query = mess:child ( 'query' )
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    41
		if query and query:attribute ( 'xmlns' ) == 'jabber:iq:oob' then
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
			local from = mess:attribute ( 'from' )
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    43
			local url  = query:child( 'url' ):value ()
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    44
			local desc = query:child( 'desc' )
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
			if desc then
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
				desc = desc:value ()
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
			end
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    48
			O.handler ( from, url, desc,
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
				function ()
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    50
					conn:send ( lm.message.create { mtype = 'iq-result', to = from, id = mess:attribute ( 'id' ) } )
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
				end,
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    52
				function () -- XXX distinguish download error and reject
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    53
					conn:send (
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    54
						lm.message.create { mype = 'iq-error', to = from, id = mess:attribute ( 'id' ),
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    55
							-- XXX must we include query here?
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    56
							error = { code = '406', type = 'modify',
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    57
								['not-acceptable'] = { xmlns = 'urn:ietf:params:xml:ns:xmpp-stanzas' },
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    58
							},
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    59
						} )
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
				end )
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    61
			return true
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
		end
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    63
	end
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    64
	return false
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    65
end
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    67
function F.message_handler ( conn, mess )
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    68
	local x = mess:child ( 'x' )
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    69
	if x and x:attribute ( 'xmlns' ) == 'jabber:x:oob' then
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    70
		local from = mess:attribute ( 'from' )
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    71
		local url  = x:child( 'url' ):value ()
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    72
		local desc = x:child( 'desc' )
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    73
		if desc then
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    74
			desc = desc:value ()
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    75
		end
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    76
		O.handler ( from, url, desc,
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    77
			function ()
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    78
			end,
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    79
			function ()
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    80
			end )
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    81
	end
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    82
	return false
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    83
end
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    84
66
542f61e113cb Modularization, I
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
    85
return F
48
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    86
d31ae73038f7 OOB uses module interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    87
-- vim: se ts=4: --