1*e71b7053SJung-uk Kim=pod 2*e71b7053SJung-uk Kim 3*e71b7053SJung-uk Kim=head1 NAME 4*e71b7053SJung-uk Kim 5*e71b7053SJung-uk KimBIO_s_bio, BIO_make_bio_pair, BIO_destroy_bio_pair, BIO_shutdown_wr, 6*e71b7053SJung-uk KimBIO_set_write_buf_size, BIO_get_write_buf_size, BIO_new_bio_pair, 7*e71b7053SJung-uk KimBIO_get_write_guarantee, BIO_ctrl_get_write_guarantee, BIO_get_read_request, 8*e71b7053SJung-uk KimBIO_ctrl_get_read_request, BIO_ctrl_reset_read_request - BIO pair BIO 9*e71b7053SJung-uk Kim 10*e71b7053SJung-uk Kim=head1 SYNOPSIS 11*e71b7053SJung-uk Kim 12*e71b7053SJung-uk Kim #include <openssl/bio.h> 13*e71b7053SJung-uk Kim 14*e71b7053SJung-uk Kim const BIO_METHOD *BIO_s_bio(void); 15*e71b7053SJung-uk Kim 16*e71b7053SJung-uk Kim int BIO_make_bio_pair(BIO *b1, BIO *b2); 17*e71b7053SJung-uk Kim int BIO_destroy_bio_pair(BIO *b); 18*e71b7053SJung-uk Kim int BIO_shutdown_wr(BIO *b); 19*e71b7053SJung-uk Kim 20*e71b7053SJung-uk Kim int BIO_set_write_buf_size(BIO *b, long size); 21*e71b7053SJung-uk Kim size_t BIO_get_write_buf_size(BIO *b, long size); 22*e71b7053SJung-uk Kim 23*e71b7053SJung-uk Kim int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, BIO **bio2, size_t writebuf2); 24*e71b7053SJung-uk Kim 25*e71b7053SJung-uk Kim int BIO_get_write_guarantee(BIO *b); 26*e71b7053SJung-uk Kim size_t BIO_ctrl_get_write_guarantee(BIO *b); 27*e71b7053SJung-uk Kim int BIO_get_read_request(BIO *b); 28*e71b7053SJung-uk Kim size_t BIO_ctrl_get_read_request(BIO *b); 29*e71b7053SJung-uk Kim int BIO_ctrl_reset_read_request(BIO *b); 30*e71b7053SJung-uk Kim 31*e71b7053SJung-uk Kim=head1 DESCRIPTION 32*e71b7053SJung-uk Kim 33*e71b7053SJung-uk KimBIO_s_bio() returns the method for a BIO pair. A BIO pair is a pair of source/sink 34*e71b7053SJung-uk KimBIOs where data written to either half of the pair is buffered and can be read from 35*e71b7053SJung-uk Kimthe other half. Both halves must usually by handled by the same application thread 36*e71b7053SJung-uk Kimsince no locking is done on the internal data structures. 37*e71b7053SJung-uk Kim 38*e71b7053SJung-uk KimSince BIO chains typically end in a source/sink BIO it is possible to make this 39*e71b7053SJung-uk Kimone half of a BIO pair and have all the data processed by the chain under application 40*e71b7053SJung-uk Kimcontrol. 41*e71b7053SJung-uk Kim 42*e71b7053SJung-uk KimOne typical use of BIO pairs is to place TLS/SSL I/O under application control, this 43*e71b7053SJung-uk Kimcan be used when the application wishes to use a non standard transport for 44*e71b7053SJung-uk KimTLS/SSL or the normal socket routines are inappropriate. 45*e71b7053SJung-uk Kim 46*e71b7053SJung-uk KimCalls to BIO_read_ex() will read data from the buffer or request a retry if no 47*e71b7053SJung-uk Kimdata is available. 48*e71b7053SJung-uk Kim 49*e71b7053SJung-uk KimCalls to BIO_write_ex() will place data in the buffer or request a retry if the 50*e71b7053SJung-uk Kimbuffer is full. 51*e71b7053SJung-uk Kim 52*e71b7053SJung-uk KimThe standard calls BIO_ctrl_pending() and BIO_ctrl_wpending() can be used to 53*e71b7053SJung-uk Kimdetermine the amount of pending data in the read or write buffer. 54*e71b7053SJung-uk Kim 55*e71b7053SJung-uk KimBIO_reset() clears any data in the write buffer. 56*e71b7053SJung-uk Kim 57*e71b7053SJung-uk KimBIO_make_bio_pair() joins two separate BIOs into a connected pair. 58*e71b7053SJung-uk Kim 59*e71b7053SJung-uk KimBIO_destroy_pair() destroys the association between two connected BIOs. Freeing 60*e71b7053SJung-uk Kimup any half of the pair will automatically destroy the association. 61*e71b7053SJung-uk Kim 62*e71b7053SJung-uk KimBIO_shutdown_wr() is used to close down a BIO B<b>. After this call no further 63*e71b7053SJung-uk Kimwrites on BIO B<b> are allowed (they will return an error). Reads on the other 64*e71b7053SJung-uk Kimhalf of the pair will return any pending data or EOF when all pending data has 65*e71b7053SJung-uk Kimbeen read. 66*e71b7053SJung-uk Kim 67*e71b7053SJung-uk KimBIO_set_write_buf_size() sets the write buffer size of BIO B<b> to B<size>. 68*e71b7053SJung-uk KimIf the size is not initialized a default value is used. This is currently 69*e71b7053SJung-uk Kim17K, sufficient for a maximum size TLS record. 70*e71b7053SJung-uk Kim 71*e71b7053SJung-uk KimBIO_get_write_buf_size() returns the size of the write buffer. 72*e71b7053SJung-uk Kim 73*e71b7053SJung-uk KimBIO_new_bio_pair() combines the calls to BIO_new(), BIO_make_bio_pair() and 74*e71b7053SJung-uk KimBIO_set_write_buf_size() to create a connected pair of BIOs B<bio1>, B<bio2> 75*e71b7053SJung-uk Kimwith write buffer sizes B<writebuf1> and B<writebuf2>. If either size is 76*e71b7053SJung-uk Kimzero then the default size is used. BIO_new_bio_pair() does not check whether 77*e71b7053SJung-uk KimB<bio1> or B<bio2> do point to some other BIO, the values are overwritten, 78*e71b7053SJung-uk KimBIO_free() is not called. 79*e71b7053SJung-uk Kim 80*e71b7053SJung-uk KimBIO_get_write_guarantee() and BIO_ctrl_get_write_guarantee() return the maximum 81*e71b7053SJung-uk Kimlength of data that can be currently written to the BIO. Writes larger than this 82*e71b7053SJung-uk Kimvalue will return a value from BIO_write_ex() less than the amount requested or 83*e71b7053SJung-uk Kimif the buffer is full request a retry. BIO_ctrl_get_write_guarantee() is a 84*e71b7053SJung-uk Kimfunction whereas BIO_get_write_guarantee() is a macro. 85*e71b7053SJung-uk Kim 86*e71b7053SJung-uk KimBIO_get_read_request() and BIO_ctrl_get_read_request() return the 87*e71b7053SJung-uk Kimamount of data requested, or the buffer size if it is less, if the 88*e71b7053SJung-uk Kimlast read attempt at the other half of the BIO pair failed due to an 89*e71b7053SJung-uk Kimempty buffer. This can be used to determine how much data should be 90*e71b7053SJung-uk Kimwritten to the BIO so the next read will succeed: this is most useful 91*e71b7053SJung-uk Kimin TLS/SSL applications where the amount of data read is usually 92*e71b7053SJung-uk Kimmeaningful rather than just a buffer size. After a successful read 93*e71b7053SJung-uk Kimthis call will return zero. It also will return zero once new data 94*e71b7053SJung-uk Kimhas been written satisfying the read request or part of it. 95*e71b7053SJung-uk KimNote that BIO_get_read_request() never returns an amount larger 96*e71b7053SJung-uk Kimthan that returned by BIO_get_write_guarantee(). 97*e71b7053SJung-uk Kim 98*e71b7053SJung-uk KimBIO_ctrl_reset_read_request() can also be used to reset the value returned by 99*e71b7053SJung-uk KimBIO_get_read_request() to zero. 100*e71b7053SJung-uk Kim 101*e71b7053SJung-uk Kim=head1 NOTES 102*e71b7053SJung-uk Kim 103*e71b7053SJung-uk KimBoth halves of a BIO pair should be freed. That is even if one half is implicit 104*e71b7053SJung-uk Kimfreed due to a BIO_free_all() or SSL_free() call the other half needs to be freed. 105*e71b7053SJung-uk Kim 106*e71b7053SJung-uk KimWhen used in bidirectional applications (such as TLS/SSL) care should be taken to 107*e71b7053SJung-uk Kimflush any data in the write buffer. This can be done by calling BIO_pending() 108*e71b7053SJung-uk Kimon the other half of the pair and, if any data is pending, reading it and sending 109*e71b7053SJung-uk Kimit to the underlying transport. This must be done before any normal processing 110*e71b7053SJung-uk Kim(such as calling select() ) due to a request and BIO_should_read() being true. 111*e71b7053SJung-uk Kim 112*e71b7053SJung-uk KimTo see why this is important consider a case where a request is sent using 113*e71b7053SJung-uk KimBIO_write_ex() and a response read with BIO_read_ex(), this can occur during an 114*e71b7053SJung-uk KimTLS/SSL handshake for example. BIO_write_ex() will succeed and place data in the 115*e71b7053SJung-uk Kimwrite buffer. BIO_read_ex() will initially fail and BIO_should_read() will be 116*e71b7053SJung-uk Kimtrue. If the application then waits for data to be available on the underlying 117*e71b7053SJung-uk Kimtransport before flushing the write buffer it will never succeed because the 118*e71b7053SJung-uk Kimrequest was never sent! 119*e71b7053SJung-uk Kim 120*e71b7053SJung-uk KimBIO_eof() is true if no data is in the peer BIO and the peer BIO has been 121*e71b7053SJung-uk Kimshutdown. 122*e71b7053SJung-uk Kim 123*e71b7053SJung-uk KimBIO_make_bio_pair(), BIO_destroy_bio_pair(), BIO_shutdown_wr(), 124*e71b7053SJung-uk KimBIO_set_write_buf_size(), BIO_get_write_buf_size(), 125*e71b7053SJung-uk KimBIO_get_write_guarantee(), and BIO_get_read_request() are implemented 126*e71b7053SJung-uk Kimas macros. 127*e71b7053SJung-uk Kim 128*e71b7053SJung-uk Kim=head1 RETURN VALUES 129*e71b7053SJung-uk Kim 130*e71b7053SJung-uk KimBIO_new_bio_pair() returns 1 on success, with the new BIOs available in 131*e71b7053SJung-uk KimB<bio1> and B<bio2>, or 0 on failure, with NULL pointers stored into the 132*e71b7053SJung-uk Kimlocations for B<bio1> and B<bio2>. Check the error stack for more information. 133*e71b7053SJung-uk Kim 134*e71b7053SJung-uk Kim[XXXXX: More return values need to be added here] 135*e71b7053SJung-uk Kim 136*e71b7053SJung-uk Kim=head1 EXAMPLE 137*e71b7053SJung-uk Kim 138*e71b7053SJung-uk KimThe BIO pair can be used to have full control over the network access of an 139*e71b7053SJung-uk Kimapplication. The application can call select() on the socket as required 140*e71b7053SJung-uk Kimwithout having to go through the SSL-interface. 141*e71b7053SJung-uk Kim 142*e71b7053SJung-uk Kim BIO *internal_bio, *network_bio; 143*e71b7053SJung-uk Kim 144*e71b7053SJung-uk Kim ... 145*e71b7053SJung-uk Kim BIO_new_bio_pair(&internal_bio, 0, &network_bio, 0); 146*e71b7053SJung-uk Kim SSL_set_bio(ssl, internal_bio, internal_bio); 147*e71b7053SJung-uk Kim SSL_operations(); /* e.g SSL_read and SSL_write */ 148*e71b7053SJung-uk Kim ... 149*e71b7053SJung-uk Kim 150*e71b7053SJung-uk Kim application | TLS-engine 151*e71b7053SJung-uk Kim | | 152*e71b7053SJung-uk Kim +----------> SSL_operations() 153*e71b7053SJung-uk Kim | /\ || 154*e71b7053SJung-uk Kim | || \/ 155*e71b7053SJung-uk Kim | BIO-pair (internal_bio) 156*e71b7053SJung-uk Kim | BIO-pair (network_bio) 157*e71b7053SJung-uk Kim | || /\ 158*e71b7053SJung-uk Kim | \/ || 159*e71b7053SJung-uk Kim +-----------< BIO_operations() 160*e71b7053SJung-uk Kim | | 161*e71b7053SJung-uk Kim | | 162*e71b7053SJung-uk Kim socket 163*e71b7053SJung-uk Kim 164*e71b7053SJung-uk Kim ... 165*e71b7053SJung-uk Kim SSL_free(ssl); /* implicitly frees internal_bio */ 166*e71b7053SJung-uk Kim BIO_free(network_bio); 167*e71b7053SJung-uk Kim ... 168*e71b7053SJung-uk Kim 169*e71b7053SJung-uk KimAs the BIO pair will only buffer the data and never directly access the 170*e71b7053SJung-uk Kimconnection, it behaves non-blocking and will return as soon as the write 171*e71b7053SJung-uk Kimbuffer is full or the read buffer is drained. Then the application has to 172*e71b7053SJung-uk Kimflush the write buffer and/or fill the read buffer. 173*e71b7053SJung-uk Kim 174*e71b7053SJung-uk KimUse the BIO_ctrl_pending(), to find out whether data is buffered in the BIO 175*e71b7053SJung-uk Kimand must be transferred to the network. Use BIO_ctrl_get_read_request() to 176*e71b7053SJung-uk Kimfind out, how many bytes must be written into the buffer before the 177*e71b7053SJung-uk KimSSL_operation() can successfully be continued. 178*e71b7053SJung-uk Kim 179*e71b7053SJung-uk Kim=head1 WARNING 180*e71b7053SJung-uk Kim 181*e71b7053SJung-uk KimAs the data is buffered, SSL_operation() may return with an ERROR_SSL_WANT_READ 182*e71b7053SJung-uk Kimcondition, but there is still data in the write buffer. An application must 183*e71b7053SJung-uk Kimnot rely on the error value of SSL_operation() but must assure that the 184*e71b7053SJung-uk Kimwrite buffer is always flushed first. Otherwise a deadlock may occur as 185*e71b7053SJung-uk Kimthe peer might be waiting for the data before being able to continue. 186*e71b7053SJung-uk Kim 187*e71b7053SJung-uk Kim=head1 SEE ALSO 188*e71b7053SJung-uk Kim 189*e71b7053SJung-uk KimL<SSL_set_bio(3)>, L<ssl(7)>, L<bio(7)>, 190*e71b7053SJung-uk KimL<BIO_should_retry(3)>, L<BIO_read_ex(3)> 191*e71b7053SJung-uk Kim 192*e71b7053SJung-uk Kim=head1 COPYRIGHT 193*e71b7053SJung-uk Kim 194*e71b7053SJung-uk KimCopyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. 195*e71b7053SJung-uk Kim 196*e71b7053SJung-uk KimLicensed under the OpenSSL license (the "License"). You may not use 197*e71b7053SJung-uk Kimthis file except in compliance with the License. You can obtain a copy 198*e71b7053SJung-uk Kimin the file LICENSE in the source distribution or at 199*e71b7053SJung-uk KimL<https://www.openssl.org/source/license.html>. 200*e71b7053SJung-uk Kim 201*e71b7053SJung-uk Kim=cut 202