use Test::Base;
use Test::TCP;
plan tests => 2;
use t::Client;
use Kamaitachi;
my $port = empty_port;
my $k = Kamaitachi->new( port => $port );
use constant {
CONNECT => 0,
HANDSHAKE => 1,
};
my $state = CONNECT;
# connect
create_client(
$port,
{
on_write_ready => sub {
my $socket = shift;
pass("connect success");
my $packet = $socket->{context}{client_token} = pack('C', 0) x 0x600;
$socket->watch_write(0);
$socket->write(
pack('C', 3) . pack('C', 0) x 0x600,
);
$state = HANDSHAKE;
},
on_read_ready => sub {
my $socket = shift;
my $bref = $socket->read( $k->buffer_size );
unless (defined $bref) {
$socket->close;
stop_loop;
return;
}
$socket->{context}{io}->push($$bref);
if ($state == CONNECT) {
fail("handshake ok");
stop_loop;
return;
}
if ($state == HANDSHAKE) {
if (not $socket->{context}{server_token}) {
$bref = $socket->{context}{io}->read(0x600 + 1) or return;
$socket->{context}{server_token} = substr $$bref, 1;
}
if ($socket->{context}{server_token}) {
$bref = $socket->{context}{io}->read(0x600) or return;
my $token = $$bref;
is($socket->{context}{client_token}, $token, 'handshake ok');
$socket->close;
stop_loop;
}
}
},
},
);
run_loop;