189837Skris=pod
289837Skris
389837Skris=head1 NAME
489837Skris
589837SkrisSSL_CTX_set_info_callback, SSL_CTX_get_info_callback, SSL_set_info_callback, SSL_get_info_callback - handle information callback for SSL connections
689837Skris
789837Skris=head1 SYNOPSIS
889837Skris
989837Skris #include <openssl/ssl.h>
1089837Skris
1189837Skris void SSL_CTX_set_info_callback(SSL_CTX *ctx, void (*callback)());
12160814Ssimon void (*SSL_CTX_get_info_callback(const SSL_CTX *ctx))();
1389837Skris
1489837Skris void SSL_set_info_callback(SSL *ssl, void (*callback)());
15160814Ssimon void (*SSL_get_info_callback(const SSL *ssl))();
1689837Skris
1789837Skris=head1 DESCRIPTION
1889837Skris
1989837SkrisSSL_CTX_set_info_callback() sets the B<callback> function, that can be used to
2089837Skrisobtain state information for SSL objects created from B<ctx> during connection
2189837Skrissetup and use. The setting for B<ctx> is overridden from the setting for
2289837Skrisa specific SSL object, if specified.
2389837SkrisWhen B<callback> is NULL, not callback function is used.
2489837Skris
2589837SkrisSSL_set_info_callback() sets the B<callback> function, that can be used to
2689837Skrisobtain state information for B<ssl> during connection setup and use.
2789837SkrisWhen B<callback> is NULL, the callback setting currently valid for
2889837SkrisB<ctx> is used.
2989837Skris
3089837SkrisSSL_CTX_get_info_callback() returns a pointer to the currently set information
3189837Skriscallback function for B<ctx>.
3289837Skris
3389837SkrisSSL_get_info_callback() returns a pointer to the currently set information
3489837Skriscallback function for B<ssl>.
3589837Skris
3689837Skris=head1 NOTES
3789837Skris
3889837SkrisWhen setting up a connection and during use, it is possible to obtain state
3989837Skrisinformation from the SSL/TLS engine. When set, an information callback function
4089837Skrisis called whenever the state changes, an alert appears, or an error occurs.
4189837Skris
4289837SkrisThe callback function is called as B<callback(SSL *ssl, int where, int ret)>.
4389837SkrisThe B<where> argument specifies information about where (in which context)
4489837Skristhe callback function was called. If B<ret> is 0, an error condition occurred.
4589837SkrisIf an alert is handled, SSL_CB_ALERT is set and B<ret> specifies the alert
4689837Skrisinformation.
4789837Skris
4889837SkrisB<where> is a bitmask made up of the following bits:
4989837Skris
5089837Skris=over 4
5189837Skris
5289837Skris=item SSL_CB_LOOP
5389837Skris
5489837SkrisCallback has been called to indicate state change inside a loop.
5589837Skris
5689837Skris=item SSL_CB_EXIT
5789837Skris
5889837SkrisCallback has been called to indicate error exit of a handshake function.
5989837Skris(May be soft error with retry option for non-blocking setups.)
6089837Skris
6189837Skris=item SSL_CB_READ
6289837Skris
6389837SkrisCallback has been called during read operation.
6489837Skris
6589837Skris=item SSL_CB_WRITE
6689837Skris
6789837SkrisCallback has been called during write operation.
6889837Skris
6989837Skris=item SSL_CB_ALERT
7089837Skris
7189837SkrisCallback has been called due to an alert being sent or received.
7289837Skris
7389837Skris=item SSL_CB_READ_ALERT               (SSL_CB_ALERT|SSL_CB_READ)
7489837Skris
7589837Skris=item SSL_CB_WRITE_ALERT              (SSL_CB_ALERT|SSL_CB_WRITE)
7689837Skris
7789837Skris=item SSL_CB_ACCEPT_LOOP              (SSL_ST_ACCEPT|SSL_CB_LOOP)
7889837Skris
7989837Skris=item SSL_CB_ACCEPT_EXIT              (SSL_ST_ACCEPT|SSL_CB_EXIT)
8089837Skris
8189837Skris=item SSL_CB_CONNECT_LOOP             (SSL_ST_CONNECT|SSL_CB_LOOP)
8289837Skris
8389837Skris=item SSL_CB_CONNECT_EXIT             (SSL_ST_CONNECT|SSL_CB_EXIT)
8489837Skris
8589837Skris=item SSL_CB_HANDSHAKE_START
8689837Skris
8789837SkrisCallback has been called because a new handshake is started.
8889837Skris
8989837Skris=item SSL_CB_HANDSHAKE_DONE           0x20
9089837Skris
9189837SkrisCallback has been called because a handshake is finished.
9289837Skris
9389837Skris=back
9489837Skris
9589837SkrisThe current state information can be obtained using the
9689837SkrisL<SSL_state_string(3)|SSL_state_string(3)> family of functions.
9789837Skris
9889837SkrisThe B<ret> information can be evaluated using the
9989837SkrisL<SSL_alert_type_string(3)|SSL_alert_type_string(3)> family of functions.
10089837Skris
10189837Skris=head1 RETURN VALUES
10289837Skris
10389837SkrisSSL_set_info_callback() does not provide diagnostic information.
10489837Skris
10589837SkrisSSL_get_info_callback() returns the current setting.
10689837Skris
10789837Skris=head1 EXAMPLES
10889837Skris
10989837SkrisThe following example callback function prints state strings, information
11089837Skrisabout alerts being handled and error messages to the B<bio_err> BIO.
11189837Skris
11289837Skris void apps_ssl_info_callback(SSL *s, int where, int ret)
11389837Skris	{
11489837Skris	const char *str;
11589837Skris	int w;
11689837Skris
11789837Skris	w=where& ~SSL_ST_MASK;
11889837Skris
11989837Skris	if (w & SSL_ST_CONNECT) str="SSL_connect";
12089837Skris	else if (w & SSL_ST_ACCEPT) str="SSL_accept";
12189837Skris	else str="undefined";
12289837Skris
12389837Skris	if (where & SSL_CB_LOOP)
12489837Skris		{
12589837Skris		BIO_printf(bio_err,"%s:%s\n",str,SSL_state_string_long(s));
12689837Skris		}
12789837Skris	else if (where & SSL_CB_ALERT)
12889837Skris		{
12989837Skris		str=(where & SSL_CB_READ)?"read":"write";
13089837Skris		BIO_printf(bio_err,"SSL3 alert %s:%s:%s\n",
13189837Skris			str,
13289837Skris			SSL_alert_type_string_long(ret),
13389837Skris			SSL_alert_desc_string_long(ret));
13489837Skris		}
13589837Skris	else if (where & SSL_CB_EXIT)
13689837Skris		{
13789837Skris		if (ret == 0)
13889837Skris			BIO_printf(bio_err,"%s:failed in %s\n",
13989837Skris				str,SSL_state_string_long(s));
14089837Skris		else if (ret < 0)
14189837Skris			{
14289837Skris			BIO_printf(bio_err,"%s:error in %s\n",
14389837Skris				str,SSL_state_string_long(s));
14489837Skris			}
14589837Skris		}
14689837Skris	}
14789837Skris
14889837Skris=head1 SEE ALSO
14989837Skris
15089837SkrisL<ssl(3)|ssl(3)>, L<SSL_state_string(3)|SSL_state_string(3)>,
15189837SkrisL<SSL_alert_type_string(3)|SSL_alert_type_string(3)>
15289837Skris
15389837Skris=cut
154