Database-Async-Engine-PostgreSQL
view release on metacpan or search on metacpan
lib/Database/Async/Engine/PostgreSQL.pm view on Meta::CPAN
async sub negotiate_ssl {
my ($self, %args) = @_;
my $stream = delete $args{stream};
# If SSL is disabled entirely, just return the same stream as-is
my $ssl = $self->ssl
or return $stream;
require IO::Async::SSL;
require IO::Socket::SSL;
$log->tracef('Attempting to negotiate SSL');
await $stream->write($self->protocol->ssl_request);
$log->tracef('Waiting for response');
my ($resp, $eof) = await $stream->read_exactly(1);
$log->tracef('Read %v02x from server for SSL response (EOF is %s)', $resp, $eof ? 'true' : 'false');
die 'Server closed connection' if $eof;
if($resp eq 'S') {
# S for SSL...
$log->tracef('This is SSL, let us upgrade');
$stream = await $self->loop->SSL_upgrade(
handle => $stream,
# SSL defaults...
SSL_server => 0,
SSL_hostname => $self->uri->host,
SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE(),
# Pass through anything SSL-related unchanged, the user knows
# better than we do
(map {; $_ => $self->{$_} } grep { /^SSL_/ } keys %$self)
);
$log->tracef('Upgrade complete');
} elsif($resp eq 'N') {
# N for "no SSL"...
$log->tracef('No to SSL');
die 'Server does not support SSL' if $self->ssl == SSL_REQUIRE;
} else {
( run in 0.479 second using v1.01-cache-2.11-cpan-4d50c553e7e )