1 1.1 christos =pod 2 1.1 christos 3 1.1 christos =head1 NAME 4 1.1 christos 5 1.1 christos BIO_ctrl, BIO_callback_ctrl, BIO_ptr_ctrl, BIO_int_ctrl, BIO_reset, 6 1.1 christos BIO_seek, BIO_tell, BIO_flush, BIO_eof, BIO_set_close, BIO_get_close, 7 1.1 christos BIO_pending, BIO_wpending, BIO_ctrl_pending, BIO_ctrl_wpending, 8 1.1 christos BIO_get_info_callback, BIO_set_info_callback, BIO_info_cb, BIO_get_ktls_send, 9 1.1 christos BIO_get_ktls_recv, BIO_set_conn_mode, BIO_get_conn_mode, BIO_set_tfo 10 1.1 christos - BIO control operations 11 1.1 christos 12 1.1 christos =head1 SYNOPSIS 13 1.1 christos 14 1.1 christos #include <openssl/bio.h> 15 1.1 christos 16 1.1 christos typedef int BIO_info_cb(BIO *b, int state, int res); 17 1.1 christos 18 1.1 christos long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); 19 1.1 christos long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *cb); 20 1.1 christos void *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); 21 1.1 christos long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); 22 1.1 christos 23 1.1 christos int BIO_reset(BIO *b); 24 1.1 christos int BIO_seek(BIO *b, int ofs); 25 1.1 christos int BIO_tell(BIO *b); 26 1.1 christos int BIO_flush(BIO *b); 27 1.1 christos int BIO_eof(BIO *b); 28 1.1 christos int BIO_set_close(BIO *b, long flag); 29 1.1 christos int BIO_get_close(BIO *b); 30 1.1 christos int BIO_pending(BIO *b); 31 1.1 christos int BIO_wpending(BIO *b); 32 1.1 christos size_t BIO_ctrl_pending(BIO *b); 33 1.1 christos size_t BIO_ctrl_wpending(BIO *b); 34 1.1 christos 35 1.1 christos int BIO_get_info_callback(BIO *b, BIO_info_cb **cbp); 36 1.1 christos int BIO_set_info_callback(BIO *b, BIO_info_cb *cb); 37 1.1 christos 38 1.1 christos int BIO_get_ktls_send(BIO *b); 39 1.1 christos int BIO_get_ktls_recv(BIO *b); 40 1.1 christos 41 1.1 christos int BIO_set_conn_mode(BIO *b, int mode); 42 1.1 christos int BIO_get_conn_mode(BIO *b); 43 1.1 christos 44 1.1 christos int BIO_set_tfo(BIO *b, int onoff); 45 1.1 christos 46 1.1 christos =head1 DESCRIPTION 47 1.1 christos 48 1.1 christos BIO_ctrl(), BIO_callback_ctrl(), BIO_ptr_ctrl() and BIO_int_ctrl() 49 1.1 christos are BIO "control" operations taking arguments of various types. 50 1.1 christos These functions are not normally called directly, various macros 51 1.1 christos are used instead. The standard macros are described below, macros 52 1.1 christos specific to a particular type of BIO are described in the specific 53 1.1 christos BIOs manual page as well as any special features of the standard 54 1.1 christos calls. 55 1.1 christos 56 1.1 christos BIO_reset() typically resets a BIO to some initial state, in the case 57 1.1 christos of file related BIOs for example it rewinds the file pointer to the 58 1.1 christos start of the file. 59 1.1 christos 60 1.1 christos BIO_seek() resets a file related BIO's (that is file descriptor and 61 1.1 christos FILE BIOs) file position pointer to B<ofs> bytes from start of file. 62 1.1 christos 63 1.1 christos BIO_tell() returns the current file position of a file related BIO. 64 1.1 christos 65 1.1 christos BIO_flush() normally writes out any internally buffered data, in some 66 1.1 christos cases it is used to signal EOF and that no more data will be written. 67 1.1 christos 68 1.1 christos BIO_eof() returns 1 if the BIO has read EOF, the precise meaning of 69 1.1 christos "EOF" varies according to the BIO type. 70 1.1 christos 71 1.1 christos BIO_set_close() sets the BIO B<b> close flag to B<flag>. B<flag> can 72 1.1 christos take the value BIO_CLOSE or BIO_NOCLOSE. Typically BIO_CLOSE is used 73 1.1 christos in a source/sink BIO to indicate that the underlying I/O stream should 74 1.1 christos be closed when the BIO is freed. 75 1.1 christos 76 1.1 christos BIO_get_close() returns the BIOs close flag. 77 1.1 christos 78 1.1 christos BIO_pending(), BIO_ctrl_pending(), BIO_wpending() and BIO_ctrl_wpending() 79 1.1 christos return the number of pending characters in the BIOs read and write buffers. 80 1.1 christos Not all BIOs support these calls. BIO_ctrl_pending() and BIO_ctrl_wpending() 81 1.1 christos return a size_t type and are functions, BIO_pending() and BIO_wpending() are 82 1.1 christos macros which call BIO_ctrl(). 83 1.1 christos 84 1.1 christos BIO_get_ktls_send() returns 1 if the BIO is using the Kernel TLS data-path for 85 1.1 christos sending. Otherwise, it returns zero. 86 1.1 christos BIO_get_ktls_recv() returns 1 if the BIO is using the Kernel TLS data-path for 87 1.1 christos receiving. Otherwise, it returns zero. 88 1.1 christos 89 1.1 christos BIO_get_conn_mode() returns the BIO connection mode. BIO_set_conn_mode() sets 90 1.1 christos the BIO connection mode. 91 1.1 christos 92 1.1 christos BIO_set_tfo() disables TCP Fast Open when B<onoff> is 0, and enables TCP Fast 93 1.1 christos Open when B<onoff> is nonzero. Setting the value to 1 is equivalent to setting 94 1.1 christos B<BIO_SOCK_TFO> in BIO_set_conn_mode(). 95 1.1 christos 96 1.1 christos =head1 RETURN VALUES 97 1.1 christos 98 1.1 christos BIO_reset() normally returns 1 for success and <=0 for failure. File 99 1.1 christos BIOs are an exception, they return 0 for success and -1 for failure. 100 1.1 christos 101 1.1 christos BIO_seek() and BIO_tell() both return the current file position on success 102 1.1 christos and -1 for failure, except file BIOs which for BIO_seek() always return 0 103 1.1 christos for success and -1 for failure. 104 1.1 christos 105 1.1 christos BIO_flush() returns 1 for success and <=0 for failure. 106 1.1 christos 107 1.1 christos BIO_eof() returns 1 if EOF has been reached, 0 if not, or negative values for failure. 108 1.1 christos 109 1.1 christos BIO_set_close() returns 1 on success or <=0 for failure. 110 1.1 christos 111 1.1 christos BIO_get_close() returns the close flag value: BIO_CLOSE or BIO_NOCLOSE. It also 112 1.1 christos returns other negative values if an error occurs. 113 1.1 christos 114 1.1 christos BIO_pending(), BIO_ctrl_pending(), BIO_wpending() and BIO_ctrl_wpending() 115 1.1 christos return the amount of pending data. BIO_pending() and BIO_wpending() return 116 1.1 christos negative value or 0 on error. BIO_ctrl_pending() and BIO_ctrl_wpending() return 117 1.1 christos 0 on error. 118 1.1 christos 119 1.1 christos BIO_get_ktls_send() returns 1 if the BIO is using the Kernel TLS data-path for 120 1.1 christos sending. Otherwise, it returns zero. 121 1.1 christos BIO_get_ktls_recv() returns 1 if the BIO is using the Kernel TLS data-path for 122 1.1 christos receiving. Otherwise, it returns zero. 123 1.1 christos 124 1.1 christos BIO_set_conn_mode() returns 1 for success and 0 for failure. BIO_get_conn_mode() 125 1.1 christos returns the current connection mode. Which may contain the bitwise-or of the 126 1.1 christos following flags: 127 1.1 christos 128 1.1 christos BIO_SOCK_REUSEADDR 129 1.1 christos BIO_SOCK_V6_ONLY 130 1.1 christos BIO_SOCK_KEEPALIVE 131 1.1 christos BIO_SOCK_NONBLOCK 132 1.1 christos BIO_SOCK_NODELAY 133 1.1 christos BIO_SOCK_TFO 134 1.1 christos 135 1.1 christos BIO_set_tfo() returns 1 for success, and 0 for failure. 136 1.1 christos 137 1.1 christos =head1 NOTES 138 1.1 christos 139 1.1 christos BIO_flush(), because it can write data may return 0 or -1 indicating 140 1.1 christos that the call should be retried later in a similar manner to BIO_write_ex(). 141 1.1 christos The BIO_should_retry() call should be used and appropriate action taken 142 1.1 christos is the call fails. 143 1.1 christos 144 1.1 christos The return values of BIO_pending() and BIO_wpending() may not reliably 145 1.1 christos determine the amount of pending data in all cases. For example in the 146 1.1 christos case of a file BIO some data may be available in the FILE structures 147 1.1 christos internal buffers but it is not possible to determine this in a 148 1.1 christos portably way. For other types of BIO they may not be supported. 149 1.1 christos 150 1.1 christos Filter BIOs if they do not internally handle a particular BIO_ctrl() 151 1.1 christos operation usually pass the operation to the next BIO in the chain. 152 1.1 christos This often means there is no need to locate the required BIO for 153 1.1 christos a particular operation, it can be called on a chain and it will 154 1.1 christos be automatically passed to the relevant BIO. However, this can cause 155 1.1 christos unexpected results: for example no current filter BIOs implement 156 1.1 christos BIO_seek(), but this may still succeed if the chain ends in a FILE 157 1.1 christos or file descriptor BIO. 158 1.1 christos 159 1.1 christos Source/sink BIOs return an 0 if they do not recognize the BIO_ctrl() 160 1.1 christos operation. 161 1.1 christos 162 1.1 christos =head1 BUGS 163 1.1 christos 164 1.1 christos Some of the return values are ambiguous and care should be taken. In 165 1.1 christos particular a return value of 0 can be returned if an operation is not 166 1.1 christos supported, if an error occurred, if EOF has not been reached and in 167 1.1 christos the case of BIO_seek() on a file BIO for a successful operation. 168 1.1 christos 169 1.1 christos In older versions of OpenSSL the BIO_ctrl_pending() and 170 1.1 christos BIO_ctrl_wpending() could return values greater than INT_MAX on error. 171 1.1 christos 172 1.1 christos =head1 HISTORY 173 1.1 christos 174 1.1 christos The BIO_get_ktls_send() and BIO_get_ktls_recv() macros were added in 175 1.1 christos OpenSSL 3.0. They were modified to never return -1 in OpenSSL 3.0.4. 176 1.1 christos 177 1.1 christos The BIO_get_conn_mode(), BIO_set_conn_mode() and BIO_set_tfo() functions 178 1.1 christos were added in OpenSSL 3.2. 179 1.1 christos 180 1.1 christos =head1 COPYRIGHT 181 1.1 christos 182 1.1 christos Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. 183 1.1 christos 184 1.1 christos Licensed under the Apache License 2.0 (the "License"). You may not use 185 1.1 christos this file except in compliance with the License. You can obtain a copy 186 1.1 christos in the file LICENSE in the source distribution or at 187 1.1 christos L<https://www.openssl.org/source/license.html>. 188 1.1 christos 189 1.1 christos =cut 190