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