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 263 of file downloader.c.

263 {
264 struct downloader *downloader;
265 int rc;
266
267 /* Allocate and initialise structure */
268 downloader = zalloc ( sizeof ( *downloader ) );
269 if ( ! downloader )
270 return -ENOMEM;
273 &downloader->refcnt );
275 &downloader->refcnt );
278
279 /* Instantiate child objects and attach to our interfaces */
280 if ( ( rc = xfer_open_uri ( &downloader->xfer, image->uri ) ) != 0 )
281 goto err;
282
283 /* Attach parent interface, mortalise self, and return */
286 return 0;
287
288 err:
291 return rc;
292}
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:244
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:228
static void downloader_finished(struct downloader *downloader, int rc)
Terminate download.
Definition downloader.c:82
#define ENOMEM
Not enough space.
Definition errno.h:535
static struct image * image_get(struct image *image)
Increment reference count on an image.
Definition image.h:240
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:662
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_umalloc_init(struct xfer_buffer *xferbuf)
Initialise umalloc()-based data transfer buffer.
Definition xferbuf.h:67

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_umalloc_init(), and zalloc().

Referenced by imgdownload().