use strict;
use warnings;
use IO::Socket::SSL qw(SSL_VERIFY_PEER);
$SIG{ALRM} = sub { print "TLS_PROTOCOL=unavailable\nCERTIFICATE_AND_HOSTNAME=not-verified\nHTTP_STATUS=timeout\n"; exit 4; };
alarm 20;
my $socket = IO::Socket::SSL->new(
    PeerAddr => '127.0.0.1', PeerPort => 443, Timeout => 15,
    SSL_hostname => 'dial.solarrefer.com',
    SSL_verifycn_name => 'dial.solarrefer.com',
    SSL_verifycn_scheme => 'http',
    SSL_verify_mode => SSL_VERIFY_PEER,
);
if (!$socket) {
    print "TLS_PROTOCOL=unavailable\nCERTIFICATE_AND_HOSTNAME=not-verified\nHTTP_STATUS=not-requested\n";
    print STDERR "TLS connection failed: ", IO::Socket::SSL::errstr(), "\n";
    exit 3;
}
my $protocol = $socket->get_sslversion();
print $socket "HEAD /vicidial/admin.php HTTP/1.1\r\nHost: dial.solarrefer.com\r\nConnection: close\r\n\r\n";
my $line = <$socket>;
my ($status) = defined($line) ? ($line =~ m{\AHTTP/\d(?:\.\d)?\s+([1-5]\d\d)\b}) : ();
close $socket;
alarm 0;
print "TLS_PROTOCOL=$protocol\nCERTIFICATE_AND_HOSTNAME=verified\nHTTP_STATUS=", (defined($status) ? $status : 'invalid-response'), "\n";
exit(defined($status) ? 0 : 5);
