examples/ping.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Mon, 23 Mar 2009 04:17:02 +0200
changeset 60 b9fd051c0d7c
parent 55 9e32b6288c86
child 64 bf7521ed96eb
permissions -rw-r--r--
Ping fixes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
55
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
-- XMPP PING (XEP-0199)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
-- library
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
require 'lm'
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
require 'iq'
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
-- public
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
ping = { }
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
function ping.send ( conn, to, success, fail )
60
b9fd051c0d7c Ping fixes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    14
	iq.send ( conn, to, 'get',
b9fd051c0d7c Ping fixes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    15
		{
b9fd051c0d7c Ping fixes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    16
			ping = { xmlns = 'urn:xmpp:ping' },
b9fd051c0d7c Ping fixes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    17
		}, success, fail )
55
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
end
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
-- private
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
local ping_incoming_iq_handler = lm.message_handler.new (
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
	function ( conn, mess )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
		local mtype, smtype = mess:type ()
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
		if smtype == 'get' then
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
			local p = mess:child ( 'ping' )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
			if p and p:attribute ( 'xmlns' ) == 'urn:xmpp:ping' then
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
				conn:send ( lm.message.create { mtype = 'iq-result', to = mess:attribute ( 'from' ), id = mess:attribute ( 'id' ) } )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
				return true
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
			end
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
		end
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
		return false
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
	end )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
-- mcabber
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
main.command ( 'ping',
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
	function ( args )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
		local who
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
		if args[1] then
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
			who = args[1]
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
		else
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
			who = main.full_jid ()
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
		end
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
		local time = os.time ()
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
		ping.send ( lm.connection.bless ( main.connection () ), who,
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
			function ()
60
b9fd051c0d7c Ping fixes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    48
				main.print_info ( who, ('Pong: %d seconds'):format ( os.time () - time ) )
55
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
			end,
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
			function ( mesg )
60
b9fd051c0d7c Ping fixes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    51
				main.print_info ( who, 'Ping failed: ' .. mesg )
55
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
			end )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
	end, true, 'jid' )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
60
b9fd051c0d7c Ping fixes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    55
--[[
55
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
local ping_handler_registered = false
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
hooks_d['hook-post-connect'].ping =
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
	function ( args )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
		lm.connection.bless( main.connection () ):handler ( ping_incoming_iq_handler, 'iq', 'normal' )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
		ping_handler_registered = true
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
		hooks_d['hook-post-connect'].ping = nil
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
		hooks_d['hook-quit'].ping =
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
			function ( args )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
				if ping_handler_registered then
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
					lm.connection.bless( main.connection () ):handler ( ping_incoming_iq_handler, 'iq' )
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    67
				end
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    68
			end
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    69
	end
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
main.add_feature ( 'urn:xmpp:ping' )
60
b9fd051c0d7c Ping fixes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 55
diff changeset
    72
--]]
55
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    74
-- vim: se ts=4: --