=pod

=head1 NAME

SSL_client_version, SSL_get_version, SSL_is_dtls, SSL_version - get the
protocol information of a connection

=head1 SYNOPSIS

 #include <openssl/ssl.h>

 int SSL_client_version(const SSL *s);

 const char *SSL_get_version(const SSL *ssl);

 int SSL_is_dtls(const SSL *ssl);

 int SSL_version(const SSL *s);

=head1 DESCRIPTION

SSL_client_version() returns the protocol version used by the client when
initiating the connection.

SSL_get_version() returns the name of the protocol used for the
connection.

SSL_is_dtls() returns one if the connection is using DTLS, zero if not.

SSL_version() returns the protocol version used for the connection.

=head1 RETURN VALUES

SSL_get_version() returns one of the following strings:

=over 4

=item SSLv3

The connection uses the SSLv3 protocol.

=item TLSv1

The connection uses the TLSv1.0 protocol.

=item TLSv1.1

The connection uses the TLSv1.1 protocol.

=item TLSv1.2

The connection uses the TLSv1.2 protocol.

=item TLSv1.3

The connection uses the TLSv1.3 protocol.

=item unknown

This indicates that no version has been set (no connection established).

=back

SSL_version() and SSL_client_version() return an integer which could include any of
the following:

=over 4

=item SSL3_VERSION

The connection uses the SSLv3 protocol.

=item TLS1_VERSION

The connection uses the TLSv1.0 protocol.

=item TLS1_1_VERSION

The connection uses the TLSv1.1 protocol.

=item TLS1_2_VERSION

The connection uses the TLSv1.2 protocol.

=item TLS1_3_VERSION

The connection uses the TLSv1.3 protocol.

=back

=head1 SEE ALSO

L<ssl(7)>

=head1 HISTORY

SSL_is_dtls() was added in OpenSSL 1.1.0.

=head1 COPYRIGHT

Copyright 2001-2017 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the OpenSSL license (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut
