From dd6d94004f2cd33401978a91353f5c352caa1313 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Thu, 18 Jan 2007 03:39:45 +0000 Subject: HTTP/DNS now working fully asynchronously. HTTP/IP addresses and any other protocol won't work at the moment. --- src/usr/fetch.c | 109 ------------------------------------------------------ src/usr/imgmgmt.c | 13 ++++--- 2 files changed, 8 insertions(+), 114 deletions(-) delete mode 100644 src/usr/fetch.c (limited to 'src/usr') diff --git a/src/usr/fetch.c b/src/usr/fetch.c deleted file mode 100644 index 9260a48f2..000000000 --- a/src/usr/fetch.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2007 Michael Brown . - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/** - * @file - * - * Fetch file as executable/loadable image - * - */ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -/** - * Fetch file - * - * @v filename Filename to fetch - * @ret data Loaded file - * @ret len Length of loaded file - * @ret rc Return status code - * - * Fetch file to an external buffer allocated with umalloc(). The - * caller is responsible for eventually freeing the buffer with - * ufree(). - */ -int fetch ( const char *uri_string, userptr_t *data, size_t *len ) { - struct uri *uri; - struct buffer buffer; - int rc; - - /* Parse the URI */ - uri = parse_uri ( uri_string ); - if ( ! uri ) { - rc = -ENOMEM; - goto err_parse_uri; - } - - /* Allocate an expandable buffer to hold the file */ - if ( ( rc = ebuffer_alloc ( &buffer, 0 ) ) != 0 ) { - goto err_ebuffer_alloc; - } - -#warning "Temporary pseudo-URL parsing code" - - /* Retrieve the file */ - struct async async; - - int ( * download ) ( struct uri *uri, struct buffer *buffer, - struct async *parent ); - - if ( ! uri->scheme ) { - download = tftp_get; - } else { - if ( strcmp ( uri->scheme, "http" ) == 0 ) { - download = http_get; - } else if ( strcmp ( uri->scheme, "ftp" ) == 0 ) { - download = ftp_get; - } else { - download = tftp_get; - } - } - - if ( ( rc = async_block ( &async, - download ( uri, &buffer, &async ) ) ) != 0 ) - goto err; - - /* Fill in buffer address and length */ - *data = buffer.addr; - *len = buffer.fill; - - /* Release temporary resources. The ebuffer storage is now - * owned by our caller, so we don't free it. - */ - free_uri ( uri ); - return 0; - - err: - ufree ( buffer.addr ); - err_ebuffer_alloc: - free_uri ( uri ); - err_parse_uri: - return rc; -} diff --git a/src/usr/imgmgmt.c b/src/usr/imgmgmt.c index abd48bb39..06ae872e0 100644 --- a/src/usr/imgmgmt.c +++ b/src/usr/imgmgmt.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include /** @file @@ -34,14 +34,15 @@ /** * Fetch an image * - * @v filename Filename for image + * @v uri_string URI as a string (e.g. "http://www.nowhere.com/vmlinuz") * @v name Name for image, or NULL * @ret new_image Newly created image * @ret rc Return status code */ -int imgfetch ( const char *filename, const char *name, +int imgfetch ( const char *uri_string, const char *name, struct image **new_image ) { struct image *image; + struct async async; int rc; /* Allocate new image */ @@ -54,8 +55,10 @@ int imgfetch ( const char *filename, const char *name, if ( name ) strncpy ( image->name, name, ( sizeof ( image->name ) - 1 ) ); - /* Fetch the file */ - if ( ( rc = fetch ( filename, &image->data, &image->len ) ) != 0 ) + /* Download the file */ + if ( ( rc = async_block ( &async, start_download ( uri_string, &async, + &image->data, + &image->len ))) !=0) goto err; /* Register the image */ -- cgit v1.2.3-55-g7522