1use strict;
2use warnings;
3do './testlib.pl' || do './t/testlib.pl' || die "no testlib";
4
5$|=1;
6print "1..16\n";
7
8
9{
10	# first use SSL client
11	my ($server,$saddr) = create_listen_socket();
12	ok( 1, "listening \@$saddr" );
13	my $srv = fork_sub( 'server','ssl',$server );
14	close($server);
15	fd_grep_ok( 'Waiting', $srv );
16	my $cl = fork_sub( 'client',$saddr );
17	fd_grep_ok( 'Connect from',$srv );
18	fd_grep_ok( 'Connected', $cl );
19	fd_grep_ok( 'SSL Handshake OK', $srv );
20	fd_grep_ok( 'SSL Handshake OK', $cl );
21	fd_grep_ok( 'Hi!', $cl );
22}
23
24if ( $^O =~m{mswin32}i ) {
25	# skip
26	ok( 1, "skip - TODO on win32" ) for(1..7);
27} else {
28	# then try bad non-SSL client
29	my ($server,$saddr) = create_listen_socket();
30	ok( 1, "listening \@$saddr" );
31	my $srv = fork_sub( 'server','nossl',$server );
32	close($server);
33	fd_grep_ok( 'Waiting', $srv );
34	my $cl = fork_sub( 'client',$saddr );
35	fd_grep_ok( 'Connect from',$srv );
36	fd_grep_ok( 'Connected', $cl );
37	fd_grep_ok( 'SSL Handshake FAILED', $cl );
38}
39
40
41sub server {
42	my ($behavior,$server) = @_;
43	print "Waiting\n";
44	my $client = $server->accept || die "accept failed: $!";
45	print "Connect from ".$client->peerhost.':'.$client->peerport."\n";
46	if ( $behavior eq 'ssl' ) {
47		if ( IO::Socket::SSL->start_SSL( $client, SSL_server => 1, Timeout => 30 )) {
48			print "SSL Handshake OK\n";
49			print $client "Hi!\n";
50		}
51	} else {
52		while ( sysread( $client, my $buf,8000 )) {}
53	}
54}
55
56sub client {
57	my $saddr = shift;
58	my $c = IO::Socket::INET->new( $saddr ) || die "connect failed: $!";
59	print "Connected\n";
60	if ( IO::Socket::SSL->start_SSL( $c, Timeout => 5 )) {
61		 print "SSL Handshake OK\n";
62		 print <$c>
63	} else {
64		print "SSL Handshake FAILED - $!\n";
65	}
66}
67
68
69