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