summaryrefslogtreecommitdiffhomepage
path: root/src/http/ngx_http_parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/http/ngx_http_parse.c')
-rw-r--r--src/http/ngx_http_parse.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/src/http/ngx_http_parse.c b/src/http/ngx_http_parse.c
index e60dc425e..81f689e5b 100644
--- a/src/http/ngx_http_parse.c
+++ b/src/http/ngx_http_parse.c
@@ -10,6 +10,10 @@
#include <ngx_http.h>
+static ngx_table_elt_t *ngx_http_parse_multi_header_lines_internal(
+ ngx_http_request_t *r, ngx_table_elt_t *headers, ngx_str_t *name,
+ ngx_str_t *value, u_char sep);
+
static uint32_t usual[] = {
0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */
@@ -1998,6 +2002,24 @@ ngx_table_elt_t *
ngx_http_parse_multi_header_lines(ngx_http_request_t *r,
ngx_table_elt_t *headers, ngx_str_t *name, ngx_str_t *value)
{
+ return ngx_http_parse_multi_header_lines_internal(r, headers, name, value,
+ ',');
+}
+
+
+ngx_table_elt_t *
+ngx_http_parse_cookie_lines(ngx_http_request_t *r,
+ ngx_table_elt_t *headers, ngx_str_t *name, ngx_str_t *value)
+{
+ return ngx_http_parse_multi_header_lines_internal(r, headers, name, value,
+ ';');
+}
+
+
+static ngx_table_elt_t *
+ngx_http_parse_multi_header_lines_internal(ngx_http_request_t *r,
+ ngx_table_elt_t *headers, ngx_str_t *name, ngx_str_t *value, u_char sep)
+{
u_char *start, *last, *end, ch;
ngx_table_elt_t *h;
@@ -2024,7 +2046,7 @@ ngx_http_parse_multi_header_lines(ngx_http_request_t *r,
}
if (value == NULL) {
- if (start == end || *start == ',') {
+ if (start == end || *start == sep) {
return h;
}
@@ -2038,7 +2060,7 @@ ngx_http_parse_multi_header_lines(ngx_http_request_t *r,
while (start < end && *start == ' ') { start++; }
- for (last = start; last < end && *last != ';'; last++) {
+ for (last = start; last < end && *last != sep; last++) {
/* void */
}
@@ -2051,7 +2073,7 @@ ngx_http_parse_multi_header_lines(ngx_http_request_t *r,
while (start < end) {
ch = *start++;
- if (ch == ';' || ch == ',') {
+ if (ch == sep) {
break;
}
}