Name
SPVM::Net::SSLeay - SPVM bindings for OpenSSL
Description
The Net::SSLeay class of SPVM has methods to call OpenSSL functions.
Usage
use Net::SSLeay;
Fields
operation_error
has operation_error : ro int;
error
has error : ro long;
Class Methods
new
static method new : Net::SSLeay ($ssl_ctx : Net::SSLeay::SSL_CTX);
Instance Methods
DESTROY
method DESTROY : void ();
set_fd
method set_fd : int ($fd : int);
connect
method connect : int ();
accept
method accept : int ();
shutdown
method shutdown : int ();
set_tlsext_host_name
method set_tlsext_host_name : int ($name : string);
read
method read : int ($buf : mutable string, $num : int = -1, $offset : int = 0);
peek
method peek : int ($buf : mutable string, $num : int = -1, $offset : int = 0);
write
method write : int ($buf : string, $num : int = -1, $offset : int = 0);
Examples
HTTPS Client:
# Socket
my $host = "www.google.com";
my $port = 443;
my $socket = IO::Socket::INET->new({PeerAddr => $host, PeerPort => $port});
my $ssl_method = Net::SSLeay::SSL_METHOD->SSLv23_client_method;
my $ssl_ctx = Net::SSLeay::SSL_CTX->new($ssl_method);
$ssl_ctx->set_verify(SSL->SSL_VERIFY_PEER);
$ssl_ctx->set_default_verify_paths;
my $verify_param = $ssl_ctx->get0_param;
$verify_param->set_hostflags(SSL->X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
$verify_param->set1_host($host);
my $ssl = Net::SSLeay->new($ssl_ctx);
my $socket_fileno = $socket->fileno;
$ssl->set_fd($socket_fileno);
$ssl->set_tlsext_host_name($host);
$ssl->connect;
my $send_buffer = "GET / HTTP/1.0\r\n\r\n";
$ssl->write($send_buffer);
my $buffer = StringBuffer->new;
my $recv_buffer = (mutable string)new_string_len 100;
while (1) {
my $recv_length = $ssl->read($recv_buffer);
if ($recv_length > 0) {
$buffer->push($recv_buffer, 0, $recv_length);
# print $recv_buffer;
}
if ($recv_length < 0) {
die "Read error";
}
if ($recv_length < length $recv_buffer) {
last;
}
}
my $shutdown_ret = $ssl->shutdown;
if ($shutdown_ret == 0) {
while (1) {
my $recv_buffer = (mutable string)new_string_len 100;
my $read_length = $ssl->read($recv_buffer);
if ($read_length <= 0) {
last;
}
}
}
$socket->close;
Modules
Repository
Author
Yuki Kimoto<kimoto.yuki@gmail.com>
Copyright & License
Copyright (c) 2023 Yuki Kimoto
MIT License