aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman Arutyunyan <arut@nginx.com>2020-11-25 17:57:43 +0000
committerRoman Arutyunyan <arut@nginx.com>2020-11-25 17:57:43 +0000
commit7cfc5eb11fbfe3beb9d793dbacae70fb658d46c2 (patch)
treeb63a794cf1330bb69c0c137c0387265792fea785 /src
parent9129fb3db9e2f9899161e9573e7a19c774a0df6a (diff)
downloadnginx-7cfc5eb11fbfe3beb9d793dbacae70fb658d46c2.tar.gz
nginx-7cfc5eb11fbfe3beb9d793dbacae70fb658d46c2.zip
HTTP/3: eliminated r->method_start.
The field was introduced to ease parsing HTTP/3 requests. The change reduces diff to the default branch.
Diffstat (limited to 'src')
-rw-r--r--src/http/ngx_http_parse.c7
-rw-r--r--src/http/ngx_http_request.c8
-rw-r--r--src/http/ngx_http_request.h1
-rw-r--r--src/http/v3/ngx_http_v3_request.c15
4 files changed, 14 insertions, 17 deletions
diff --git a/src/http/ngx_http_parse.c b/src/http/ngx_http_parse.c
index 2015f56b2..f8ec03c50 100644
--- a/src/http/ngx_http_parse.c
+++ b/src/http/ngx_http_parse.c
@@ -145,7 +145,6 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
case sw_start:
r->parse_start = p;
r->request_start = p;
- r->method_start = p;
if (ch == CR || ch == LF) {
break;
@@ -160,7 +159,7 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
case sw_method:
if (ch == ' ') {
- r->method_end = p;
+ r->method_end = p - 1;
m = r->request_start;
switch (p - m) {
@@ -833,10 +832,6 @@ done:
r->request_end = p;
}
- if (r->http_protocol.data) {
- r->http_protocol.len = r->request_end - r->http_protocol.data;
- }
-
r->http_version = r->http_major * 1000 + r->http_minor;
r->state = sw_start;
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index 3b9e59005..a60c5758f 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -1162,8 +1162,12 @@ ngx_http_process_request_line(ngx_event_t *rev)
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
"http request line: \"%V\"", &r->request_line);
- r->method_name.len = r->method_end - r->method_start;
- r->method_name.data = r->method_start;
+ r->method_name.len = r->method_end - r->request_start + 1;
+ r->method_name.data = r->request_line.data;
+
+ if (r->http_protocol.data) {
+ r->http_protocol.len = r->request_end - r->http_protocol.data;
+ }
if (ngx_http_process_request_uri(r) != NGX_OK) {
break;
diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h
index 3d33d93d4..9a610e805 100644
--- a/src/http/ngx_http_request.h
+++ b/src/http/ngx_http_request.h
@@ -585,7 +585,6 @@ struct ngx_http_request_s {
u_char *args_start;
u_char *request_start;
u_char *request_end;
- u_char *method_start;
u_char *method_end;
u_char *schema_start;
u_char *schema_end;
diff --git a/src/http/v3/ngx_http_v3_request.c b/src/http/v3/ngx_http_v3_request.c
index 5511e3031..2ff0440d9 100644
--- a/src/http/v3/ngx_http_v3_request.c
+++ b/src/http/v3/ngx_http_v3_request.c
@@ -129,11 +129,9 @@ ngx_http_v3_parse_request(ngx_http_request_t *r, ngx_buf_t *b)
continue;
}
- ngx_str_set(&r->http_protocol, "HTTP/3.0");
-
- len = (r->method_end - r->method_start) + 1
+ len = r->method_name.len + 1
+ (r->uri_end - r->uri_start) + 1
- + sizeof("HTTP/3") - 1;
+ + sizeof("HTTP/3.0") - 1;
p = ngx_pnalloc(c->pool, len);
if (p == NULL) {
@@ -142,11 +140,13 @@ ngx_http_v3_parse_request(ngx_http_request_t *r, ngx_buf_t *b)
r->request_start = p;
- p = ngx_cpymem(p, r->method_start, r->method_end - r->method_start);
+ p = ngx_cpymem(p, r->method_name.data, r->method_name.len);
+ r->method_end = p - 1;
*p++ = ' ';
p = ngx_cpymem(p, r->uri_start, r->uri_end - r->uri_start);
*p++ = ' ';
- p = ngx_cpymem(p, "HTTP/3", sizeof("HTTP/3") - 1);
+ r->http_protocol.data = p;
+ p = ngx_cpymem(p, "HTTP/3.0", sizeof("HTTP/3.0") - 1);
r->request_end = p;
r->state = 0;
@@ -309,8 +309,7 @@ ngx_http_v3_process_pseudo_header(ngx_http_request_t *r, ngx_str_t *name,
c = r->connection;
if (name->len == 7 && ngx_strncmp(name->data, ":method", 7) == 0) {
- r->method_start = value->data;
- r->method_end = value->data + value->len;
+ r->method_name = *value;
for (i = 0; i < sizeof(ngx_http_v3_methods)
/ sizeof(ngx_http_v3_methods[0]); i++)