xref: /freebsd/crypto/openssl/doc/man3/BIO_set_callback.pod (revision da327cd22e88f26f6cab9d4c45805b512139aa11)
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