|
iPXE
|
Data transfer buffer. More...
#include <stdlib.h>#include <string.h>#include <errno.h>#include <ipxe/xfer.h>#include <ipxe/iobuf.h>#include <ipxe/umalloc.h>#include <ipxe/profile.h>#include <ipxe/xferbuf.h>Go to the source code of this file.
Functions | |
| FILE_LICENCE (GPL2_OR_LATER_OR_UBDL) | |
| void | xferbuf_detach (struct xfer_buffer *xferbuf) |
| Detach data from data transfer buffer. More... | |
| void | xferbuf_free (struct xfer_buffer *xferbuf) |
| Free data transfer buffer. More... | |
| static int | xferbuf_ensure_size (struct xfer_buffer *xferbuf, size_t len) |
| Ensure that data transfer buffer is large enough for the specified size. More... | |
| int | xferbuf_write (struct xfer_buffer *xferbuf, size_t offset, const void *data, size_t len) |
| Write to data transfer buffer. More... | |
| int | xferbuf_read (struct xfer_buffer *xferbuf, size_t offset, void *data, size_t len) |
| Read from data transfer buffer. More... | |
| int | xferbuf_deliver (struct xfer_buffer *xferbuf, struct io_buffer *iobuf, struct xfer_metadata *meta) |
| Add received data to data transfer buffer. More... | |
| static int | xferbuf_malloc_realloc (struct xfer_buffer *xferbuf, size_t len) |
| Reallocate malloc()-based data transfer buffer. More... | |
| static int | xferbuf_umalloc_realloc (struct xfer_buffer *xferbuf, size_t len) |
| Reallocate umalloc()-based data transfer buffer. More... | |
| static int | xferbuf_fixed_realloc (struct xfer_buffer *xferbuf, size_t len) |
| Reallocate fixed-size data transfer buffer. More... | |
| static int | xferbuf_void_realloc (struct xfer_buffer *xferbuf, size_t len __unused) |
| Reallocate void data transfer buffer. More... | |
| struct xfer_buffer * | xfer_buffer (struct interface *intf) |
| Get underlying data transfer buffer. More... | |
Variables | |
| static struct profiler xferbuf_deliver_profiler | __profiler |
| Data delivery profiler. More... | |
| struct xfer_buffer_operations | xferbuf_malloc_operations |
| malloc()-based data buffer operations More... | |
| struct xfer_buffer_operations | xferbuf_umalloc_operations |
| umalloc()-based data buffer operations More... | |
| struct xfer_buffer_operations | xferbuf_fixed_operations |
| Fixed-size data buffer operations. More... | |
| struct xfer_buffer_operations | xferbuf_void_operations |
| Void data buffer operations. More... | |
Data transfer buffer.
Definition in file xferbuf.c.
| FILE_LICENCE | ( | GPL2_OR_LATER_OR_UBDL | ) |
| void xferbuf_detach | ( | struct xfer_buffer * | xferbuf | ) |
Detach data from data transfer buffer.
| xferbuf | Data transfer buffer |
The caller assumes responsibility for eventually freeing the data previously owned by the data transfer buffer.
Definition at line 61 of file xferbuf.c.
References xfer_buffer::data, xfer_buffer::len, NULL, and xfer_buffer::pos.
Referenced by downloader_finished(), and xferbuf_free().
| void xferbuf_free | ( | struct xfer_buffer * | xferbuf | ) |
Free data transfer buffer.
| xferbuf | Data transfer buffer |
Definition at line 73 of file xferbuf.c.
References xfer_buffer::op, xfer_buffer_operations::realloc, and xferbuf_detach().
Referenced by downloader_free(), peerblk_reset(), peermux_free(), validator_free(), and validator_xfer_close().
|
static |
Ensure that data transfer buffer is large enough for the specified size.
| xferbuf | Data transfer buffer |
| len | Required minimum size |
| rc | Return status code |
Definition at line 86 of file xferbuf.c.
References DBGC, xfer_buffer::len, len, xfer_buffer::op, rc, xfer_buffer_operations::realloc, and strerror().
Referenced by xferbuf_write().
| int xferbuf_write | ( | struct xfer_buffer * | xferbuf, |
| size_t | offset, | ||
| const void * | data, | ||
| size_t | len | ||
| ) |
Write to data transfer buffer.
| xferbuf | Data transfer buffer |
| offset | Starting offset |
| data | Data to write |
| len | Length of data |
Definition at line 112 of file xferbuf.c.
References xfer_buffer::data, data, ENOTTY, EOVERFLOW, len, memcpy(), offset, profile_start(), profile_stop(), rc, and xferbuf_ensure_size().
Referenced by peerblk_decrypt_write(), peerblk_retrieval_rx(), and xferbuf_deliver().
| int xferbuf_read | ( | struct xfer_buffer * | xferbuf, |
| size_t | offset, | ||
| void * | data, | ||
| size_t | len | ||
| ) |
Read from data transfer buffer.
| xferbuf | Data transfer buffer |
| offset | Starting offset |
| data | Data to write |
| len | Length of data |
Definition at line 146 of file xferbuf.c.
References xfer_buffer::data, data, ENOENT, ENOTTY, xfer_buffer::len, len, memcpy(), offset, profile_start(), and profile_stop().
Referenced by peerblk_decrypt_read().
| int xferbuf_deliver | ( | struct xfer_buffer * | xferbuf, |
| struct io_buffer * | iobuf, | ||
| struct xfer_metadata * | meta | ||
| ) |
Add received data to data transfer buffer.
| xferbuf | Data transfer buffer |
| iobuf | I/O buffer |
| meta | Data transfer metadata |
| rc | Return status code |
Definition at line 174 of file xferbuf.c.
References io_buffer::data, done, free_iob(), iob_len(), len, meta, xfer_buffer::pos, profile_start(), profile_stop(), rc, XFER_FL_ABS_OFFSET, and xferbuf_write().
Referenced by blktrans_deliver(), downloader_deliver(), efi_pxe_tftp_deliver(), peermux_info_deliver(), and validator_xfer_deliver().
|
static |
|
static |
Reallocate umalloc()-based data transfer buffer.
| xferbuf | Data transfer buffer |
| len | New length (or zero to free buffer) |
| rc | Return status code |
Definition at line 231 of file xferbuf.c.
References xfer_buffer::data, ENOSPC, len, and urealloc().
|
static |
Reallocate fixed-size data transfer buffer.
| xferbuf | Data transfer buffer |
| len | New length (or zero to free buffer) |
| rc | Return status code |
Definition at line 253 of file xferbuf.c.
References ERANGE, xfer_buffer::len, and len.
|
static |
Reallocate void data transfer buffer.
| xferbuf | Data transfer buffer |
| len | New length (or zero to free buffer) |
| rc | Return status code |
Definition at line 278 of file xferbuf.c.
References assert(), xfer_buffer::data, and NULL.
| struct xfer_buffer* xfer_buffer | ( | struct interface * | intf | ) |
Get underlying data transfer buffer.
| interface | Data transfer interface |
| xferbuf | Data transfer buffer, or NULL on error |
This call will check that the xfer_buffer() handler belongs to the destination interface which also provides xfer_deliver() for this interface.
This is done to prevent accidental accesses to a data transfer buffer which may be located behind a non-transparent datapath via a series of pass-through interfaces.
Definition at line 305 of file xferbuf.c.
References dest, interface::intf, intf_get_dest_op, intf_object(), intf_put(), NULL, op, xfer_buffer_TYPE, and xfer_deliver().
Referenced by http_content_buffer(), peerblk_decrypt(), and peermux_block_buffer().
|
static |
| struct xfer_buffer_operations xferbuf_malloc_operations |
malloc()-based data buffer operations
Definition at line 220 of file xferbuf.c.
Referenced by xferbuf_malloc_init().
| struct xfer_buffer_operations xferbuf_umalloc_operations |
umalloc()-based data buffer operations
Definition at line 242 of file xferbuf.c.
Referenced by xferbuf_umalloc_init().
| struct xfer_buffer_operations xferbuf_fixed_operations |
Fixed-size data buffer operations.
Definition at line 267 of file xferbuf.c.
Referenced by xferbuf_fixed_init().
| struct xfer_buffer_operations xferbuf_void_operations |
Void data buffer operations.
Definition at line 287 of file xferbuf.c.
Referenced by xferbuf_void_init().
1.8.15