examples/pep.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Mon, 23 Mar 2009 04:16:22 +0200
changeset 59 4660c4f10ef1
parent 56 8561e55e0662
child 64 bf7521ed96eb
permissions -rw-r--r--
Pep splitting
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
-- PERSONAL EVENTING PROTOCOL (XEP-0163)
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
-- library
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
require 'lm'
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
require 'iq'
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
-- public
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
pep = {
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
	handlers = {},
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
}
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
56
8561e55e0662 Pep updates for avatar
Myhailo Danylenko <isbear@ukrpost.net>
parents: 46
diff changeset
    15
function pep.publish ( conn, node, item, success, fail )
46
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
--	local bjid = conn:jid():gsub ( '/.*', '' )
56
8561e55e0662 Pep updates for avatar
Myhailo Danylenko <isbear@ukrpost.net>
parents: 46
diff changeset
    17
--	item.id = 'current'
46
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
	iq.send ( conn, nil, 'set',
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
		{
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
			pubsub = { xmlns = 'http://jabber.org/protocol/pubsub',
56
8561e55e0662 Pep updates for avatar
Myhailo Danylenko <isbear@ukrpost.net>
parents: 46
diff changeset
    21
				publish = { node = node,
8561e55e0662 Pep updates for avatar
Myhailo Danylenko <isbear@ukrpost.net>
parents: 46
diff changeset
    22
					item = item,
46
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
				},
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
			},
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
--[[
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
			configure = {
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
				x = {
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
					field = {{ type = "hidden", var = 'FORM_TYPE',
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
						value = { 'http://jabber.org/protocol/pubsub#node_config' },
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
					},{ var = "pubsub#access_model",
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
						value = { 'presence' },
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
					}},
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
				},
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
			},
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
--]]
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
		}, success, fail )
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
end
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
-- private
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
-- XXX in fact, it is not a pep handler, it is pubsub handler.
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
--     should it go there?
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
local pep_incoming_message_handler = lm.message_handler.new (
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
	function ( conn, mess )
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
		local e = mess:child ( 'event' )
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
		if e and e:attribute ( 'xmlns' ) == 'http://jabber.org/protocol/pubsub#event' then
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
			local is = e:child ( 'items' )
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
			if is then
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
				local from = mess:attribute ( 'from' )
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
				local node = is:attribute ( 'node' )
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
				local item = is:child ( 'item' )
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
				if item then
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
					local handled = true -- XXX should we do this? well, if it becomes general pubsub handler - then no.
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
					local n       = item:children ()
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
					while n do
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
						local xmlns = n:attribute ( 'xmlns' )
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
						if pep.handlers[xmlns] then
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
							if not pep.handlers[xmlns] ( from, node, n ) then
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
								handled = false
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
							end
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
						else
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
							handled = false
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
						end
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
						n = n:next ()
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
					end
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
					return handled
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    67
				end
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    68
			end
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    69
		end
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
		return false
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
	end )
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    72
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
-- mcabber
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    74
59
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents: 56
diff changeset
    75
local pep_handler_registered = false
46
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    76
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    77
hooks_d['hook-post-connect'].pep =
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    78
	function ( args )
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    79
		lm.connection.bless( main.connection () ):handler ( pep_incoming_message_handler, 'message', 'normal' )
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    80
		pep_handler_registered = true
59
4660c4f10ef1 Pep splitting
Myhailo Danylenko <isbear@ukrpost.net>
parents: 56
diff changeset
    81
		hooks_d['hook-post-connect'].pep = nil
46
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    82
		hooks_d['hook-quit'].pep =
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    83
			function ( args )
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    84
				if pep_handler_registered then
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    85
					lm.connection.bless( main.connection () ):handler ( pep_incoming_message_handler, 'message' )
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    86
					pep_handler_registered = false
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    87
				end
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    88
			end
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    89
	end
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    90
c2210e9b3e34 Pep in library style
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    91
-- vim: se ts=4: --