mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-15 18:17:01 +00:00
MINOR: http: Add function to parse value of the header Status
It will be used by the mux FCGI to get the status a response.
This commit is contained in:
parent
5c6fefc8eb
commit
341fac1eb2
@ -154,6 +154,7 @@ int http_find_next_url_param(const char **chunks,
|
|||||||
|
|
||||||
int http_parse_header(const struct ist hdr, struct ist *name, struct ist *value);
|
int http_parse_header(const struct ist hdr, struct ist *name, struct ist *value);
|
||||||
int http_parse_stline(const struct ist line, struct ist *p1, struct ist *p2, struct ist *p3);
|
int http_parse_stline(const struct ist line, struct ist *p1, struct ist *p2, struct ist *p3);
|
||||||
|
int http_parse_status_val(const struct ist value, struct ist *status, struct ist *reason);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Given a path string and its length, find the position of beginning of the
|
* Given a path string and its length, find the position of beginning of the
|
||||||
|
31
src/http.c
31
src/http.c
@ -980,3 +980,34 @@ int http_parse_stline(const struct ist line, struct ist *p1, struct ist *p2, str
|
|||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Parses value of a Status header with the following format: "Status: Code[
|
||||||
|
* Reason]". The parsing is pretty naive and just skip spaces. It return the
|
||||||
|
* numeric value of the status code.
|
||||||
|
*/
|
||||||
|
int http_parse_status_val(const struct ist value, struct ist *status, struct ist *reason)
|
||||||
|
{
|
||||||
|
char *p = value.ptr;
|
||||||
|
char *end = p + value.len;
|
||||||
|
uint16_t code;
|
||||||
|
|
||||||
|
status->len = reason->len = 0;
|
||||||
|
|
||||||
|
/* Skip leading spaces */
|
||||||
|
for (; p < end && HTTP_IS_SPHT(*p); p++);
|
||||||
|
|
||||||
|
/* Set the status part */
|
||||||
|
status->ptr = p;
|
||||||
|
for (; p < end && HTTP_IS_TOKEN(*p); p++);
|
||||||
|
status->len = p - status->ptr;
|
||||||
|
|
||||||
|
/* Skip spaces between status and reason */
|
||||||
|
for (; p < end && HTTP_IS_SPHT(*p); p++);
|
||||||
|
|
||||||
|
/* the remaining is the reason */
|
||||||
|
reason->ptr = p;
|
||||||
|
reason->len = end - p;
|
||||||
|
|
||||||
|
code = strl2ui(status->ptr, status->len);
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user