=pod

=head1 NAME

SSL_get_ex_new_index, SSL_set_ex_data, SSL_get_ex_data - internal application specific data functions

=head1 SYNOPSIS

 #include <openssl/ssl.h>

 int SSL_get_ex_new_index(long argl, void *argp,
                CRYPTO_EX_new *new_func,
                CRYPTO_EX_dup *dup_func,
                CRYPTO_EX_free *free_func);

 int SSL_set_ex_data(SSL *ssl, int idx, void *arg);

 void *SSL_get_ex_data(const SSL *ssl, int idx);

 typedef int new_func(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
                int idx, long argl, void *argp);
 typedef void free_func(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
                int idx, long argl, void *argp);
 typedef int dup_func(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d,
                int idx, long argl, void *argp);

=head1 DESCRIPTION

Several OpenSSL structures can have application specific data attached to them.
These functions are used internally by OpenSSL to manipulate application
specific data attached to a specific structure.

SSL_get_ex_new_index() is used to register a new index for application
specific data.

SSL_set_ex_data() is used to store application data at B<arg> for B<idx> into
the B<ssl> object.

SSL_get_ex_data() is used to retrieve the information for B<idx> from
B<ssl>.

A detailed description for the B<*_get_ex_new_index()> functionality
can be found in L<RSA_get_ex_new_index(3)|RSA_get_ex_new_index(3)>.
The B<*_get_ex_data()> and B<*_set_ex_data()> functionality is described in
L<CRYPTO_set_ex_data(3)|CRYPTO_set_ex_data(3)>.

=head1 EXAMPLES

An example on how to use the functionality is included in the example
verify_callback() in L<SSL_CTX_set_verify(3)|SSL_CTX_set_verify(3)>.

=head1 SEE ALSO

L<ssl(3)|ssl(3)>,
L<RSA_get_ex_new_index(3)|RSA_get_ex_new_index(3)>,
L<CRYPTO_set_ex_data(3)|CRYPTO_set_ex_data(3)>,
L<SSL_CTX_set_verify(3)|SSL_CTX_set_verify(3)>

=cut
