iPXE
|
Data transfer buffer. More...
#include <stdint.h>
#include <ipxe/iobuf.h>
#include <ipxe/uaccess.h>
#include <ipxe/interface.h>
#include <ipxe/xfer.h>
Go to the source code of this file.
Data Structures | |
struct | xfer_buffer |
A data transfer buffer. More... | |
struct | xfer_buffer_operations |
Data transfer buffer operations. More... | |
Macros | |
#define | xfer_buffer_TYPE(object_type) typeof ( struct xfer_buffer * ( object_type ) ) |
Functions | |
FILE_LICENCE (GPL2_OR_LATER_OR_UBDL) | |
static void | xferbuf_malloc_init (struct xfer_buffer *xferbuf) |
Initialise malloc()-based data transfer buffer. More... | |
static void | xferbuf_umalloc_init (struct xfer_buffer *xferbuf, userptr_t *data) |
Initialise umalloc()-based data transfer buffer. More... | |
void | xferbuf_free (struct xfer_buffer *xferbuf) |
Free data transfer buffer. 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... | |
struct xfer_buffer * | xfer_buffer (struct interface *intf) |
Get underlying data transfer buffer. More... | |
Variables | |
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... | |
Data transfer buffer.
Definition in file xferbuf.h.
#define xfer_buffer_TYPE | ( | object_type | ) | typeof ( struct xfer_buffer * ( object_type ) ) |
FILE_LICENCE | ( | GPL2_OR_LATER_OR_UBDL | ) |
|
inlinestatic |
Initialise malloc()-based data transfer buffer.
xferbuf | Data transfer buffer |
Definition at line 76 of file xferbuf.h.
References xfer_buffer::op, and xferbuf_malloc_operations.
Referenced by create_validator(), and peerblk_open().
|
inlinestatic |
Initialise umalloc()-based data transfer buffer.
xferbuf | Data transfer buffer |
data | User pointer |
Definition at line 87 of file xferbuf.h.
References xfer_buffer::data, data, xfer_buffer::op, and xferbuf_umalloc_operations.
Referenced by create_downloader(), and peermux_filter().
void xferbuf_free | ( | struct xfer_buffer * | xferbuf | ) |
Free data transfer buffer.
xferbuf | Data transfer buffer |
Definition at line 58 of file xferbuf.c.
References xfer_buffer::len, xfer_buffer::op, xfer_buffer::pos, and xfer_buffer_operations::realloc.
Referenced by peerblk_reset(), peermux_free(), validator_free(), and validator_xfer_close().
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 98 of file xferbuf.c.
References data, EOVERFLOW, len, offset, xfer_buffer::op, profile_start(), profile_stop(), rc, xfer_buffer_operations::write, 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 128 of file xferbuf.c.
References data, ENOENT, len, xfer_buffer::len, offset, xfer_buffer::op, profile_start(), profile_stop(), and xfer_buffer_operations::read.
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 152 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().
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 301 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().
struct xfer_buffer_operations xferbuf_malloc_operations |
malloc()-based data buffer operations
Definition at line 226 of file xferbuf.c.
Referenced by xferbuf_malloc_init().
struct xfer_buffer_operations xferbuf_umalloc_operations |
umalloc()-based data buffer operations
Definition at line 281 of file xferbuf.c.
Referenced by xferbuf_umalloc_init().