iPXE
downloader.h File Reference

Image downloader. More...

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 FILE_SECBOOT (PERMITTED)
int create_downloader (struct interface *job, struct image *image)
 Instantiate a downloader.

Detailed Description

Image downloader.

Definition in file downloader.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )

◆ create_downloader()

int create_downloader ( struct interface * job,
struct image * image )
extern

Instantiate a downloader.

Parameters
jobJob control interface
imageImage to fill with downloaded file
Return values
rcReturn status code

Instantiates a downloader object to download the content of the specified image from its URI.

Definition at line 256 of file downloader.c.

256 {
257 struct downloader *downloader;
258 int rc;
259
260 /* Allocate and initialise structure */
261 downloader = zalloc ( sizeof ( *downloader ) );
262 if ( ! downloader )
263 return -ENOMEM;
266 &downloader->refcnt );
268 &downloader->refcnt );
271
272 /* Instantiate child objects and attach to our interfaces */
273 if ( ( rc = xfer_open_uri ( &downloader->xfer, image->uri ) ) != 0 )
274 goto err;
275
276 /* Attach parent interface, mortalise self, and return */
279 return 0;
280
281 err:
284 return rc;
285}
struct arbelprm_rc_send_wqe rc
Definition arbel.h:3
static struct interface_descriptor downloader_job_desc
Downloader job control interface descriptor.
Definition downloader.c:237
static void downloader_free(struct refcnt *refcnt)
Free downloader object.
Definition downloader.c:67
static struct interface_descriptor downloader_xfer_desc
Downloader data transfer interface descriptor.
Definition downloader.c:221
static void downloader_finished(struct downloader *downloader, int rc)
Terminate download.
Definition downloader.c:81
#define ENOMEM
Not enough space.
Definition errno.h:578
static struct image * image_get(struct image *image)
Increment reference count on an image.
Definition image.h:248
void intf_plug_plug(struct interface *a, struct interface *b)
Plug two object interfaces together.
Definition interface.c:108
static void intf_init(struct interface *intf, struct interface_descriptor *desc, struct refcnt *refcnt)
Initialise an object interface.
Definition interface.h:204
void * zalloc(size_t size)
Allocate cleared memory.
Definition malloc.c:718
int xfer_open_uri(struct interface *intf, struct uri *uri)
Open URI.
Definition open.c:68
#define ref_put(refcnt)
Drop reference to object.
Definition refcnt.h:107
#define ref_init(refcnt, free)
Initialise a reference counter.
Definition refcnt.h:65
A downloader.
Definition downloader.c:47
struct interface xfer
Data transfer interface.
Definition downloader.c:54
struct image * image
Image to contain downloaded file.
Definition downloader.c:57
struct xfer_buffer buffer
Data transfer buffer.
Definition downloader.c:59
struct refcnt refcnt
Reference count for this object.
Definition downloader.c:49
struct interface job
Job control interface.
Definition downloader.c:52
An executable image.
Definition image.h:24
struct uri * uri
URI of image.
Definition image.h:32
static void xferbuf_image_init(struct xfer_buffer *xferbuf, struct image *image)
Initialise image-based data transfer buffer.
Definition xferbuf.h:123

References downloader::buffer, downloader_finished(), downloader_free(), downloader_job_desc, downloader_xfer_desc, ENOMEM, downloader::image, image_get(), intf_init(), intf_plug_plug(), downloader::job, rc, ref_init, ref_put, downloader::refcnt, image::uri, downloader::xfer, xfer_open_uri(), xferbuf_image_init(), and zalloc().

Referenced by imgdownload().