aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2006-10-28 10:15:31 +0000
committerIgor Sysoev <igor@sysoev.ru>2006-10-28 10:15:31 +0000
commitb80a7f4318d13b3c2b030709beee99e6a159c0a5 (patch)
treef80b0c45bb8d64d9394b4aafcebc4884931b494b /src
parent4346bab52ea1d933666a078da3b0b470222829d2 (diff)
downloadnginx-b80a7f4318d13b3c2b030709beee99e6a159c0a5.tar.gz
nginx-b80a7f4318d13b3c2b030709beee99e6a159c0a5.zip
omit "#fragment"
Diffstat (limited to 'src')
-rw-r--r--src/http/ngx_http_parse.c52
1 files changed, 51 insertions, 1 deletions
diff --git a/src/http/ngx_http_parse.c b/src/http/ngx_http_parse.c
index cc9a6f81e..ddd8d77e6 100644
--- a/src/http/ngx_http_parse.c
+++ b/src/http/ngx_http_parse.c
@@ -282,6 +282,10 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
r->args_start = p + 1;
state = sw_uri;
break;
+ case '#':
+ r->complex_uri = 1;
+ state = sw_uri;
+ break;
case '+':
r->plus_in_uri = 1;
break;
@@ -341,6 +345,10 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
r->args_start = p + 1;
state = sw_uri;
break;
+ case '#':
+ r->complex_uri = 1;
+ state = sw_uri;
+ break;
case '+':
r->plus_in_uri = 1;
break;
@@ -366,6 +374,9 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
r->uri_end = p;
r->http_minor = 9;
goto done;
+ case '#':
+ r->complex_uri = 1;
+ break;
case '\0':
r->zero_in_uri = 1;
break;
@@ -822,6 +833,8 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r)
break;
case '?':
r->args_start = p;
+ goto args;
+ case '#':
goto done;
case '.':
r->uri_ext = u + 1;
@@ -853,6 +866,8 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r)
break;
case '?':
r->args_start = p;
+ goto args;
+ case '#':
goto done;
case '+':
r->plus_in_uri = 1;
@@ -883,6 +898,8 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r)
break;
case '?':
r->args_start = p;
+ goto args;
+ case '#':
goto done;
case '+':
r->plus_in_uri = 1;
@@ -915,6 +932,8 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r)
break;
case '?':
r->args_start = p;
+ goto args;
+ case '#':
goto done;
#if (NGX_WIN32)
case '.':
@@ -958,6 +977,8 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r)
break;
case '?':
r->args_start = p;
+ goto args;
+ case '#':
goto done;
case '+':
r->plus_in_uri = 1;
@@ -1001,7 +1022,11 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r)
break;
}
- if (ch == '\0') {
+ if (ch == '#') {
+ *u++ = ch;
+ ch = *p++;
+
+ } else if (ch == '\0') {
r->zero_in_uri = 1;
}
@@ -1041,6 +1066,31 @@ done:
r->uri_ext = NULL;
return NGX_OK;
+
+args:
+
+ while (p < r->uri_end) {
+ if (*p++ != '#') {
+ continue;
+ }
+
+ r->args.len = p - 1 - r->args_start;
+ r->args.data = r->args_start;
+ r->args_start = NULL;
+
+ break;
+ }
+
+ r->uri.len = u - r->uri.data;
+
+ if (r->uri_ext) {
+ r->exten.len = u - r->uri_ext;
+ r->exten.data = r->uri_ext;
+ }
+
+ r->uri_ext = NULL;
+
+ return NGX_OK;
}