Blame doc/man3/BIO_s_mem.pod

Packit c4476c
=pod
Packit c4476c
Packit c4476c
=head1 NAME
Packit c4476c
Packit c4476c
BIO_s_secmem,
Packit c4476c
BIO_s_mem, BIO_set_mem_eof_return, BIO_get_mem_data, BIO_set_mem_buf,
Packit c4476c
BIO_get_mem_ptr, BIO_new_mem_buf - memory BIO
Packit c4476c
Packit c4476c
=head1 SYNOPSIS
Packit c4476c
Packit c4476c
 #include <openssl/bio.h>
Packit c4476c
Packit c4476c
 const BIO_METHOD *BIO_s_mem(void);
Packit c4476c
 const BIO_METHOD *BIO_s_secmem(void);
Packit c4476c
Packit c4476c
 BIO_set_mem_eof_return(BIO *b, int v)
Packit c4476c
 long BIO_get_mem_data(BIO *b, char **pp)
Packit c4476c
 BIO_set_mem_buf(BIO *b, BUF_MEM *bm, int c)
Packit c4476c
 BIO_get_mem_ptr(BIO *b, BUF_MEM **pp)
Packit c4476c
Packit c4476c
 BIO *BIO_new_mem_buf(const void *buf, int len);
Packit c4476c
Packit c4476c
=head1 DESCRIPTION
Packit c4476c
Packit c4476c
BIO_s_mem() returns the memory BIO method function.
Packit c4476c
Packit c4476c
A memory BIO is a source/sink BIO which uses memory for its I/O. Data
Packit c4476c
written to a memory BIO is stored in a BUF_MEM structure which is extended
Packit c4476c
as appropriate to accommodate the stored data.
Packit c4476c
Packit c4476c
BIO_s_secmem() is like BIO_s_mem() except that the secure heap is used
Packit c4476c
for buffer storage.
Packit c4476c
Packit c4476c
Any data written to a memory BIO can be recalled by reading from it.
Packit c4476c
Unless the memory BIO is read only any data read from it is deleted from
Packit c4476c
the BIO.
Packit c4476c
Packit c4476c
Memory BIOs support BIO_gets() and BIO_puts().
Packit c4476c
Packit c4476c
If the BIO_CLOSE flag is set when a memory BIO is freed then the underlying
Packit c4476c
BUF_MEM structure is also freed.
Packit c4476c
Packit c4476c
Calling BIO_reset() on a read write memory BIO clears any data in it if the
Packit c4476c
flag BIO_FLAGS_NONCLEAR_RST is not set, otherwise it just restores the read
Packit c4476c
pointer to the state it was just after the last write was performed and the
Packit c4476c
data can be read again. On a read only BIO it similarly restores the BIO to
Packit c4476c
its original state and the read only data can be read again.
Packit c4476c
Packit c4476c
BIO_eof() is true if no data is in the BIO.
Packit c4476c
Packit c4476c
BIO_ctrl_pending() returns the number of bytes currently stored.
Packit c4476c
Packit c4476c
BIO_set_mem_eof_return() sets the behaviour of memory BIO B when it is
Packit c4476c
empty. If the B<v> is zero then an empty memory BIO will return EOF (that is
Packit c4476c
it will return zero and BIO_should_retry(b) will be false. If B<v> is non
Packit c4476c
zero then it will return B<v> when it is empty and it will set the read retry
Packit c4476c
flag (that is BIO_read_retry(b) is true). To avoid ambiguity with a normal
Packit c4476c
positive return value B<v> should be set to a negative value, typically -1.
Packit c4476c
Packit c4476c
BIO_get_mem_data() sets *B<pp> to a pointer to the start of the memory BIOs data
Packit c4476c
and returns the total amount of data available. It is implemented as a macro.
Packit c4476c
Packit c4476c
BIO_set_mem_buf() sets the internal BUF_MEM structure to B<bm> and sets the
Packit c4476c
close flag to B<c>, that is B<c> should be either BIO_CLOSE or BIO_NOCLOSE.
Packit c4476c
It is a macro.
Packit c4476c
Packit c4476c
BIO_get_mem_ptr() places the underlying BUF_MEM structure in *B<pp>. It is
Packit c4476c
a macro.
Packit c4476c
Packit c4476c
BIO_new_mem_buf() creates a memory BIO using B<len> bytes of data at B<buf>,
Packit c4476c
if B<len> is -1 then the B<buf> is assumed to be nul terminated and its
Packit c4476c
length is determined by B<strlen>. The BIO is set to a read only state and
Packit c4476c
as a result cannot be written to. This is useful when some data needs to be
Packit c4476c
made available from a static area of memory in the form of a BIO. The
Packit c4476c
supplied data is read directly from the supplied buffer: it is B<not> copied
Packit c4476c
first, so the supplied area of memory must be unchanged until the BIO is freed.
Packit c4476c
Packit c4476c
=head1 NOTES
Packit c4476c
Packit c4476c
Writes to memory BIOs will always succeed if memory is available: that is
Packit c4476c
their size can grow indefinitely.
Packit c4476c
Packit c4476c
Every write after partial read (not all data in the memory buffer was read)
Packit c4476c
to a read write memory BIO will have to move the unread data with an internal
Packit c4476c
copy operation, if a BIO contains a lot of data and it is read in small
Packit c4476c
chunks intertwined with writes the operation can be very slow. Adding
Packit c4476c
a buffering BIO to the chain can speed up the process.
Packit c4476c
Packit c4476c
Calling BIO_set_mem_buf() on a BIO created with BIO_new_secmem() will
Packit c4476c
give undefined results, including perhaps a program crash.
Packit c4476c
Packit c4476c
Switching the memory BIO from read write to read only is not supported and
Packit c4476c
can give undefined results including a program crash. There are two notable
Packit c4476c
exceptions to the rule. The first one is to assign a static memory buffer
Packit c4476c
immediately after BIO creation and set the BIO as read only.
Packit c4476c
Packit c4476c
The other supported sequence is to start with read write BIO then temporarily
Packit c4476c
switch it to read only and call BIO_reset() on the read only BIO immediately
Packit c4476c
before switching it back to read write. Before the BIO is freed it must be
Packit c4476c
switched back to the read write mode.
Packit c4476c
Packit c4476c
Calling BIO_get_mem_ptr() on read only BIO will return a BUF_MEM that
Packit c4476c
contains only the remaining data to be read. If the close status of the
Packit c4476c
BIO is set to BIO_NOCLOSE, before freeing the BUF_MEM the data pointer
Packit c4476c
in it must be set to NULL as the data pointer does not point to an
Packit c4476c
allocated memory.
Packit c4476c
Packit c4476c
Calling BIO_reset() on a read write memory BIO with BIO_FLAGS_NONCLEAR_RST
Packit c4476c
flag set can have unexpected outcome when the reads and writes to the
Packit c4476c
BIO are intertwined. As documented above the BIO will be reset to the
Packit c4476c
state after the last completed write operation. The effects of reads
Packit c4476c
preceding that write operation cannot be undone.
Packit c4476c
Packit c4476c
Calling BIO_get_mem_ptr() prior to a BIO_reset() call with
Packit c4476c
BIO_FLAGS_NONCLEAR_RST set has the same effect as a write operation.
Packit c4476c
Packit c4476c
=head1 BUGS
Packit c4476c
Packit c4476c
There should be an option to set the maximum size of a memory BIO.
Packit c4476c
Packit c4476c
=head1 RETURN VALUES
Packit c4476c
Packit c4476c
BIO_s_mem() and BIO_s_secmem() return a valid memory B<BIO_METHOD> structure.
Packit c4476c
Packit c4476c
BIO_set_mem_eof_return(), BIO_set_mem_buf() and BIO_get_mem_ptr()
Packit c4476c
return 1 on success or a value which is less than or equal to 0 if an error occurred.
Packit c4476c
Packit c4476c
BIO_get_mem_data() returns the total number of bytes available on success,
Packit c4476c
0 if b is NULL, or a negative value in case of other errors.
Packit c4476c
Packit c4476c
BIO_new_mem_buf() returns a valid B<BIO> structure on success or NULL on error.
Packit c4476c
Packit c4476c
=head1 EXAMPLES
Packit c4476c
Packit c4476c
Create a memory BIO and write some data to it:
Packit c4476c
Packit c4476c
 BIO *mem = BIO_new(BIO_s_mem());
Packit c4476c
Packit c4476c
 BIO_puts(mem, "Hello World\n");
Packit c4476c
Packit c4476c
Create a read only memory BIO:
Packit c4476c
Packit c4476c
 char data[] = "Hello World";
Packit c4476c
 BIO *mem = BIO_new_mem_buf(data, -1);
Packit c4476c
Packit c4476c
Extract the BUF_MEM structure from a memory BIO and then free up the BIO:
Packit c4476c
Packit c4476c
 BUF_MEM *bptr;
Packit c4476c
Packit c4476c
 BIO_get_mem_ptr(mem, &bptr);
Packit c4476c
 BIO_set_close(mem, BIO_NOCLOSE); /* So BIO_free() leaves BUF_MEM alone */
Packit c4476c
 BIO_free(mem);
Packit c4476c
Packit c4476c
Packit c4476c
=head1 COPYRIGHT
Packit c4476c
Packit c4476c
Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
Packit c4476c
Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
this file except in compliance with the License.  You can obtain a copy
Packit c4476c
in the file LICENSE in the source distribution or at
Packit c4476c
L<https://www.openssl.org/source/license.html>.
Packit c4476c
Packit c4476c
=cut