1e71b7053SJung-uk Kim=pod 2e71b7053SJung-uk Kim 3e71b7053SJung-uk Kim=head1 NAME 4e71b7053SJung-uk Kim 5e71b7053SJung-uk KimBIO_get_new_index, 6e71b7053SJung-uk KimBIO_meth_new, BIO_meth_free, BIO_meth_get_read_ex, BIO_meth_set_read_ex, 7e71b7053SJung-uk KimBIO_meth_get_write_ex, BIO_meth_set_write_ex, BIO_meth_get_write, 8e71b7053SJung-uk KimBIO_meth_set_write, BIO_meth_get_read, BIO_meth_set_read, BIO_meth_get_puts, 9e71b7053SJung-uk KimBIO_meth_set_puts, BIO_meth_get_gets, BIO_meth_set_gets, BIO_meth_get_ctrl, 10e71b7053SJung-uk KimBIO_meth_set_ctrl, BIO_meth_get_create, BIO_meth_set_create, 11e71b7053SJung-uk KimBIO_meth_get_destroy, BIO_meth_set_destroy, BIO_meth_get_callback_ctrl, 12e71b7053SJung-uk KimBIO_meth_set_callback_ctrl - Routines to build up BIO methods 13e71b7053SJung-uk Kim 14e71b7053SJung-uk Kim=head1 SYNOPSIS 15e71b7053SJung-uk Kim 16e71b7053SJung-uk Kim #include <openssl/bio.h> 17e71b7053SJung-uk Kim 18e71b7053SJung-uk Kim int BIO_get_new_index(void); 19e71b7053SJung-uk Kim 20e71b7053SJung-uk Kim BIO_METHOD *BIO_meth_new(int type, const char *name); 21e71b7053SJung-uk Kim 22e71b7053SJung-uk Kim void BIO_meth_free(BIO_METHOD *biom); 23e71b7053SJung-uk Kim 24e71b7053SJung-uk Kim int (*BIO_meth_get_write_ex(const BIO_METHOD *biom))(BIO *, const char *, size_t, 25e71b7053SJung-uk Kim size_t *); 26e71b7053SJung-uk Kim int (*BIO_meth_get_write(const BIO_METHOD *biom))(BIO *, const char *, int); 27e71b7053SJung-uk Kim int BIO_meth_set_write_ex(BIO_METHOD *biom, 28e71b7053SJung-uk Kim int (*bwrite)(BIO *, const char *, size_t, size_t *)); 29e71b7053SJung-uk Kim int BIO_meth_set_write(BIO_METHOD *biom, 30e71b7053SJung-uk Kim int (*write)(BIO *, const char *, int)); 31e71b7053SJung-uk Kim 32e71b7053SJung-uk Kim int (*BIO_meth_get_read_ex(const BIO_METHOD *biom))(BIO *, char *, size_t, size_t *); 33e71b7053SJung-uk Kim int (*BIO_meth_get_read(const BIO_METHOD *biom))(BIO *, char *, int); 34e71b7053SJung-uk Kim int BIO_meth_set_read_ex(BIO_METHOD *biom, 35e71b7053SJung-uk Kim int (*bread)(BIO *, char *, size_t, size_t *)); 36e71b7053SJung-uk Kim int BIO_meth_set_read(BIO_METHOD *biom, int (*read)(BIO *, char *, int)); 37e71b7053SJung-uk Kim 38e71b7053SJung-uk Kim int (*BIO_meth_get_puts(const BIO_METHOD *biom))(BIO *, const char *); 39e71b7053SJung-uk Kim int BIO_meth_set_puts(BIO_METHOD *biom, int (*puts)(BIO *, const char *)); 40e71b7053SJung-uk Kim 41e71b7053SJung-uk Kim int (*BIO_meth_get_gets(const BIO_METHOD *biom))(BIO *, char *, int); 42e71b7053SJung-uk Kim int BIO_meth_set_gets(BIO_METHOD *biom, 43e71b7053SJung-uk Kim int (*gets)(BIO *, char *, int)); 44e71b7053SJung-uk Kim 45e71b7053SJung-uk Kim long (*BIO_meth_get_ctrl(const BIO_METHOD *biom))(BIO *, int, long, void *); 46e71b7053SJung-uk Kim int BIO_meth_set_ctrl(BIO_METHOD *biom, 47e71b7053SJung-uk Kim long (*ctrl)(BIO *, int, long, void *)); 48e71b7053SJung-uk Kim 49e71b7053SJung-uk Kim int (*BIO_meth_get_create(const BIO_METHOD *bion))(BIO *); 50e71b7053SJung-uk Kim int BIO_meth_set_create(BIO_METHOD *biom, int (*create)(BIO *)); 51e71b7053SJung-uk Kim 52e71b7053SJung-uk Kim int (*BIO_meth_get_destroy(const BIO_METHOD *biom))(BIO *); 53e71b7053SJung-uk Kim int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy)(BIO *)); 54e71b7053SJung-uk Kim 55e71b7053SJung-uk Kim long (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom))(BIO *, int, BIO_info_cb *); 56e71b7053SJung-uk Kim int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, 57e71b7053SJung-uk Kim long (*callback_ctrl)(BIO *, int, BIO_info_cb *)); 58e71b7053SJung-uk Kim 59e71b7053SJung-uk Kim=head1 DESCRIPTION 60e71b7053SJung-uk Kim 61e71b7053SJung-uk KimThe B<BIO_METHOD> type is a structure used for the implementation of new BIO 62e71b7053SJung-uk Kimtypes. It provides a set of functions used by OpenSSL for the implementation 63b077aed3SPierre Proncheryof the various BIO capabilities. See the L<bio(7)> page for more information. 64e71b7053SJung-uk Kim 65e71b7053SJung-uk KimBIO_meth_new() creates a new B<BIO_METHOD> structure. It should be given a 66e71b7053SJung-uk Kimunique integer B<type> and a string that represents its B<name>. 67e71b7053SJung-uk KimUse BIO_get_new_index() to get the value for B<type>. 68e71b7053SJung-uk Kim 69e71b7053SJung-uk KimThe set of 70b077aed3SPierre Proncherystandard OpenSSL provided BIO types is provided in F<< <openssl/bio.h> >>. 71b077aed3SPierre ProncherySome examples include B<BIO_TYPE_BUFFER> and B<BIO_TYPE_CIPHER>. Filter BIOs 72b077aed3SPierre Proncheryshould have a type which have the "filter" bit set (B<BIO_TYPE_FILTER>). 73b077aed3SPierre ProncherySource/sink BIOs should have the "source/sink" bit set (B<BIO_TYPE_SOURCE_SINK>). 74b077aed3SPierre ProncheryFile descriptor based BIOs (e.g. socket, fd, connect, accept etc) should 75b077aed3SPierre Proncheryadditionally have the "descriptor" bit set (B<BIO_TYPE_DESCRIPTOR>). See the 76b077aed3SPierre ProncheryL<BIO_find_type(3)> page for more information. 77e71b7053SJung-uk Kim 78e71b7053SJung-uk KimBIO_meth_free() destroys a B<BIO_METHOD> structure and frees up any memory 79*a7148ab3SEnji Cooperassociated with it. If the argument is NULL, nothing is done. 80e71b7053SJung-uk Kim 81e71b7053SJung-uk KimBIO_meth_get_write_ex() and BIO_meth_set_write_ex() get and set the function 82e71b7053SJung-uk Kimused for writing arbitrary length data to the BIO respectively. This function 83e71b7053SJung-uk Kimwill be called in response to the application calling BIO_write_ex() or 84e71b7053SJung-uk KimBIO_write(). The parameters for the function have the same meaning as for 85e71b7053SJung-uk KimBIO_write_ex(). Older code may call BIO_meth_get_write() and 86e71b7053SJung-uk KimBIO_meth_set_write() instead. Applications should not call both 87e71b7053SJung-uk KimBIO_meth_set_write_ex() and BIO_meth_set_write() or call BIO_meth_get_write() 88e71b7053SJung-uk Kimwhen the function was set with BIO_meth_set_write_ex(). 89e71b7053SJung-uk Kim 90e71b7053SJung-uk KimBIO_meth_get_read_ex() and BIO_meth_set_read_ex() get and set the function used 91e71b7053SJung-uk Kimfor reading arbitrary length data from the BIO respectively. This function will 92e71b7053SJung-uk Kimbe called in response to the application calling BIO_read_ex() or BIO_read(). 93e71b7053SJung-uk KimThe parameters for the function have the same meaning as for BIO_read_ex(). 94e71b7053SJung-uk KimOlder code may call BIO_meth_get_read() and BIO_meth_set_read() instead. 95e71b7053SJung-uk KimApplications should not call both BIO_meth_set_read_ex() and BIO_meth_set_read() 96e71b7053SJung-uk Kimor call BIO_meth_get_read() when the function was set with 97e71b7053SJung-uk KimBIO_meth_set_read_ex(). 98e71b7053SJung-uk Kim 99e71b7053SJung-uk KimBIO_meth_get_puts() and BIO_meth_set_puts() get and set the function used for 100e71b7053SJung-uk Kimwriting a NULL terminated string to the BIO respectively. This function will be 101e71b7053SJung-uk Kimcalled in response to the application calling BIO_puts(). The parameters for 102e71b7053SJung-uk Kimthe function have the same meaning as for BIO_puts(). 103e71b7053SJung-uk Kim 104e71b7053SJung-uk KimBIO_meth_get_gets() and BIO_meth_set_gets() get and set the function typically 105e71b7053SJung-uk Kimused for reading a line of data from the BIO respectively (see the L<BIO_gets(3)> 106e71b7053SJung-uk Kimpage for more information). This function will be called in response to the 107e71b7053SJung-uk Kimapplication calling BIO_gets(). The parameters for the function have the same 108e71b7053SJung-uk Kimmeaning as for BIO_gets(). 109e71b7053SJung-uk Kim 110e71b7053SJung-uk KimBIO_meth_get_ctrl() and BIO_meth_set_ctrl() get and set the function used for 111b077aed3SPierre Proncheryprocessing ctrl messages in the BIO respectively. See the L<BIO_ctrl(3)> page for 112e71b7053SJung-uk Kimmore information. This function will be called in response to the application 113e71b7053SJung-uk Kimcalling BIO_ctrl(). The parameters for the function have the same meaning as for 114e71b7053SJung-uk KimBIO_ctrl(). 115e71b7053SJung-uk Kim 116e71b7053SJung-uk KimBIO_meth_get_create() and BIO_meth_set_create() get and set the function used 117e71b7053SJung-uk Kimfor creating a new instance of the BIO respectively. This function will be 118e71b7053SJung-uk Kimcalled in response to the application calling BIO_new() and passing 119e71b7053SJung-uk Kimin a pointer to the current BIO_METHOD. The BIO_new() function will allocate the 120e71b7053SJung-uk Kimmemory for the new BIO, and a pointer to this newly allocated structure will 121b077aed3SPierre Proncherybe passed as a parameter to the function. If a create function is set, 122b077aed3SPierre ProncheryBIO_new() will not mark the BIO as initialised on allocation. 123b077aed3SPierre ProncheryL<BIO_set_init(3)> must then be called either by the create function, or later, 124b077aed3SPierre Proncheryby a BIO ctrl function, once BIO initialisation is complete. 125e71b7053SJung-uk Kim 126e71b7053SJung-uk KimBIO_meth_get_destroy() and BIO_meth_set_destroy() get and set the function used 127e71b7053SJung-uk Kimfor destroying an instance of a BIO respectively. This function will be 128e71b7053SJung-uk Kimcalled in response to the application calling BIO_free(). A pointer to the BIO 129e71b7053SJung-uk Kimto be destroyed is passed as a parameter. The destroy function should be used 130e71b7053SJung-uk Kimfor BIO specific clean up. The memory for the BIO itself should not be freed by 131e71b7053SJung-uk Kimthis function. 132e71b7053SJung-uk Kim 133e71b7053SJung-uk KimBIO_meth_get_callback_ctrl() and BIO_meth_set_callback_ctrl() get and set the 134e71b7053SJung-uk Kimfunction used for processing callback ctrl messages in the BIO respectively. See 135e71b7053SJung-uk Kimthe L<BIO_callback_ctrl(3)> page for more information. This function will be called 136e71b7053SJung-uk Kimin response to the application calling BIO_callback_ctrl(). The parameters for 137e71b7053SJung-uk Kimthe function have the same meaning as for BIO_callback_ctrl(). 138e71b7053SJung-uk Kim 139e71b7053SJung-uk Kim=head1 RETURN VALUES 140e71b7053SJung-uk Kim 141e71b7053SJung-uk KimBIO_get_new_index() returns the new BIO type value or -1 if an error occurred. 142e71b7053SJung-uk Kim 143e71b7053SJung-uk KimBIO_meth_new(int type, const char *name) returns a valid B<BIO_METHOD> or NULL 144e71b7053SJung-uk Kimif an error occurred. 145e71b7053SJung-uk Kim 146e71b7053SJung-uk KimThe B<BIO_meth_set> functions return 1 on success or 0 on error. 147e71b7053SJung-uk Kim 148e71b7053SJung-uk KimThe B<BIO_meth_get> functions return the corresponding function pointers. 149e71b7053SJung-uk Kim 150e71b7053SJung-uk Kim=head1 SEE ALSO 151e71b7053SJung-uk Kim 152b077aed3SPierre ProncheryL<bio(7)>, L<BIO_find_type(3)>, L<BIO_ctrl(3)>, L<BIO_read_ex(3)>, L<BIO_new(3)> 153e71b7053SJung-uk Kim 154e71b7053SJung-uk Kim=head1 HISTORY 155e71b7053SJung-uk Kim 156e71b7053SJung-uk KimThe functions described here were added in OpenSSL 1.1.0. 157e71b7053SJung-uk Kim 158e71b7053SJung-uk Kim=head1 COPYRIGHT 159e71b7053SJung-uk Kim 160*a7148ab3SEnji CooperCopyright 2016-2024 The OpenSSL Project Authors. All Rights Reserved. 161e71b7053SJung-uk Kim 162b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License"). You may not use 163e71b7053SJung-uk Kimthis file except in compliance with the License. You can obtain a copy 164e71b7053SJung-uk Kimin the file LICENSE in the source distribution or at 165e71b7053SJung-uk KimL<https://www.openssl.org/source/license.html>. 166e71b7053SJung-uk Kim 167e71b7053SJung-uk Kim=cut 168