NAME
Protocol::TLS::Client - pure Perl TLS Client
SYNOPSIS
# Create client object
my
$client
= Protocol::TLS::Client->new();
# You must create tcp connection yourself
my
$cv
= AE::cv;
tcp_connect
'example.com'
, 443,
sub
{
my
$fh
=
shift
or
do
{
warn
"error: $!\n"
;
$cv
->
send
;
return
;
};
# socket handling
my
$h
;
$h
= AnyEvent::Handle->new(
fh
=>
$fh
,
on_error
=>
sub
{
$_
[0]->destroy;
"connection error\n"
;
$cv
->
send
;
},
on_eof
=>
sub
{
$h
->destroy;
"that's all folks\n"
;
$cv
->
send
;
},
);
# Create new TLS-connection object
my
$con
=
$client
->new_connection(
# SERVER NAME (FQDN)
'example.com'
,
# Callback executed when TLS-handshake finished
on_handshake_finish
=>
sub
{
my
(
$tls
) =
@_
;
# Send some application data
$tls
->
send
(
"hi there\n"
);
},
# Callback executed when application data received
on_data
=>
sub
{
my
(
$tls
,
$data
) =
@_
;
$data
;
# send close notify and close application level connection
$tls
->
close
;
}
);
# Handshake start
# Send TLS records to socket
while
(
my
$record
=
$con
->next_record ) {
$h
->push_write(
$record
);
}
# low level socket operations (read/write)
$h
->on_read(
sub
{
my
$handle
=
shift
;
# read TLS records from socket and put them to $con object
$con
->feed(
$handle
->{rbuf} );
$handle
->{rbuf} =
''
;
# write TLS records to socket
while
(
my
$record
=
$con
->next_record ) {
$handle
->push_write(
$record
);
}
# Terminate connection if all done
$handle
->push_shutdown
if
$con
->
shutdown
;
();
}
);
();
};
# finish
$cv
->
recv
;
DESCRIPTION
Protocol::TLS::Client is TLS client library. It's intended to make TLS-client implementations on top of your favorite event loop.
METHODS
new
Initialize new client object
my
$client
= Procotol::TLS::Client->new(
%options
);
Availiable options:
- cert_file => /path/to/cert.crt
-
Path to client certificate to perform client to server authentication
- key_file => /path/to/cert.key
-
Path to private key for client certificate
new_connection
Create new TLS-connection object
my
$con
=
$client
->new_connection(
'F.Q.D.N'
,
%options
);
'F.Q.D.N' - fully qualified domain name
%options - options hash
Availiable options:
- on_handshake_finish => sub { ... }
-
Callback invoked when TLS handshake completed
on_handshake_finish
=>
sub
{
my
(
$tls
) =
@_
;
# Send some application data
$tls
->
send
(
"hi there\n"
);
},
- on_data => sub { ... }
-
Callback executed when application data received
on_data
=>
sub
{
my
(
$tls
,
$data
) =
@_
;
print
$data
;
# send close notify and close application level connection
$tls
->
close
;
}
LICENSE
Copyright (C) Vladimir Lettiev.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
Vladimir Lettiev <thecrux@gmail.com>