summaryrefslogtreecommitdiffstats
path: root/src/core/downloader.c
diff options
context:
space:
mode:
authorMichael Brown2010-06-16 02:31:29 +0200
committerMichael Brown2010-06-22 16:50:31 +0200
commit4327d5d39f101f1df0ace6c03f3b3ada5f6a6213 (patch)
treeccf92bdfd23046b6c7f64f87b57350f02f63ad6f /src/core/downloader.c
parent[interface] Convert all name-resolution interfaces to generic interfaces (diff)
downloadipxe-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.c48
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;