test.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Tue, 19 May 2009 02:12:02 +0300
changeset 23 13f03e604c8a
parent 22 1a1bc121fe90
child 29 e86ee1f4227d
permissions -rw-r--r--
License notes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
     1
--[[ Copyright 2009 Myhailo Danylenko
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
     2
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
     3
This program is free software: you can redistribute it and/or modify
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
     4
it under the terms of the GNU General Public License as published by
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
     5
the Free Software Foundation, either version 2 of the License, or
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
     6
(at your option) any later version.
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
     7
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
     8
This program is distributed in the hope that it will be useful,
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
     9
but WITHOUT ANY WARRANTY; without even the implied warranty of
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
    10
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
    11
GNU General Public License for more details.
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
    12
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
    13
You should have received a copy of the GNU General Public License
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
    14
along with this program.  If not, see <http://www.gnu.org/licenses/>. ]]
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
    15
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
    16
-- Note, this requires glib module, that is not released yet
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
    17
-- (and, probably, will not be released ever), thus, this
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 22
diff changeset
    18
-- code is provided only as example.
21
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
require 'glib'
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
local lm = require 'lm'
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
g.log.handler (
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
	function ( domain, lvl, mesg )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
		print ( mesg )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
	end )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
sent = false
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
22
1a1bc121fe90 Test gets parameters from build system
Myhailo Danylenko <isbear@ukrpost.net>
parents: 21
diff changeset
    30
server, username = arg[1]:match ( '(.+)@(.-)' )
1a1bc121fe90 Test gets parameters from build system
Myhailo Danylenko <isbear@ukrpost.net>
parents: 21
diff changeset
    31
password         = arg[2]
1a1bc121fe90 Test gets parameters from build system
Myhailo Danylenko <isbear@ukrpost.net>
parents: 21
diff changeset
    32
recipient        = arg[3] or arg[1]
1a1bc121fe90 Test gets parameters from build system
Myhailo Danylenko <isbear@ukrpost.net>
parents: 21
diff changeset
    33
fingerprint      = arg[4] or '01:23:45:67:89:ab:cd:ef:fe:dc:ba:98:76:54:32:10'
21
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
--[[
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
-- What's goes on, pretty close to C api,
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
-- but already some luxury...
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
you_need_your_own_context = true
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
if you_need_your_own_context then
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
	cont = g.main_context.new ()
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
	conn = lm.connection.new ( server, cont:pointer () )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
else
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
	cont = g.main_context.default ()
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
	conn = lm.connection.new ( server )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
end
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
if lm.ssl.supported () then
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
	conn:port ( 5223 )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
	conn:ssl ( lm.ssl.new ( fingerprint,
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
		function (ssl, err)
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
			print ( 'SSL error occured: ' .. err )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
			print ( 'Fingerprint: ' .. ssl:fingerprint () )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
			return true
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
		end ) )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
end
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
print ( 'Opening connection... ' )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
res = conn:open (
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
	function ( connection, success )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
		if success then
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
			print ( "Authenticating..." )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
			res = connection:authenticate ( username, password, 'llm-test',
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
				function ( connection, success )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
					if success then
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
						print ( "Sending..." )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    67
						
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    68
						connection:send (
22
1a1bc121fe90 Test gets parameters from build system
Myhailo Danylenko <isbear@ukrpost.net>
parents: 21
diff changeset
    69
							lm.message.new( recipient, 'message' )
21
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
								:child ( 'body', 'Hello, this is just a test' ) )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    72
						connection:send (
22
1a1bc121fe90 Test gets parameters from build system
Myhailo Danylenko <isbear@ukrpost.net>
parents: 21
diff changeset
    73
							lm.message.new( recipient, 'iq', 'get' )
21
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    74
								:child( 'query', '' ):attribute ( 'xmlns', 'jabber:iq:version' ),
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    75
							function ( connection, message )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    76
								node = message:child ( 'query' )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    77
								print ( 'Got response:' )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    78
								print ( '  name:     ', node:child( 'name' ):value () )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    79
								print ( '  version:  ', node:child( 'version' ):value () )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    80
								print ( '  os:       ', node:child( 'os' ):value () )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    81
								sent = true
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    82
							end )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    83
					else
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    84
						print ( "Authenticate failure" )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    85
						sent = true
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    86
					end
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    87
				end )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    88
			print ( 'Authenticate returns ', res )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    89
		else
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    90
			print ( "Open failure" )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    91
			sent = true
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    92
		end
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    93
	end )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    94
print ( 'Open returns ', res )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    95
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    96
--]]
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    97
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    98
-- Shortened version with convenience lua functions:
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    99
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   100
conn = lm.connect {
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   101
	server = server,
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   102
	port   = 5223,
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   103
	ssl    = {
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   104
		fingerprint = fingerprint,
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   105
		validate    = false,
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   106
	},
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   107
	username = username,
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   108
	password = password,
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   109
	resource = 'llm-test',
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   110
	onconnect =
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   111
		function ( connection )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   112
			print ( 'connected' )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   113
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   114
			connection:send (
22
1a1bc121fe90 Test gets parameters from build system
Myhailo Danylenko <isbear@ukrpost.net>
parents: 21
diff changeset
   115
				lm.message.create { mtype = "message", to = recipient,
21
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   116
					body = { 'Hello, this is just a test' },
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   117
				} )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   118
			print ( 'sent' )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   119
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   120
			connection:send (
22
1a1bc121fe90 Test gets parameters from build system
Myhailo Danylenko <isbear@ukrpost.net>
parents: 21
diff changeset
   121
				lm.message.create { mtype = "iq-get", to = recipient,
21
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   122
					query = { xmlns = "jabber:iq:version" }
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   123
				},
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   124
				function ( connection, message )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   125
					print ( 'received' )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   126
					print ( 'Got response:' )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   127
					print ( '   name:     ', message:path( 'query', 'name' ):value () )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   128
					print ( '   version:  ', message:path( 'query', 'version' ):value () )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   129
					print ( '   os:       ', message:path( 'query', 'os' ):value () )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   130
					sent = true
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   131
				end )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   132
			print ( 'sent' )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   133
		end,
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   134
}
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   135
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   136
cont = g.main_context.default ()
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   137
print ( 'Entering main loop...' )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   138
while not sent do
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   139
	cont:iteration ( true )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   140
end
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   141
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   142
print ( 'Closing connection... ' )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   143
conn:close ()
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   144
print ( "Bye" )
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   145
a9b92b65961e Test file :P
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   146
-- vim: se ts=4: --