add more WebDAV methods
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index ff93348..7f12dae 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -2664,9 +2664,19 @@
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 }
};
diff --git a/src/http/ngx_http_parse.c b/src/http/ngx_http_parse.c
index 3151304..b9022bd 100644
--- a/src/http/ngx_http_parse.c
+++ b/src/http/ngx_http_parse.c
@@ -94,23 +94,49 @@
case 3:
if (m[0] == 'G' && m[1] == 'E' && m[2] == 'T') {
r->method = NGX_HTTP_GET;
-
- } else if (m[0] == 'P' && m[1] == 'U' && m[2] == 'T') {
- r->method = NGX_HTTP_PUT;
+ break;
}
+
+ 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') {
- } else if (m[0] == 'H' && m[1] == 'E'
- && m[2] == 'A' && m[3] == 'D')
- {
- r->method = NGX_HTTP_HEAD;
+ 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 @@
{
r->method = NGX_HTTP_MKCOL;
}
+
break;
case 6:
@@ -126,7 +153,46 @@
&& 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;
}
diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h
index 57ffe4c..9df5bd2 100644
--- 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