xref: /openssl/doc/man3/BIO_meth_new.pod (revision 0bba8218)
1=pod
2
3=head1 NAME
4
5BIO_get_new_index,
6BIO_meth_new, BIO_meth_free, BIO_meth_get_read_ex, BIO_meth_set_read_ex,
7BIO_meth_get_write_ex, BIO_meth_set_write_ex, BIO_meth_get_write,
8BIO_meth_set_write, BIO_meth_get_read, BIO_meth_set_read, BIO_meth_get_puts,
9BIO_meth_set_puts, BIO_meth_get_gets, BIO_meth_set_gets, BIO_meth_get_ctrl,
10BIO_meth_set_ctrl, BIO_meth_get_create, BIO_meth_set_create,
11BIO_meth_get_destroy, BIO_meth_set_destroy, BIO_meth_get_callback_ctrl,
12BIO_meth_set_callback_ctrl, BIO_meth_set_sendmmsg, BIO_meth_get_sendmmsg,
13BIO_meth_set_recvmmsg, BIO_meth_get_recvmmsg - Routines to build up BIO methods
14
15=head1 SYNOPSIS
16
17 #include <openssl/bio.h>
18
19 int BIO_get_new_index(void);
20
21 BIO_METHOD *BIO_meth_new(int type, const char *name);
22
23 void BIO_meth_free(BIO_METHOD *biom);
24
25 int BIO_meth_set_write_ex(BIO_METHOD *biom,
26                           int (*bwrite)(BIO *, const char *, size_t, size_t *));
27 int BIO_meth_set_write(BIO_METHOD *biom,
28                        int (*write)(BIO *, const char *, int));
29
30 int BIO_meth_set_read_ex(BIO_METHOD *biom,
31                          int (*bread)(BIO *, char *, size_t, size_t *));
32 int BIO_meth_set_read(BIO_METHOD *biom, int (*read)(BIO *, char *, int));
33
34 int BIO_meth_set_puts(BIO_METHOD *biom, int (*puts)(BIO *, const char *));
35 int BIO_meth_set_gets(BIO_METHOD *biom,
36                       int (*gets)(BIO *, char *, int));
37
38 int BIO_meth_set_ctrl(BIO_METHOD *biom,
39                       long (*ctrl)(BIO *, int, long, void *));
40
41 int BIO_meth_set_create(BIO_METHOD *biom, int (*create)(BIO *));
42 int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy)(BIO *));
43
44 int BIO_meth_set_callback_ctrl(BIO_METHOD *biom,
45                                long (*callback_ctrl)(BIO *, int, BIO_info_cb *));
46
47 int BIO_meth_set_sendmmsg(BIO_METHOD *biom,
48                           ossl_ssize_t (*f) (BIO *, BIO_MSG *, size_t,
49                                              size_t, uint64_t));
50 int BIO_meth_set_recvmmsg(BIO_METHOD *biom,
51                           ossl_ssize_t (*f) (BIO *, BIO_MSG *, size_t,
52                                              size_t, uint64_t));
53
54The following functions have been deprecated since OpenSSL 3.5:
55
56 int (*BIO_meth_get_write_ex(const BIO_METHOD *biom))(BIO *, const char *, size_t,
57                                                size_t *);
58 int (*BIO_meth_get_write(const BIO_METHOD *biom))(BIO *, const char *, int);
59
60 int (*BIO_meth_get_read_ex(const BIO_METHOD *biom))(BIO *, char *, size_t, size_t *);
61 int (*BIO_meth_get_read(const BIO_METHOD *biom))(BIO *, char *, int);
62
63 int (*BIO_meth_get_puts(const BIO_METHOD *biom))(BIO *, const char *);
64 int (*BIO_meth_get_gets(const BIO_METHOD *biom))(BIO *, char *, int);
65
66 long (*BIO_meth_get_ctrl(const BIO_METHOD *biom))(BIO *, int, long, void *);
67
68 int (*BIO_meth_get_create(const BIO_METHOD *bion))(BIO *);
69 int (*BIO_meth_get_destroy(const BIO_METHOD *biom))(BIO *);
70
71 long (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom))(BIO *, int, BIO_info_cb *);
72
73 ossl_ssize_t (*BIO_meth_get_sendmmsg(const BIO_METHOD *biom))(BIO *,
74                                                               BIO_MSG *,
75                                                               size_t,
76                                                               size_t,
77                                                               uint64_t);
78 ossl_ssize_t (*BIO_meth_get_recvmmsg(const BIO_METHOD *biom))(BIO *,
79                                                               BIO_MSG *,
80                                                               size_t,
81                                                               size_t,
82                                                               uint64_t);
83
84=head1 DESCRIPTION
85
86The B<BIO_METHOD> type is a structure used for the implementation of new BIO
87types. It provides a set of functions used by OpenSSL for the implementation
88of the various BIO capabilities. See the L<bio(7)> page for more information.
89
90BIO_meth_new() creates a new B<BIO_METHOD> structure that contains a type
91identifier I<type> and a string that represents its B<name>.
92B<type> can be set to either B<BIO_TYPE_NONE> or via BIO_get_new_index() if
93a unique type is required for searching (See L<BIO_find_type(3)>)
94
95Note that BIO_get_new_index() can only be used 127 times before it returns an
96error.
97
98The set of
99standard OpenSSL provided BIO types is provided in F<< <openssl/bio.h> >>.
100Some examples include B<BIO_TYPE_BUFFER> and B<BIO_TYPE_CIPHER>. Filter BIOs
101should have a type which have the "filter" bit set (B<BIO_TYPE_FILTER>).
102Source/sink BIOs should have the "source/sink" bit set (B<BIO_TYPE_SOURCE_SINK>).
103File descriptor based BIOs (e.g. socket, fd, connect, accept etc) should
104additionally have the "descriptor" bit set (B<BIO_TYPE_DESCRIPTOR>). See the
105L<BIO_find_type(3)> page for more information.
106
107BIO_meth_free() destroys a B<BIO_METHOD> structure and frees up any memory
108associated with it. If the argument is NULL, nothing is done.
109
110BIO_meth_get_write_ex() and BIO_meth_set_write_ex() get and set the function
111used for writing arbitrary length data to the BIO respectively. This function
112will be called in response to the application calling BIO_write_ex() or
113BIO_write(). The parameters for the function have the same meaning as for
114BIO_write_ex(). Older code may call BIO_meth_get_write() and
115BIO_meth_set_write() instead. Applications should not call both
116BIO_meth_set_write_ex() and BIO_meth_set_write() or call BIO_meth_get_write()
117when the function was set with BIO_meth_set_write_ex().
118
119BIO_meth_get_read_ex() and BIO_meth_set_read_ex() get and set the function used
120for reading arbitrary length data from the BIO respectively. This function will
121be called in response to the application calling BIO_read_ex() or BIO_read().
122The parameters for the function have the same meaning as for BIO_read_ex().
123Older code may call BIO_meth_get_read() and BIO_meth_set_read() instead.
124Applications should not call both BIO_meth_set_read_ex() and BIO_meth_set_read()
125or call BIO_meth_get_read() when the function was set with
126BIO_meth_set_read_ex().
127
128BIO_meth_get_puts() and BIO_meth_set_puts() get and set the function used for
129writing a NULL terminated string to the BIO respectively. This function will be
130called in response to the application calling BIO_puts(). The parameters for
131the function have the same meaning as for BIO_puts().
132
133BIO_meth_get_gets() and BIO_meth_set_gets() get and set the function typically
134used for reading a line of data from the BIO respectively (see the L<BIO_gets(3)>
135page for more information). This function will be called in response to the
136application calling BIO_gets(). The parameters for the function have the same
137meaning as for BIO_gets().
138
139BIO_meth_get_ctrl() and BIO_meth_set_ctrl() get and set the function used for
140processing ctrl messages in the BIO respectively. See the L<BIO_ctrl(3)> page for
141more information. This function will be called in response to the application
142calling BIO_ctrl(). The parameters for the function have the same meaning as for
143BIO_ctrl().
144
145BIO_meth_get_create() and BIO_meth_set_create() get and set the function used
146for creating a new instance of the BIO respectively. This function will be
147called in response to the application calling BIO_new() and passing
148in a pointer to the current BIO_METHOD. The BIO_new() function will allocate the
149memory for the new BIO, and a pointer to this newly allocated structure will
150be passed as a parameter to the function. If a create function is set,
151BIO_new() will not mark the BIO as initialised on allocation.
152L<BIO_set_init(3)> must then be called either by the create function, or later,
153by a BIO ctrl function, once BIO initialisation is complete.
154
155BIO_meth_get_destroy() and BIO_meth_set_destroy() get and set the function used
156for destroying an instance of a BIO respectively. This function will be
157called in response to the application calling BIO_free(). A pointer to the BIO
158to be destroyed is passed as a parameter. The destroy function should be used
159for BIO specific clean up. The memory for the BIO itself should not be freed by
160this function.
161
162BIO_meth_get_callback_ctrl() and BIO_meth_set_callback_ctrl() get and set the
163function used for processing callback ctrl messages in the BIO respectively. See
164the L<BIO_callback_ctrl(3)> page for more information. This function will be called
165in response to the application calling BIO_callback_ctrl(). The parameters for
166the function have the same meaning as for BIO_callback_ctrl().
167
168BIO_meth_get_sendmmsg(), BIO_meth_set_sendmmsg(), BIO_meth_get_recvmmsg() and
169BIO_meth_set_recvmmsg() get and set the functions used for handling
170BIO_sendmmsg() and BIO_recvmmsg() calls respectively. See L<BIO_sendmmsg(3)> for
171more information.
172
173=head1 RETURN VALUES
174
175BIO_get_new_index() returns the new BIO type value or -1 if an error occurred.
176
177BIO_meth_new(int type, const char *name) returns a valid B<BIO_METHOD> or NULL
178if an error occurred.
179
180The B<BIO_meth_set> functions return 1 on success or 0 on error.
181
182The B<BIO_meth_get> functions return the corresponding function pointers.
183
184=head1 BUGS
185
186It is not safe to use C<BIO_meth_get_> functions to reuse the B<BIO>
187implementation of B<BIO>s implemented by OpenSSL itself with
188application-implemented B<BIO>s. Instead either the applications ought to
189implement these functions themselves or they should implement a filter BIO.
190
191For more details please see L<https://github.com/openssl/openssl/issues/26047>.
192
193=head1 SEE ALSO
194
195L<bio(7)>, L<BIO_find_type(3)>, L<BIO_ctrl(3)>, L<BIO_read_ex(3)>, L<BIO_new(3)>
196
197=head1 HISTORY
198
199The functions BIO_meth_get_sendmmsg(), BIO_meth_set_sendmmsg(),
200BIO_meth_get_recvmmsg() and BIO_meth_set_recvmmsg() were added in OpenSSL 3.2.
201
202All the other functions described here were added in OpenSSL 1.1.0.
203
204The functions BIO_meth_get_read_ex(), BIO_meth_get_write_ex(),
205BIO_meth_get_write(), BIO_meth_get_read(), BIO_meth_get_puts(),
206BIO_meth_get_gets(), BIO_meth_get_ctrl(), BIO_meth_get_create(),
207BIO_meth_get_destroy(), BIO_meth_get_callback_ctrl(),
208BIO_meth_get_sendmmsg() and BIO_meth_get_recvmmsg() are deprecated since
209OpenSSL 3.5.
210
211=head1 COPYRIGHT
212
213Copyright 2016-2024 The OpenSSL Project Authors. All Rights Reserved.
214
215Licensed under the Apache License 2.0 (the "License").  You may not use
216this file except in compliance with the License.  You can obtain a copy
217in the file LICENSE in the source distribution or at
218L<https://www.openssl.org/source/license.html>.
219
220=cut
221