]> git.kaiwu.me - nginx.git/commitdiff
add more WebDAV methods
authorIgor Sysoev <igor@sysoev.ru>
Tue, 14 Nov 2006 12:43:48 +0000 (12:43 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Tue, 14 Nov 2006 12:43:48 +0000 (12:43 +0000)
src/http/ngx_http_core_module.c
src/http/ngx_http_parse.c
src/http/ngx_http_request.h

index ff933481fa47727abe3ded32547a0155b374f317..7f12daef11694dbbc39b7ba856dfbb63f5b62bdd 100644 (file)
@@ -2664,9 +2664,19 @@ ngx_http_core_root(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 
 
 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 }
 };
 
index 3151304a9df485e052897ffff8a31c434b7af8ad..b9022bdce290c0deaa1d60ea0b4807f373b3255f 100644 (file)
@@ -94,23 +94,49 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
                 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;
-
-                    } else if (m[0] == 'H' && m[1] == 'E'
-                               && m[2] == 'A' && m[3] == 'D')
-                    {
-                        r->method = NGX_HTTP_HEAD;
+                    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;
+                        }
+
+                        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_request_t *r, ngx_buf_t *b)
                     {
                         r->method = NGX_HTTP_MKCOL;
                     }
+
                     break;
 
                 case 6:
@@ -126,7 +153,46 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
                         && 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;
                 }
 
index 57ffe4c7716e54fc138f33e5a34d31c15dfbe608..9df5bd2ff5f501870125341d626b7e16d230c9f8 100644 (file)
 #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