]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/BIO_set_callback.pod
Implement EVP_MAC_do_all_ex()
[thirdparty/openssl.git] / doc / man3 / BIO_set_callback.pod
CommitLineData
d572cb6c
DSH
1=pod
2
3=head1 NAME
4
b055fceb 5BIO_set_callback_ex, BIO_get_callback_ex, BIO_set_callback, BIO_get_callback,
121677b4
RS
6BIO_set_callback_arg, BIO_get_callback_arg, BIO_debug_callback,
7BIO_callback_fn_ex, BIO_callback_fn
b055fceb 8- BIO callback functions
d572cb6c
DSH
9
10=head1 SYNOPSIS
11
12 #include <openssl/bio.h>
13
b055fceb
MC
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);
91da5e77
RS
17 typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi,
18 long argl, long ret);
d572cb6c 19
b055fceb
MC
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
27b138e9
JS
23 void BIO_set_callback(BIO *b, BIO_callback_fn cb);
24 BIO_callback_fn BIO_get_callback(BIO *b);
91da5e77
RS
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);
d572cb6c
DSH
30
31=head1 DESCRIPTION
32
b055fceb
MC
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
27b138e9 40backwards compatibility. Any callback set via BIO_set_callback_ex() will get
b055fceb 41called in preference to any set by BIO_set_callback().
d572cb6c
DSH
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
91da5e77 48argument is set it is interpreted as a BIO to send the information
d572cb6c
DSH
49to, otherwise stderr is used.
50
b055fceb
MC
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:
d572cb6c 54
e1271ac2 55=over 4
2a5f907e
CS
56
57=item B<b>
58
d572cb6c
DSH
59The BIO the callback is attached to is passed in B<b>.
60
2a5f907e
CS
61=item B<oper>
62
d572cb6c
DSH
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
b055fceb
MC
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
2a5f907e
CS
72=item B<argp> B<argi> B<argl>
73
d572cb6c
DSH
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
b055fceb
MC
77=item B<processed>
78
79B<processed> is a pointer to a location which will be updated with the amount of
4e3973b4 80data that was actually read or written. Only used for BIO_CB_READ, BIO_CB_WRITE,
b055fceb
MC
81BIO_CB_GETS and BIO_CB_PUTS.
82
2a5f907e
CS
83=item B<ret>
84
91da5e77 85B<ret> is the return value that would be returned to the
d572cb6c
DSH
86application if no callback were present. The actual value returned
87is the return value of the callback itself. In the case of callbacks
91da5e77 88called before the actual BIO operation 1 is placed in B<ret>, if
d572cb6c
DSH
89the return value is not positive it will be immediately returned to
90the application and the BIO operation will not be performed.
91
91da5e77
RS
92=back
93
94The callback should normally simply return B<ret> when it has
95finished processing, unless it specifically wishes to modify the
d572cb6c
DSH
96value returned to the application.
97
98=head1 CALLBACK OPERATIONS
99
91da5e77
RS
100In the notes below, B<callback> defers to the actual callback
101function that is called.
102
d572cb6c
DSH
103=over 4
104
105=item B<BIO_free(b)>
106
b055fceb
MC
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
4e3973b4 115=item B<BIO_read_ex(b, data, dlen, readbytes)>
d572cb6c 116
c911e5da 117 callback_ex(b, BIO_CB_READ, data, dlen, 0, 0L, 1L, NULL)
b055fceb
MC
118
119or
120
4e3973b4
BK
121 callback(b, BIO_CB_READ, data, dlen, 0L, 1L)
122
b055fceb
MC
123is called before the read and
124
2947af32 125 callback_ex(b, BIO_CB_READ | BIO_CB_RETURN, data, dlen, 0, 0L, retvalue,
c911e5da 126 &readbytes)
b055fceb
MC
127
128or
129
4e3973b4 130 callback(b, BIO_CB_READ|BIO_CB_RETURN, data, dlen, 0L, retvalue)
d572cb6c 131
d572cb6c
DSH
132after.
133
4e3973b4 134=item B<BIO_write(b, data, dlen, written)>
b055fceb 135
c911e5da 136 callback_ex(b, BIO_CB_WRITE, data, dlen, 0, 0L, 1L, NULL)
b055fceb
MC
137
138or
139
4e3973b4 140 callback(b, BIO_CB_WRITE, datat, dlen, 0L, 1L)
b055fceb
MC
141
142is called before the write and
143
2947af32 144 callback_ex(b, BIO_CB_WRITE | BIO_CB_RETURN, data, dlen, 0, 0L, retvalue,
c911e5da 145 &written)
b055fceb
MC
146
147or
148
4e3973b4 149 callback(b, BIO_CB_WRITE|BIO_CB_RETURN, data, dlen, 0L, retvalue)
d572cb6c 150
d572cb6c
DSH
151after.
152
4e3973b4 153=item B<BIO_gets(b, buf, size)>
d572cb6c 154
4e3973b4 155 callback_ex(b, BIO_CB_GETS, buf, size, 0, 0L, 1, NULL, NULL)
b055fceb
MC
156
157or
158
4e3973b4 159 callback(b, BIO_CB_GETS, buf, size, 0L, 1L)
b055fceb
MC
160
161is called before the operation and
162
2947af32 163 callback_ex(b, BIO_CB_GETS | BIO_CB_RETURN, buf, size, 0, 0L, retvalue,
c911e5da 164 &readbytes)
b055fceb
MC
165
166or
167
4e3973b4 168 callback(b, BIO_CB_GETS|BIO_CB_RETURN, buf, size, 0L, retvalue)
b055fceb 169
d572cb6c
DSH
170after.
171
4e3973b4 172=item B<BIO_puts(b, buf)>
d572cb6c 173
4e3973b4 174 callback_ex(b, BIO_CB_PUTS, buf, 0, 0, 0L, 1L, NULL);
b055fceb
MC
175
176or
177
4e3973b4 178 callback(b, BIO_CB_PUTS, buf, 0, 0L, 1L)
b055fceb
MC
179
180is called before the operation and
181
c911e5da 182 callback_ex(b, BIO_CB_PUTS | BIO_CB_RETURN, buf, 0, 0, 0L, retvalue, &written)
b055fceb
MC
183
184or
185
c911e5da 186 callback(b, BIO_CB_PUTS|BIO_CB_RETURN, buf, 0, 0L, retvalue)
b055fceb 187
d572cb6c
DSH
188after.
189
190=item B<BIO_ctrl(BIO *b, int cmd, long larg, void *parg)>
191
b055fceb
MC
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)
4e3973b4 205
b055fceb 206after.
d572cb6c 207
c911e5da
BE
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
d572cb6c
DSH
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
1f13ad31
PY
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
e2f92610
RS
231=head1 COPYRIGHT
232
61f805c1 233Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
e2f92610 234
4746f25a 235Licensed under the Apache License 2.0 (the "License"). You may not use
e2f92610
RS
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