diff options
author | Michael Brown <mcb30@etherboot.org> | 2009-08-31 19:33:55 +0100 |
---|---|---|
committer | Michael Brown <mcb30@etherboot.org> | 2009-08-31 19:33:55 +0100 |
commit | c9c411286aebc4c46539fad2c80a950ab80e68e8 (patch) | |
tree | 3fb1fe97138e76a99b6c911b832cb1ec8dcd541f | |
parent | 0fc13add3196216cb440fbcee136903263a82f3f (diff) | |
download | ipxe-c9c411286aebc4c46539fad2c80a950ab80e68e8.tar.gz |
[job] Report progress of downloader jobs via job_progress()
-rw-r--r-- | src/core/downloader.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/core/downloader.c b/src/core/downloader.c index 5bde0a6be..86c144dc6 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, }; /**************************************************************************** |