changeset 844:9ddb57468082

add more WebDAV methods
author Igor Sysoev <igor@sysoev.ru>
date Tue, 14 Nov 2006 12:43:48 +0000
parents ebab9490204c
children eb5cf273e5d2
files src/http/ngx_http_core_module.c src/http/ngx_http_parse.c src/http/ngx_http_request.h
diffstat 3 files changed, 95 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -2664,9 +2664,19 @@ ngx_http_core_root(ngx_conf_t *cf, ngx_c
 
 
 static ngx_http_method_name_t  ngx_methods_names[] = {
-   { "GET",  (uint32_t) ~NGX_HTTP_GET },
-   { "HEAD", (uint32_t) ~NGX_HTTP_HEAD },
-   { "POST", (uint32_t) ~NGX_HTTP_POST },
+   { "GET",       (uint32_t) ~NGX_HTTP_GET },
+   { "HEAD",      (uint32_t) ~NGX_HTTP_HEAD },
+   { "POST",      (uint32_t) ~NGX_HTTP_POST },
+   { "PUT",       (uint32_t) ~NGX_HTTP_PUT },
+   { "DELETE",    (uint32_t) ~NGX_HTTP_DELETE },
+   { "MKCOL",     (uint32_t) ~NGX_HTTP_MKCOL },
+   { "COPY",      (uint32_t) ~NGX_HTTP_COPY },
+   { "MOVE",      (uint32_t) ~NGX_HTTP_MOVE },
+   { "OPTIONS",   (uint32_t) ~NGX_HTTP_OPTIONS },
+   { "PROPFIND" , (uint32_t) ~NGX_HTTP_PROPFIND },
+   { "PROPPATCH", (uint32_t) ~NGX_HTTP_PROPPATCH },
+   { "LOCK",      (uint32_t) ~NGX_HTTP_LOCK },
+   { "UNLOCK",    (uint32_t) ~NGX_HTTP_UNLOCK },
    { NULL, 0 }
 };
 
--- a/src/http/ngx_http_parse.c
+++ b/src/http/ngx_http_parse.c
@@ -94,23 +94,49 @@ ngx_http_parse_request_line(ngx_http_req
                 case 3:
                     if (m[0] == 'G' && m[1] == 'E' && m[2] == 'T') {
                         r->method = NGX_HTTP_GET;
+                        break;
+                    }
 
-                    } else if (m[0] == 'P' && m[1] == 'U' && m[2] == 'T') {
+                    if (m[0] == 'P' && m[1] == 'U' && m[2] == 'T') {
                         r->method = NGX_HTTP_PUT;
+                        break;
                     }
+
                     break;
 
                 case 4:
-                    if (m[0] == 'P' && m[1] == 'O'
-                        && m[2] == 'S' && m[3] == 'T')
-                    {
-                        r->method = NGX_HTTP_POST;
+                    if (m[1] == 'O') {
+
+                        if (m[0] == 'P' && m[2] == 'S' && m[3] == 'T') {
+                            r->method = NGX_HTTP_POST;
+                            break;
+                        }
+
+                        if (m[0] == 'C' && m[2] == 'P' && m[3] == 'Y') {
+                            r->method = NGX_HTTP_COPY;
+                            break;
+                        }
 
-                    } else if (m[0] == 'H' && m[1] == 'E'
-                               && m[2] == 'A' && m[3] == 'D')
-                    {
-                        r->method = NGX_HTTP_HEAD;
+                        if (m[0] == 'M' && m[2] == 'V' && m[3] == 'E') {
+                            r->method = NGX_HTTP_MOVE;
+                            break;
+                        }
+
+                        if (m[0] == 'L' && m[2] == 'C' && m[3] == 'K') {
+                            r->method = NGX_HTTP_LOCK;
+                            break;
+                        }
+
+                    } else {
+
+                        if (m[0] == 'H' && m[1] == 'E'
+                            && m[2] == 'A' && m[3] == 'D')
+                        {
+                            r->method = NGX_HTTP_HEAD;
+                            break;
+                        }
                     }
+
                     break;
 
                 case 5:
@@ -119,6 +145,7 @@ ngx_http_parse_request_line(ngx_http_req
                     {
                         r->method = NGX_HTTP_MKCOL;
                     }
+
                     break;
 
                 case 6:
@@ -126,7 +153,46 @@ ngx_http_parse_request_line(ngx_http_req
                         && m[3] == 'E' && m[4] == 'T' && m[5] == 'E')
                     {
                         r->method = NGX_HTTP_DELETE;
+                        break;
                     }
+
+                    if (m[0] == 'U' && m[1] == 'N' && m[2] == 'L'
+                        && m[3] == 'O' && m[4] == 'C' && m[5] == 'K')
+                    {
+                        r->method = NGX_HTTP_UNLOCK;
+                        break;
+                    }
+
+                    break;
+
+                case 7:
+                    if (m[0] == 'O' && m[1] == 'P'
+                        && m[2] == 'T' && m[3] == 'I'
+                        && m[4] == 'O' && m[5] == 'N' && m[6] == 'S')
+                    {
+                        r->method = NGX_HTTP_OPTIONS;
+                    }
+
+                    break;
+
+                case 8:
+                    if (m[0] == 'P' && m[1] == 'R'
+                        && m[2] == 'O' && m[3] == 'P' && m[4] == 'F'
+                        && m[5] == 'I' && m[6] == 'N' && m[7] == 'D')
+                    {
+                        r->method = NGX_HTTP_PROPFIND;
+                    }
+
+                    break;
+
+                case 9:
+                    if (m[0] == 'P' && m[1] == 'R' && m[2] == 'O'
+                        && m[3] == 'P' && m[4] == 'P' && m[5] == 'A'
+                        && m[6] == 'T' && m[7] == 'C' && m[8] == 'H')
+                    {
+                        r->method = NGX_HTTP_PROPPATCH;
+                    }
+
                     break;
                 }
 
--- a/src/http/ngx_http_request.h
+++ b/src/http/ngx_http_request.h
@@ -30,6 +30,13 @@
 #define NGX_HTTP_PUT                       0x0010
 #define NGX_HTTP_DELETE                    0x0020
 #define NGX_HTTP_MKCOL                     0x0040
+#define NGX_HTTP_COPY                      0x0080
+#define NGX_HTTP_MOVE                      0x0100
+#define NGX_HTTP_OPTIONS                   0x0200
+#define NGX_HTTP_PROPFIND                  0x0400
+#define NGX_HTTP_PROPPATCH                 0x0800
+#define NGX_HTTP_LOCK                      0x1000
+#define NGX_HTTP_UNLOCK                    0x2000
 
 #define NGX_HTTP_CONNECTION_CLOSE          1
 #define NGX_HTTP_CONNECTION_KEEP_ALIVE     2