diff options
author | Michael Brown | 2010-06-16 02:31:29 +0200 |
---|---|---|
committer | Michael Brown | 2010-06-22 16:50:31 +0200 |
commit | 4327d5d39f101f1df0ace6c03f3b3ada5f6a6213 (patch) | |
tree | ccf92bdfd23046b6c7f64f87b57350f02f63ad6f /src/core/downloader.c | |
parent | [interface] Convert all name-resolution interfaces to generic interfaces (diff) | |
download | ipxe-4327d5d39f101f1df0ace6c03f3b3ada5f6a6213.tar.gz ipxe-4327d5d39f101f1df0ace6c03f3b3ada5f6a6213.tar.xz ipxe-4327d5d39f101f1df0ace6c03f3b3ada5f6a6213.zip |
[interface] Convert all data-xfer interfaces to generic interfaces
Remove data-xfer as an interface type, and replace data-xfer
interfaces with generic interfaces supporting the data-xfer methods.
Filter interfaces (as used by the TLS layer) are handled using the
generic pass-through interface capability. A side-effect of this is
that deliver_raw() no longer exists as a data-xfer method. (In
practice this doesn't lose any efficiency, since there are no
instances within the current codebase where xfer_deliver_raw() is used
to pass data to an interface supporting the deliver_raw() method.)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core/downloader.c')
-rw-r--r-- | src/core/downloader.c | 48 |
1 files changed, 16 insertions, 32 deletions
diff --git a/src/core/downloader.c b/src/core/downloader.c index de5ea458..488c86d9 100644 --- a/src/core/downloader.c +++ b/src/core/downloader.c @@ -21,6 +21,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include <stdlib.h> #include <stdarg.h> #include <errno.h> +#include <ipxe/iobuf.h> #include <ipxe/xfer.h> #include <ipxe/open.h> #include <ipxe/job.h> @@ -43,7 +44,7 @@ struct downloader { /** Job control interface */ struct interface job; /** Data transfer interface */ - struct xfer_interface xfer; + struct interface xfer; /** Image to contain downloaded file */ struct image *image; @@ -79,8 +80,7 @@ static void downloader_finished ( struct downloader *downloader, int rc ) { rc = downloader->register_image ( downloader->image ); /* Shut down interfaces */ - xfer_nullify ( &downloader->xfer ); - xfer_close ( &downloader->xfer, rc ); + intf_shutdown ( &downloader->xfer, rc ); intf_shutdown ( &downloader->job, rc ); } @@ -145,18 +145,16 @@ static void downloader_progress ( struct downloader *downloader, */ /** - * Handle deliver_raw() event received via data transfer interface + * Handle received data * - * @v xfer Downloader data transfer interface + * @v downloader Downloader * @v iobuf Datagram I/O buffer * @v meta Data transfer metadata * @ret rc Return status code */ -static int downloader_xfer_deliver_iob ( struct xfer_interface *xfer, - struct io_buffer *iobuf, - struct xfer_metadata *meta ) { - struct downloader *downloader = - container_of ( xfer, struct downloader, xfer ); +static int downloader_xfer_deliver ( struct downloader *downloader, + struct io_buffer *iobuf, + struct xfer_metadata *meta ) { size_t len; size_t max; int rc; @@ -184,30 +182,16 @@ static int downloader_xfer_deliver_iob ( struct xfer_interface *xfer, return rc; } -/** - * Handle close() event received via data transfer interface - * - * @v xfer Downloader data transfer interface - * @v rc Reason for close - */ -static void downloader_xfer_close ( struct xfer_interface *xfer, int rc ) { - struct downloader *downloader = - container_of ( xfer, struct downloader, xfer ); - - /* Terminate download */ - downloader_finished ( downloader, rc ); -} - /** Downloader data transfer interface operations */ -static struct xfer_interface_operations downloader_xfer_operations = { - .close = downloader_xfer_close, - .vredirect = xfer_vreopen, - .window = unlimited_xfer_window, - .alloc_iob = default_xfer_alloc_iob, - .deliver_iob = downloader_xfer_deliver_iob, - .deliver_raw = xfer_deliver_as_iob, +static struct interface_operation downloader_xfer_operations[] = { + INTF_OP ( xfer_deliver, struct downloader *, downloader_xfer_deliver ), + INTF_OP ( intf_close, struct downloader *, downloader_finished ), }; +/** Downloader data transfer interface descriptor */ +static struct interface_descriptor downloader_xfer_desc = + INTF_DESC ( struct downloader, xfer, downloader_xfer_operations ); + /**************************************************************************** * * Job control interface @@ -258,7 +242,7 @@ int create_downloader ( struct interface *job, struct image *image, ref_init ( &downloader->refcnt, downloader_free ); intf_init ( &downloader->job, &downloader_job_desc, &downloader->refcnt ); - xfer_init ( &downloader->xfer, &downloader_xfer_operations, + intf_init ( &downloader->xfer, &downloader_xfer_desc, &downloader->refcnt ); downloader->image = image_get ( image ); downloader->register_image = register_image; |