=pod

=head1 NAME

BIO_f_readbuffer
- read only buffering BIO that supports BIO_tell() and BIO_seek()

=head1 SYNOPSIS

 #include <openssl/bio.h>

 const BIO_METHOD *BIO_f_readbuffer(void);

=head1 DESCRIPTION

BIO_f_readbuffer() returns the read buffering BIO method.

This BIO filter can be inserted on top of BIO's that do not support BIO_tell()
or BIO_seek() (e.g. A file BIO that uses stdin).

Data read from a read buffering BIO comes from an internal buffer which is
filled from the next BIO in the chain.

BIO_gets() is supported for read buffering BIOs.
Writing data to a read buffering BIO is not supported.

Calling BIO_reset() on a read buffering BIO does not clear any buffered data.

=head1 NOTES

Read buffering BIOs implement BIO_read_ex() by using BIO_read_ex() operations
on the next BIO (e.g. a file BIO) in the chain and storing the result in an
internal buffer, from which bytes are given back to the caller as appropriate
for the call. BIO_read_ex() is guaranteed to give the caller the number of bytes
it asks for, unless there's an error or end of communication is reached in the
next BIO. The internal buffer can grow to cache the entire contents of the next
BIO in the chain. BIO_seek() uses the internal buffer, so that it can only seek
into data that is already read.

=head1 RETURN VALUES

BIO_f_readbuffer() returns the read buffering BIO method.

=head1 SEE ALSO

L<bio(7)>,
L<BIO_read(3)>,
L<BIO_gets(3)>,
L<BIO_reset(3)>,
L<BIO_ctrl(3)>.

=head1 COPYRIGHT

Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut
