david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[http] Support HTTP redirection

This commit is contained in:
Michael Brown 2009-03-30 13:28:33 +01:00
parent 323cdf8c4c
commit 272e6ddc30
1 changed files with 28 additions and 0 deletions

View File

@ -138,6 +138,8 @@ static void http_done ( struct http_request *http, int rc ) {
static int http_response_to_rc ( unsigned int response ) {
switch ( response ) {
case 200:
case 301:
case 302:
return 0;
case 404:
return -ENOENT;
@ -180,6 +182,28 @@ static int http_rx_response ( struct http_request *http, char *response ) {
return 0;
}
/**
* Handle HTTP Location header
*
* @v http HTTP request
* @v value HTTP header value
* @ret rc Return status code
*/
static int http_rx_location ( struct http_request *http, const char *value ) {
int rc;
/* Redirect to new location */
DBGC ( http, "HTTP %p redirecting to %s\n", http, value );
if ( ( rc = xfer_redirect ( &http->xfer, LOCATION_URI_STRING,
value ) ) != 0 ) {
DBGC ( http, "HTTP %p could not redirect: %s\n",
http, strerror ( rc ) );
return rc;
}
return 0;
}
/**
* Handle HTTP Content-Length header
*
@ -222,6 +246,10 @@ struct http_header_handler {
/** List of HTTP header handlers */
static struct http_header_handler http_header_handlers[] = {
{
.header = "Location",
.rx = http_rx_location,
},
{
.header = "Content-Length",
.rx = http_rx_content_length,