examples/lm/pubsub.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Sat, 30 Jul 2016 05:05:19 +0300
changeset 154 e63030a181f0
parent 68 742878c74b8e
permissions -rw-r--r--
Added tag v0.0.6 for changeset 8fba61f363a8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
-- PUBLISH-SUBSCRIBE (BEP-0060)
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
-- library
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
local iq     = require 'lm.iq'
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
local x_data = require 'lm.x_data'
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
--
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
local O = {
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
	handlers = { },
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
}
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
local F = { }
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
function F.handler ( xmlns, handler )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
	O.handlers[xmlns] = handler
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
function F.message_handler ( conn, mess )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
	local e = mess:child ( 'event' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
	if e and e:attribute ( 'xmlns' ) == 'http://jabber.org/protocol/pubsub#event' then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
		local is = e:child ( 'items' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
		if is then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
			local from = mess:attribute ( 'from' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
			local node = is:attribute ( 'node' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
			local item = is:child ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
			while item do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
				local id = item:attribute ( 'id' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
				local n  = item:child ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
				while n do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
					local xmlns = n:attribute ( 'xmlns' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
					if O.handlers[xmlns] then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
						O.handlers[xmlns] ( from, node, n, id )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
					end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
					n = n:next ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
				end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
				item = item:next ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
			return true
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
		end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
	end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
	return false
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
-- SUBSCRIBER USE CASES
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
function F.subscribe ( conn, to, node, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
	local jid = conn:jid():gsub ( '/.*', '' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
	iq.send ( conn, to, 'set',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
		{
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
			pubsub = { xmlns = 'http://jabber.org/protocol/pubsub',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
				subscribe = { node = node, jid = jid },
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
			},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
		},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
		function ( mess )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
			local s = mess:path ( 'pubsub', 'subscription' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
			if s then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
				success ( s:attribute ( 'subid' ) )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
			else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
				success ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
		end,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
		fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    67
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    68
function F.unsubscribe ( conn, to, node, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    69
	local jid = conn:jid():gsub ( '/.*', '' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
	iq.send ( conn, to, 'set',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
		{
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    72
			pubsub = { xmlns = 'http://jabber.org/protocol/pubsub',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
				unsubscribe = { node = node, jid = jid },
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    74
			},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    75
		}, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    76
end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    77
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    78
-- I found no servers with subscription options support thus it is not implemented.
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    79
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    80
-- untested :(
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    81
function F.retrieve ( conn, to, node, success, fail, max, ids )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    82
	local items = { node = node, max_items = max }
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    83
	if ids then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    84
		items.item = { }
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    85
		for k, id in pairs ( ids ) do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    86
			table.insert ( items.item, { id = id } )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    87
		end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    88
	end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    89
	iq.send ( conn, to, 'get',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    90
		{
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    91
			pubsub = { xmlns = 'http://jabber.org/protocol/pubsub',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    92
				items = items,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    93
			},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    94
		},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    95
		function ( mess )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    96
			local items = mess:path ( 'pubsub', 'items' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    97
			if items then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    98
				local from = mess:attribute ( 'from' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    99
				local node = items:attribute ( 'node' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   100
				local item = items:child ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   101
				while item do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   102
					success ( from, node, item ) -- XXX use registered xmlns handlers for that?
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   103
					item = item:next ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   104
				end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   105
			else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   106
				-- XXX
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   107
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   108
		end, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   109
end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   110
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   111
-- OWNER USE CASES
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   112
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   113
-- node may be nil
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   114
function F.create_node ( conn, to, node, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   115
	iq.send ( conn, to, 'set',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   116
		{
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   117
			pubsub = { xmlns = 'http://jabber.org/protocol/pubsub',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   118
				create = { node = node },
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   119
			},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   120
		},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   121
		function ( mess )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   122
			if node then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   123
				success ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   124
			else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   125
				local create = mess:path ( 'pubsub', 'create' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   126
				if create then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   127
					success ( create:attribute ( 'node' ) )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   128
				else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   129
					success ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   130
				end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   131
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   132
		end, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   133
end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   134
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   135
function F.delete_node ( conn, to, node, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   136
	iq.send ( conn, to, 'set',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   137
		{
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   138
			pubsub = { xmlns = 'http://jabber.org/protocol/pubsub#owner',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   139
				delete = { node = node },
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   140
			},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   141
		}, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   142
end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   143
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   144
function F.purge_node ( conn, to, node, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   145
	iq.send ( conn, to, 'set',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   146
		{
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   147
			pubsub = { xmlns = 'http://jabber.org/protocol/pubsub#owner',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   148
				purge = { node = node },
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   149
			},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   150
		}, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   151
end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   152
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   153
function F.configure_node ( conn, to, node, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   154
	iq.send ( conn, to, 'get',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   155
		{
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   156
			pubsub = { xmlns = 'http://jabber.org/protocol/pubsub#owner',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   157
				configure = { node = node },
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   158
			},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   159
		},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   160
		function ( mess )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   161
			local x = mess:path ( 'pubsub', 'configure', 'x' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   162
			if x then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   163
				success ( x_data.parse ( x ),
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   164
					function ( form, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   165
						iq.send ( conn, to, 'set',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   166
							{
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   167
								pubsub = { xmlns = 'http://jabber.org/protocol/pubsub#owner',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   168
									configure = form:format ( { node = node }, 'submit' ),
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   169
								},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   170
							}, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   171
					end,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   172
					function ( form, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   173
						iq.send ( conn, to, 'set',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   174
							{
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   175
								pubsub = { xmlns = 'http://jabber.org/protocol/pubsub#owner',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   176
									configure = form:format ( { node = node }, 'cancel' ),
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   177
								},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   178
							}, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   179
					end )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   180
			else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   181
				fail ( mess:xml () ) -- XXX
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   182
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   183
		end, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   184
end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   185
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   186
function F.list_subscriptions ( conn, to, node, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   187
	iq.send ( conn, to, 'get',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   188
		{
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   189
			pubsub = { xmlns = 'http://jabber.org/protocol/pubsub#owner',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   190
				subscriptions = { node = node },
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   191
			},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   192
		},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   193
		function ( mess )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   194
			local s = mess:path ( 'pubsub', 'subscriptions' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   195
			if s then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   196
				local sub = s:child ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   197
				local ret = { }
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   198
				while sub do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   199
					table.insert ( ret, { jid = sub:attribute ( 'jid' ), subscription = sub:attribute ( 'subscription' ), subid = sub:attribute ( 'subid' ) } )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   200
					sub = sub:next ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   201
				end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   202
				success ( ret )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   203
			else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   204
				fail ( mess:xml () ) -- XXX
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   205
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   206
		end, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   207
end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   208
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   209
function F.modify_subscription ( conn, to, node, jid, state, success, fail, id )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   210
	iq.send ( conn, to, 'set',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   211
		{
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   212
			pubsub = { xmlns = 'http://jabber.org/protocol/pubsub#owner',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   213
				subscriptions = { node = node,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   214
					subscription = { jid = jid, subscription = state, id = id },
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   215
				},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   216
			},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   217
		}, success, fail )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   218
end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   219
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   220
return F
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   221
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   222
-- vim: se ts=4: --