comparison src/http/ngx_http_parse.c @ 9021:8d0753760546 quic

Merged with the default branch.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 22 Jun 2022 18:34:58 +0400
parents 6674a50cbb6c ef6a3a99a81a
children dacad3a9c7b8
comparison
equal deleted inserted replaced
9020:efbcdb9b37dc 9021:8d0753760546
1958 1958
1959 return NGX_ERROR; 1959 return NGX_ERROR;
1960 } 1960 }
1961 1961
1962 1962
1963 ngx_int_t 1963 ngx_table_elt_t *
1964 ngx_http_parse_multi_header_lines(ngx_array_t *headers, ngx_str_t *name, 1964 ngx_http_parse_multi_header_lines(ngx_http_request_t *r,
1965 ngx_str_t *value) 1965 ngx_table_elt_t *headers, ngx_str_t *name, ngx_str_t *value)
1966 { 1966 {
1967 ngx_uint_t i; 1967 u_char *start, *last, *end, ch;
1968 u_char *start, *last, *end, ch; 1968 ngx_table_elt_t *h;
1969 ngx_table_elt_t **h; 1969
1970 1970 for (h = headers; h; h = h->next) {
1971 h = headers->elts; 1971
1972 1972 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1973 for (i = 0; i < headers->nelts; i++) { 1973 "parse header: \"%V: %V\"", &h->key, &h->value);
1974 1974
1975 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, headers->pool->log, 0, 1975 if (name->len > h->value.len) {
1976 "parse header: \"%V: %V\"", &h[i]->key, &h[i]->value);
1977
1978 if (name->len > h[i]->value.len) {
1979 continue; 1976 continue;
1980 } 1977 }
1981 1978
1982 start = h[i]->value.data; 1979 start = h->value.data;
1983 end = h[i]->value.data + h[i]->value.len; 1980 end = h->value.data + h->value.len;
1984 1981
1985 while (start < end) { 1982 while (start < end) {
1986 1983
1987 if (ngx_strncasecmp(start, name->data, name->len) != 0) { 1984 if (ngx_strncasecmp(start, name->data, name->len) != 0) {
1988 goto skip; 1985 goto skip;
1992 /* void */ 1989 /* void */
1993 } 1990 }
1994 1991
1995 if (value == NULL) { 1992 if (value == NULL) {
1996 if (start == end || *start == ',') { 1993 if (start == end || *start == ',') {
1997 return i; 1994 return h;
1998 } 1995 }
1999 1996
2000 goto skip; 1997 goto skip;
2001 } 1998 }
2002 1999
2012 } 2009 }
2013 2010
2014 value->len = last - start; 2011 value->len = last - start;
2015 value->data = start; 2012 value->data = start;
2016 2013
2017 return i; 2014 return h;
2018 2015
2019 skip: 2016 skip:
2020 2017
2021 while (start < end) { 2018 while (start < end) {
2022 ch = *start++; 2019 ch = *start++;
2027 2024
2028 while (start < end && *start == ' ') { start++; } 2025 while (start < end && *start == ' ') { start++; }
2029 } 2026 }
2030 } 2027 }
2031 2028
2032 return NGX_DECLINED; 2029 return NULL;
2033 } 2030 }
2034 2031
2035 2032
2036 ngx_int_t 2033 ngx_table_elt_t *
2037 ngx_http_parse_set_cookie_lines(ngx_array_t *headers, ngx_str_t *name, 2034 ngx_http_parse_set_cookie_lines(ngx_http_request_t *r,
2038 ngx_str_t *value) 2035 ngx_table_elt_t *headers, ngx_str_t *name, ngx_str_t *value)
2039 { 2036 {
2040 ngx_uint_t i; 2037 u_char *start, *last, *end;
2041 u_char *start, *last, *end; 2038 ngx_table_elt_t *h;
2042 ngx_table_elt_t **h; 2039
2043 2040 for (h = headers; h; h = h->next) {
2044 h = headers->elts; 2041
2045 2042 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
2046 for (i = 0; i < headers->nelts; i++) { 2043 "parse header: \"%V: %V\"", &h->key, &h->value);
2047 2044
2048 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, headers->pool->log, 0, 2045 if (name->len >= h->value.len) {
2049 "parse header: \"%V: %V\"", &h[i]->key, &h[i]->value);
2050
2051 if (name->len >= h[i]->value.len) {
2052 continue; 2046 continue;
2053 } 2047 }
2054 2048
2055 start = h[i]->value.data; 2049 start = h->value.data;
2056 end = h[i]->value.data + h[i]->value.len; 2050 end = h->value.data + h->value.len;
2057 2051
2058 if (ngx_strncasecmp(start, name->data, name->len) != 0) { 2052 if (ngx_strncasecmp(start, name->data, name->len) != 0) {
2059 continue; 2053 continue;
2060 } 2054 }
2061 2055
2075 } 2069 }
2076 2070
2077 value->len = last - start; 2071 value->len = last - start;
2078 value->data = start; 2072 value->data = start;
2079 2073
2080 return i; 2074 return h;
2081 } 2075 }
2082 2076
2083 return NGX_DECLINED; 2077 return NULL;
2084 } 2078 }
2085 2079
2086 2080
2087 ngx_int_t 2081 ngx_int_t
2088 ngx_http_arg(ngx_http_request_t *r, u_char *name, size_t len, ngx_str_t *value) 2082 ngx_http_arg(ngx_http_request_t *r, u_char *name, size_t len, ngx_str_t *value)