diff options
author | Igor Sysoev <igor@sysoev.ru> | 2006-10-28 10:15:31 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2006-10-28 10:15:31 +0000 |
commit | b80a7f4318d13b3c2b030709beee99e6a159c0a5 (patch) | |
tree | f80b0c45bb8d64d9394b4aafcebc4884931b494b /src | |
parent | 4346bab52ea1d933666a078da3b0b470222829d2 (diff) | |
download | nginx-b80a7f4318d13b3c2b030709beee99e6a159c0a5.tar.gz nginx-b80a7f4318d13b3c2b030709beee99e6a159c0a5.zip |
omit "#fragment"
Diffstat (limited to 'src')
-rw-r--r-- | src/http/ngx_http_parse.c | 52 |
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; } |