Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[http] Defer processing response code until after receiving all headers
Some headers can modify the meaning of the response code.  For
example, a WWW-Authenticate header can change the interpretation of a
401 Unauthorized response from "Access denied" to "Please
authenticate".

Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed May 22, 2012
1 parent 8a5ba67 commit 46df5c9
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions src/net/tcp/httpcore.c
Expand Up @@ -143,6 +143,8 @@ struct http_request {

/** RX state */
enum http_rx_state rx_state;
/** Response code */
unsigned int code;
/** Received length */
size_t rx_len;
/** Length remaining (or 0 if unknown) */
Expand Down Expand Up @@ -311,22 +313,18 @@ static int http_response_to_rc ( unsigned int response ) {
*/
static int http_rx_response ( struct http_request *http, char *response ) {
char *spc;
unsigned int code;
int rc;

DBGC ( http, "HTTP %p response \"%s\"\n", http, response );

/* Check response starts with "HTTP/" */
if ( strncmp ( response, "HTTP/", 5 ) != 0 )
return -EINVAL_RESPONSE;

/* Locate and check response code */
/* Locate and store response code */
spc = strchr ( response, ' ' );
if ( ! spc )
return -EINVAL_RESPONSE;
code = strtoul ( spc, NULL, 10 );
if ( ( rc = http_response_to_rc ( code ) ) != 0 )
return rc;
http->code = strtoul ( spc, NULL, 10 );

/* Move to received headers */
http->rx_state = HTTP_RX_HEADER;
Expand Down Expand Up @@ -488,6 +486,12 @@ static int http_rx_header ( struct http_request *http, char *header ) {
/* An empty header line marks the end of this phase */
if ( ! header[0] ) {
empty_line_buffer ( &http->linebuf );

/* Handle response code */
if ( ( rc = http_response_to_rc ( http->code ) ) != 0 )
return rc;

/* Move to next state */
if ( ( http->rx_state == HTTP_RX_HEADER ) &&
( ! ( http->flags & HTTP_HEAD_ONLY ) ) ) {
DBGC ( http, "HTTP %p start of data\n", http );
Expand Down

0 comments on commit 46df5c9

Please sign in to comment.