5 BIO_set_callback_ex, BIO_get_callback_ex, BIO_set_callback, BIO_get_callback,
6 BIO_set_callback_arg, BIO_get_callback_arg, BIO_debug_callback,
7 BIO_debug_callback_ex, BIO_callback_fn_ex, BIO_callback_fn
8 - BIO callback functions
12 #include <openssl/bio.h>
14 typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp,
16 long argl, int ret, size_t *processed);
18 void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback);
19 BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b);
21 void BIO_set_callback_arg(BIO *b, char *arg);
22 char *BIO_get_callback_arg(const BIO *b);
24 long BIO_debug_callback_ex(BIO *bio, int oper, const char *argp, size_t len,
25 int argi, long argl, int ret, size_t *processed);
27 Deprecated since OpenSSL 3.0, can be hidden entirely by defining
28 OPENSSL_API_COMPAT with a suitable version value, see
29 openssl_user_macros(7):
31 typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi,
33 void BIO_set_callback(BIO *b, BIO_callback_fn cb);
34 BIO_callback_fn BIO_get_callback(BIO *b);
35 long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi,
40 BIO_set_callback_ex() and BIO_get_callback_ex() set and retrieve the BIO
41 callback. The callback is called during most high-level BIO operations. It can
42 be used for debugging purposes to trace operations on a BIO or to modify its
45 BIO_set_callback() and BIO_get_callback() set and retrieve the old format BIO
46 callback. New code should not use these functions, but they are retained for
47 backwards compatibility. Any callback set via BIO_set_callback_ex() will get
48 called in preference to any set by BIO_set_callback().
50 BIO_set_callback_arg() and BIO_get_callback_arg() are macros which can be
51 used to set and retrieve an argument for use in the callback.
53 BIO_debug_callback_ex() is a standard debugging callback which prints
54 out information relating to each BIO operation. If the callback
55 argument is set it is interpreted as a BIO to send the information
56 to, otherwise stderr is used. The BIO_debug_callback() function is the
57 deprecated version of the same callback for use with the old callback
58 format BIO_set_callback() function.
60 BIO_callback_fn_ex is the type of the callback function and BIO_callback_fn
61 is the type of the old format callback function. The meaning of each argument
68 The BIO the callback is attached to is passed in B<b>.
72 B<oper> is set to the operation being performed. For some operations
73 the callback is called twice, once before and once after the actual
74 operation, the latter case has B<oper> or'ed with BIO_CB_RETURN.
78 The length of the data requested to be read or written. This is only useful if
79 B<oper> is BIO_CB_READ, BIO_CB_WRITE or BIO_CB_GETS.
81 =item B<argp> B<argi> B<argl>
83 The meaning of the arguments B<argp>, B<argi> and B<argl> depends on
84 the value of B<oper>, that is the operation being performed.
88 B<processed> is a pointer to a location which will be updated with the amount of
89 data that was actually read or written. Only used for BIO_CB_READ, BIO_CB_WRITE,
90 BIO_CB_GETS and BIO_CB_PUTS.
94 B<ret> is the return value that would be returned to the
95 application if no callback were present. The actual value returned
96 is the return value of the callback itself. In the case of callbacks
97 called before the actual BIO operation 1 is placed in B<ret>, if
98 the return value is not positive it will be immediately returned to
99 the application and the BIO operation will not be performed.
103 The callback should normally simply return B<ret> when it has
104 finished processing, unless it specifically wishes to modify the
105 value returned to the application.
107 =head1 CALLBACK OPERATIONS
109 In the notes below, B<callback> defers to the actual callback
110 function that is called.
116 callback_ex(b, BIO_CB_FREE, NULL, 0, 0, 0L, 1L, NULL)
120 callback(b, BIO_CB_FREE, NULL, 0L, 0L, 1L)
122 is called before the free operation.
124 =item B<BIO_read_ex(b, data, dlen, readbytes)>
126 callback_ex(b, BIO_CB_READ, data, dlen, 0, 0L, 1L, NULL)
130 callback(b, BIO_CB_READ, data, dlen, 0L, 1L)
132 is called before the read and
134 callback_ex(b, BIO_CB_READ | BIO_CB_RETURN, data, dlen, 0, 0L, retvalue,
139 callback(b, BIO_CB_READ|BIO_CB_RETURN, data, dlen, 0L, retvalue)
143 =item B<BIO_write(b, data, dlen, written)>
145 callback_ex(b, BIO_CB_WRITE, data, dlen, 0, 0L, 1L, NULL)
149 callback(b, BIO_CB_WRITE, datat, dlen, 0L, 1L)
151 is called before the write and
153 callback_ex(b, BIO_CB_WRITE | BIO_CB_RETURN, data, dlen, 0, 0L, retvalue,
158 callback(b, BIO_CB_WRITE|BIO_CB_RETURN, data, dlen, 0L, retvalue)
162 =item B<BIO_gets(b, buf, size)>
164 callback_ex(b, BIO_CB_GETS, buf, size, 0, 0L, 1, NULL, NULL)
168 callback(b, BIO_CB_GETS, buf, size, 0L, 1L)
170 is called before the operation and
172 callback_ex(b, BIO_CB_GETS | BIO_CB_RETURN, buf, size, 0, 0L, retvalue,
177 callback(b, BIO_CB_GETS|BIO_CB_RETURN, buf, size, 0L, retvalue)
181 =item B<BIO_puts(b, buf)>
183 callback_ex(b, BIO_CB_PUTS, buf, 0, 0, 0L, 1L, NULL);
187 callback(b, BIO_CB_PUTS, buf, 0, 0L, 1L)
189 is called before the operation and
191 callback_ex(b, BIO_CB_PUTS | BIO_CB_RETURN, buf, 0, 0, 0L, retvalue, &written)
195 callback(b, BIO_CB_PUTS|BIO_CB_RETURN, buf, 0, 0L, retvalue)
199 =item B<BIO_ctrl(BIO *b, int cmd, long larg, void *parg)>
201 callback_ex(b, BIO_CB_CTRL, parg, 0, cmd, larg, 1L, NULL)
205 callback(b, BIO_CB_CTRL, parg, cmd, larg, 1L)
207 is called before the call and
209 callback_ex(b, BIO_CB_CTRL | BIO_CB_RETURN, parg, 0, cmd, larg, ret, NULL)
213 callback(b, BIO_CB_CTRL|BIO_CB_RETURN, parg, cmd, larg, ret)
217 Note: B<cmd> == B<BIO_CTRL_SET_CALLBACK> is special, because B<parg> is not the
218 argument of type B<BIO_info_cb> itself. In this case B<parg> is a pointer to
219 the actual call parameter, see B<BIO_callback_ctrl>.
225 BIO_get_callback_ex() and BIO_get_callback() return the callback function
226 previously set by a call to BIO_set_callback_ex() and BIO_set_callback()
229 BIO_get_callback_arg() returns a B<char> pointer to the value previously set
230 via a call to BIO_set_callback_arg().
232 BIO_debug_callback() returns 1 or B<ret> if it's called after specific BIO
237 The BIO_debug_callback_ex() function is an example, its source is
238 in crypto/bio/bio_cb.c
242 The BIO_debug_callback_ex() function was added in OpenSSL 3.0.
244 BIO_set_callback(), BIO_get_callback(), and BIO_debug_callback() were
245 deprecated in OpenSSL 3.0. Use the non-deprecated _ex functions instead.
249 Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
251 Licensed under the Apache License 2.0 (the "License"). You may not use
252 this file except in compliance with the License. You can obtain a copy
253 in the file LICENSE in the source distribution or at
254 L<https://www.openssl.org/source/license.html>.