summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2009-08-31 20:33:55 +0200
committerMichael Brown2009-08-31 20:33:55 +0200
commitc9c411286aebc4c46539fad2c80a950ab80e68e8 (patch)
tree3fb1fe97138e76a99b6c911b832cb1ec8dcd541f
parent[job] Add missing job_progress() interface method (diff)
downloadipxe-c9c411286aebc4c46539fad2c80a950ab80e68e8.tar.gz
ipxe-c9c411286aebc4c46539fad2c80a950ab80e68e8.tar.xz
ipxe-c9c411286aebc4c46539fad2c80a950ab80e68e8.zip
[job] Report progress of downloader jobs via job_progress()
-rw-r--r--src/core/downloader.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/core/downloader.c b/src/core/downloader.c
index 5bde0a6b..86c144dc 100644
--- a/src/core/downloader.c
+++ b/src/core/downloader.c
@@ -126,18 +126,37 @@ static int downloader_ensure_size ( struct downloader *downloader,
* @v job Downloader job control interface
*/
static void downloader_job_kill ( struct job_interface *job ) {
- struct downloader *downloader =
+ struct downloader *downloader =
container_of ( job, struct downloader, job );
/* Terminate download */
downloader_finished ( downloader, -ECANCELED );
}
+/**
+ * Report progress of download job
+ *
+ * @v job Downloader job control interface
+ * @v progress Progress report to fill in
+ */
+static void downloader_job_progress ( struct job_interface *job,
+ struct job_progress *progress ) {
+ struct downloader *downloader =
+ container_of ( job, struct downloader, job );
+
+ /* This is not entirely accurate, since downloaded data may
+ * arrive out of order (e.g. with multicast protocols), but
+ * it's a reasonable first approximation.
+ */
+ progress->completed = downloader->pos;
+ progress->total = downloader->image->len;
+}
+
/** Downloader job control interface operations */
static struct job_interface_operations downloader_job_operations = {
.done = ignore_job_done,
.kill = downloader_job_kill,
- .progress = ignore_job_progress,
+ .progress = downloader_job_progress,
};
/****************************************************************************