1e71b7053SJung-uk Kim=pod 2e71b7053SJung-uk Kim 3e71b7053SJung-uk Kim=head1 NAME 4e71b7053SJung-uk Kim 5e71b7053SJung-uk KimBIO_set_callback_ex, BIO_get_callback_ex, BIO_set_callback, BIO_get_callback, 6e71b7053SJung-uk KimBIO_set_callback_arg, BIO_get_callback_arg, BIO_debug_callback, 7e71b7053SJung-uk KimBIO_callback_fn_ex, BIO_callback_fn 8e71b7053SJung-uk Kim- BIO callback functions 9e71b7053SJung-uk Kim 10e71b7053SJung-uk Kim=head1 SYNOPSIS 11e71b7053SJung-uk Kim 12e71b7053SJung-uk Kim #include <openssl/bio.h> 13e71b7053SJung-uk Kim 14e71b7053SJung-uk Kim typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp, 15e71b7053SJung-uk Kim size_t len, int argi, 16e71b7053SJung-uk Kim long argl, int ret, size_t *processed); 17e71b7053SJung-uk Kim typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, 18e71b7053SJung-uk Kim long argl, long ret); 19e71b7053SJung-uk Kim 20e71b7053SJung-uk Kim void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); 21e71b7053SJung-uk Kim BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); 22e71b7053SJung-uk Kim 23e71b7053SJung-uk Kim void BIO_set_callback(BIO *b, BIO_callback_fn cb); 24e71b7053SJung-uk Kim BIO_callback_fn BIO_get_callback(BIO *b); 25e71b7053SJung-uk Kim void BIO_set_callback_arg(BIO *b, char *arg); 26e71b7053SJung-uk Kim char *BIO_get_callback_arg(const BIO *b); 27e71b7053SJung-uk Kim 28e71b7053SJung-uk Kim long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, 29e71b7053SJung-uk Kim long argl, long ret); 30e71b7053SJung-uk Kim 31e71b7053SJung-uk Kim=head1 DESCRIPTION 32e71b7053SJung-uk Kim 33e71b7053SJung-uk KimBIO_set_callback_ex() and BIO_get_callback_ex() set and retrieve the BIO 34e71b7053SJung-uk Kimcallback. The callback is called during most high level BIO operations. It can 35e71b7053SJung-uk Kimbe used for debugging purposes to trace operations on a BIO or to modify its 36e71b7053SJung-uk Kimoperation. 37e71b7053SJung-uk Kim 38e71b7053SJung-uk KimBIO_set_callback() and BIO_get_callback() set and retrieve the old format BIO 39e71b7053SJung-uk Kimcallback. New code should not use these functions, but they are retained for 40e71b7053SJung-uk Kimbackwards compatibility. Any callback set via BIO_set_callback_ex() will get 41e71b7053SJung-uk Kimcalled in preference to any set by BIO_set_callback(). 42e71b7053SJung-uk Kim 43e71b7053SJung-uk KimBIO_set_callback_arg() and BIO_get_callback_arg() are macros which can be 44e71b7053SJung-uk Kimused to set and retrieve an argument for use in the callback. 45e71b7053SJung-uk Kim 46e71b7053SJung-uk KimBIO_debug_callback() is a standard debugging callback which prints 47e71b7053SJung-uk Kimout information relating to each BIO operation. If the callback 48e71b7053SJung-uk Kimargument is set it is interpreted as a BIO to send the information 49e71b7053SJung-uk Kimto, otherwise stderr is used. 50e71b7053SJung-uk Kim 51e71b7053SJung-uk KimBIO_callback_fn_ex() is the type of the callback function and BIO_callback_fn() 52e71b7053SJung-uk Kimis the type of the old format callback function. The meaning of each argument 53e71b7053SJung-uk Kimis described below: 54e71b7053SJung-uk Kim 55e71b7053SJung-uk Kim=over 4 56e71b7053SJung-uk Kim 57e71b7053SJung-uk Kim=item B<b> 58e71b7053SJung-uk Kim 59e71b7053SJung-uk KimThe BIO the callback is attached to is passed in B<b>. 60e71b7053SJung-uk Kim 61e71b7053SJung-uk Kim=item B<oper> 62e71b7053SJung-uk Kim 63e71b7053SJung-uk KimB<oper> is set to the operation being performed. For some operations 64e71b7053SJung-uk Kimthe callback is called twice, once before and once after the actual 65e71b7053SJung-uk Kimoperation, the latter case has B<oper> or'ed with BIO_CB_RETURN. 66e71b7053SJung-uk Kim 67e71b7053SJung-uk Kim=item B<len> 68e71b7053SJung-uk Kim 69e71b7053SJung-uk KimThe length of the data requested to be read or written. This is only useful if 70e71b7053SJung-uk KimB<oper> is BIO_CB_READ, BIO_CB_WRITE or BIO_CB_GETS. 71e71b7053SJung-uk Kim 72e71b7053SJung-uk Kim=item B<argp> B<argi> B<argl> 73e71b7053SJung-uk Kim 74e71b7053SJung-uk KimThe meaning of the arguments B<argp>, B<argi> and B<argl> depends on 75e71b7053SJung-uk Kimthe value of B<oper>, that is the operation being performed. 76e71b7053SJung-uk Kim 77e71b7053SJung-uk Kim=item B<processed> 78e71b7053SJung-uk Kim 79e71b7053SJung-uk KimB<processed> is a pointer to a location which will be updated with the amount of 80e71b7053SJung-uk Kimdata that was actually read or written. Only used for BIO_CB_READ, BIO_CB_WRITE, 81e71b7053SJung-uk KimBIO_CB_GETS and BIO_CB_PUTS. 82e71b7053SJung-uk Kim 83e71b7053SJung-uk Kim=item B<ret> 84e71b7053SJung-uk Kim 85e71b7053SJung-uk KimB<ret> is the return value that would be returned to the 86e71b7053SJung-uk Kimapplication if no callback were present. The actual value returned 87e71b7053SJung-uk Kimis the return value of the callback itself. In the case of callbacks 88e71b7053SJung-uk Kimcalled before the actual BIO operation 1 is placed in B<ret>, if 89e71b7053SJung-uk Kimthe return value is not positive it will be immediately returned to 90e71b7053SJung-uk Kimthe application and the BIO operation will not be performed. 91e71b7053SJung-uk Kim 92e71b7053SJung-uk Kim=back 93e71b7053SJung-uk Kim 94e71b7053SJung-uk KimThe callback should normally simply return B<ret> when it has 95e71b7053SJung-uk Kimfinished processing, unless it specifically wishes to modify the 96e71b7053SJung-uk Kimvalue returned to the application. 97e71b7053SJung-uk Kim 98e71b7053SJung-uk Kim=head1 CALLBACK OPERATIONS 99e71b7053SJung-uk Kim 100e71b7053SJung-uk KimIn the notes below, B<callback> defers to the actual callback 101e71b7053SJung-uk Kimfunction that is called. 102e71b7053SJung-uk Kim 103e71b7053SJung-uk Kim=over 4 104e71b7053SJung-uk Kim 105e71b7053SJung-uk Kim=item B<BIO_free(b)> 106e71b7053SJung-uk Kim 107e71b7053SJung-uk Kim callback_ex(b, BIO_CB_FREE, NULL, 0, 0, 0L, 1L, NULL) 108e71b7053SJung-uk Kim 109e71b7053SJung-uk Kimor 110e71b7053SJung-uk Kim 111e71b7053SJung-uk Kim callback(b, BIO_CB_FREE, NULL, 0L, 0L, 1L) 112e71b7053SJung-uk Kim 113e71b7053SJung-uk Kimis called before the free operation. 114e71b7053SJung-uk Kim 115e71b7053SJung-uk Kim=item B<BIO_read_ex(b, data, dlen, readbytes)> 116e71b7053SJung-uk Kim 117e71b7053SJung-uk Kim callback_ex(b, BIO_CB_READ, data, dlen, 0, 0L, 1L, NULL) 118e71b7053SJung-uk Kim 119e71b7053SJung-uk Kimor 120e71b7053SJung-uk Kim 121e71b7053SJung-uk Kim callback(b, BIO_CB_READ, data, dlen, 0L, 1L) 122e71b7053SJung-uk Kim 123e71b7053SJung-uk Kimis called before the read and 124e71b7053SJung-uk Kim 125e71b7053SJung-uk Kim callback_ex(b, BIO_CB_READ | BIO_CB_RETURN, data, dlen, 0, 0L, retvalue, 126e71b7053SJung-uk Kim &readbytes) 127e71b7053SJung-uk Kim 128e71b7053SJung-uk Kimor 129e71b7053SJung-uk Kim 130e71b7053SJung-uk Kim callback(b, BIO_CB_READ|BIO_CB_RETURN, data, dlen, 0L, retvalue) 131e71b7053SJung-uk Kim 132e71b7053SJung-uk Kimafter. 133e71b7053SJung-uk Kim 134e71b7053SJung-uk Kim=item B<BIO_write(b, data, dlen, written)> 135e71b7053SJung-uk Kim 136e71b7053SJung-uk Kim callback_ex(b, BIO_CB_WRITE, data, dlen, 0, 0L, 1L, NULL) 137e71b7053SJung-uk Kim 138e71b7053SJung-uk Kimor 139e71b7053SJung-uk Kim 140e71b7053SJung-uk Kim callback(b, BIO_CB_WRITE, datat, dlen, 0L, 1L) 141e71b7053SJung-uk Kim 142e71b7053SJung-uk Kimis called before the write and 143e71b7053SJung-uk Kim 144e71b7053SJung-uk Kim callback_ex(b, BIO_CB_WRITE | BIO_CB_RETURN, data, dlen, 0, 0L, retvalue, 145e71b7053SJung-uk Kim &written) 146e71b7053SJung-uk Kim 147e71b7053SJung-uk Kimor 148e71b7053SJung-uk Kim 149e71b7053SJung-uk Kim callback(b, BIO_CB_WRITE|BIO_CB_RETURN, data, dlen, 0L, retvalue) 150e71b7053SJung-uk Kim 151e71b7053SJung-uk Kimafter. 152e71b7053SJung-uk Kim 153e71b7053SJung-uk Kim=item B<BIO_gets(b, buf, size)> 154e71b7053SJung-uk Kim 155e71b7053SJung-uk Kim callback_ex(b, BIO_CB_GETS, buf, size, 0, 0L, 1, NULL, NULL) 156e71b7053SJung-uk Kim 157e71b7053SJung-uk Kimor 158e71b7053SJung-uk Kim 159e71b7053SJung-uk Kim callback(b, BIO_CB_GETS, buf, size, 0L, 1L) 160e71b7053SJung-uk Kim 161e71b7053SJung-uk Kimis called before the operation and 162e71b7053SJung-uk Kim 163e71b7053SJung-uk Kim callback_ex(b, BIO_CB_GETS | BIO_CB_RETURN, buf, size, 0, 0L, retvalue, 164e71b7053SJung-uk Kim &readbytes) 165e71b7053SJung-uk Kim 166e71b7053SJung-uk Kimor 167e71b7053SJung-uk Kim 168e71b7053SJung-uk Kim callback(b, BIO_CB_GETS|BIO_CB_RETURN, buf, size, 0L, retvalue) 169e71b7053SJung-uk Kim 170e71b7053SJung-uk Kimafter. 171e71b7053SJung-uk Kim 172e71b7053SJung-uk Kim=item B<BIO_puts(b, buf)> 173e71b7053SJung-uk Kim 174e71b7053SJung-uk Kim callback_ex(b, BIO_CB_PUTS, buf, 0, 0, 0L, 1L, NULL); 175e71b7053SJung-uk Kim 176e71b7053SJung-uk Kimor 177e71b7053SJung-uk Kim 178e71b7053SJung-uk Kim callback(b, BIO_CB_PUTS, buf, 0, 0L, 1L) 179e71b7053SJung-uk Kim 180e71b7053SJung-uk Kimis called before the operation and 181e71b7053SJung-uk Kim 182e71b7053SJung-uk Kim callback_ex(b, BIO_CB_PUTS | BIO_CB_RETURN, buf, 0, 0, 0L, retvalue, &written) 183e71b7053SJung-uk Kim 184e71b7053SJung-uk Kimor 185e71b7053SJung-uk Kim 186e71b7053SJung-uk Kim callback(b, BIO_CB_PUTS|BIO_CB_RETURN, buf, 0, 0L, retvalue) 187e71b7053SJung-uk Kim 188e71b7053SJung-uk Kimafter. 189e71b7053SJung-uk Kim 190e71b7053SJung-uk Kim=item B<BIO_ctrl(BIO *b, int cmd, long larg, void *parg)> 191e71b7053SJung-uk Kim 192e71b7053SJung-uk Kim callback_ex(b, BIO_CB_CTRL, parg, 0, cmd, larg, 1L, NULL) 193e71b7053SJung-uk Kim 194e71b7053SJung-uk Kimor 195e71b7053SJung-uk Kim 196e71b7053SJung-uk Kim callback(b, BIO_CB_CTRL, parg, cmd, larg, 1L) 197e71b7053SJung-uk Kim 198e71b7053SJung-uk Kimis called before the call and 199e71b7053SJung-uk Kim 200e71b7053SJung-uk Kim callback_ex(b, BIO_CB_CTRL | BIO_CB_RETURN, parg, 0, cmd, larg, ret, NULL) 201e71b7053SJung-uk Kim 202e71b7053SJung-uk Kimor 203e71b7053SJung-uk Kim 204e71b7053SJung-uk Kim callback(b, BIO_CB_CTRL|BIO_CB_RETURN, parg, cmd, larg, ret) 205e71b7053SJung-uk Kim 206e71b7053SJung-uk Kimafter. 207e71b7053SJung-uk Kim 208e71b7053SJung-uk KimNote: B<cmd> == B<BIO_CTRL_SET_CALLBACK> is special, because B<parg> is not the 209e71b7053SJung-uk Kimargument of type B<BIO_info_cb> itself. In this case B<parg> is a pointer to 210e71b7053SJung-uk Kimthe actual call parameter, see B<BIO_callback_ctrl>. 211e71b7053SJung-uk Kim 212e71b7053SJung-uk Kim=back 213e71b7053SJung-uk Kim 214e71b7053SJung-uk Kim=head1 RETURN VALUES 215e71b7053SJung-uk Kim 216e71b7053SJung-uk KimBIO_get_callback_ex() and BIO_get_callback() return the callback function 217e71b7053SJung-uk Kimpreviously set by a call to BIO_set_callback_ex() and BIO_set_callback() 218e71b7053SJung-uk Kimrespectively. 219e71b7053SJung-uk Kim 220e71b7053SJung-uk KimBIO_get_callback_arg() returns a B<char> pointer to the value previously set 221e71b7053SJung-uk Kimvia a call to BIO_set_callback_arg(). 222e71b7053SJung-uk Kim 223e71b7053SJung-uk KimBIO_debug_callback() returns 1 or B<ret> if it's called after specific BIO 224e71b7053SJung-uk Kimoperations. 225e71b7053SJung-uk Kim 226*da327cd2SJung-uk Kim=head1 EXAMPLES 227*da327cd2SJung-uk Kim 228*da327cd2SJung-uk KimThe BIO_debug_callback() function is a good example, its source is 229*da327cd2SJung-uk Kimin crypto/bio/bio_cb.c 230*da327cd2SJung-uk Kim 231e71b7053SJung-uk Kim=head1 COPYRIGHT 232e71b7053SJung-uk Kim 233*da327cd2SJung-uk KimCopyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. 234e71b7053SJung-uk Kim 235e71b7053SJung-uk KimLicensed under the OpenSSL license (the "License"). You may not use 236e71b7053SJung-uk Kimthis file except in compliance with the License. You can obtain a copy 237e71b7053SJung-uk Kimin the file LICENSE in the source distribution or at 238e71b7053SJung-uk KimL<https://www.openssl.org/source/license.html>. 239e71b7053SJung-uk Kim 240e71b7053SJung-uk Kim=cut 241