1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #ifndef _GPXE_DOWNLOAD_H
- #define _GPXE_DOWNLOAD_H
-
- /** @file
- *
- * Download protocols
- *
- */
-
- #include <stdint.h>
- #include <gpxe/uaccess.h>
- #include <gpxe/async.h>
- #include <gpxe/buffer.h>
- #include <gpxe/uri.h>
- #include <gpxe/tables.h>
-
- /** A download protocol */
- struct download_protocol {
- /** Protocol name (e.g. "http") */
- const char *name;
- /** Start a download via this protocol
- *
- * @v uri Uniform Resource Identifier
- * @v buffer Buffer into which to download file
- * @v parent Parent asynchronous operation
- * @ret rc Return status code
- *
- * The @c uri and @c buffer will remain persistent for the
- * duration of the asynchronous operation.
- */
- int ( * start_download ) ( struct uri *uri, struct buffer *buffer,
- struct async *parent );
- };
-
- /** Register a download protocol */
- #define __download_protocol __table ( struct download_protocol, \
- download_protocols, 01 )
-
- /** A download in progress */
- struct download {
- /** User buffer allocated for the download */
- userptr_t *data;
- /** Size of the download */
- size_t *len;
-
- /** URI being downloaded */
- struct uri *uri;
- /** Expandable buffer for this download */
- struct buffer buffer;
- /** Download protocol */
- struct download_protocol *protocol;
- /** Asynchronous operation for this download */
- struct async async;
- };
-
- extern int start_download ( const char *uri_string, struct async *parent,
- userptr_t *data, size_t *len );
-
- #endif /* _GPXE_DOWNLOAD_H */
|