diff options
author | Jo-Philipp Wich <jo@mein.io> | 2018-08-21 11:39:15 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2018-08-21 14:23:02 +0200 |
commit | 30a18cb4bfd8c9997e40d9cd9c8562a751d61ecf (patch) | |
tree | 107257641ad8c9d2978e22a3ddfe9fb3fd3133a4 | |
parent | 796d42bceed2015bb00309a3bf0f49279b070c19 (diff) |
uhttpd: recognize PATCH, PUT and DELETE HTTP methods
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r-- | client.c | 3 | ||||
-rw-r--r-- | file.c | 19 | ||||
-rw-r--r-- | uhttpd.h | 3 |
3 files changed, 25 insertions, 0 deletions
@@ -40,6 +40,9 @@ const char * const http_methods[] = { [UH_HTTP_MSG_POST] = "POST", [UH_HTTP_MSG_HEAD] = "HEAD", [UH_HTTP_MSG_OPTIONS] = "OPTIONS", + [UH_HTTP_MSG_PUT] = "PUT", + [UH_HTTP_MSG_PATCH] = "PATCH", + [UH_HTTP_MSG_DELETE] = "DELETE", }; void uh_http_header(struct client *cl, int code, const char *summary) @@ -357,6 +357,11 @@ static void uh_file_response_304(struct client *cl, struct stat *s) return uh_file_response_ok_hdrs(cl, s); } +static void uh_file_response_405(struct client *cl) +{ + uh_http_header(cl, 405, "Method Not Allowed"); +} + static void uh_file_response_412(struct client *cl) { uh_http_header(cl, 412, "Precondition Failed"); @@ -630,6 +635,20 @@ static void uh_file_request(struct client *cl, const char *url, struct http_request *req = &cl->request; char *error_handler, *escaped_url; + switch (cl->request.method) { + case UH_HTTP_MSG_GET: + case UH_HTTP_MSG_POST: + case UH_HTTP_MSG_HEAD: + case UH_HTTP_MSG_OPTIONS: + break; + + default: + uh_file_response_405(cl); + ustream_printf(cl->us, "\r\n"); + uh_request_done(cl); + return; + } + if (!(pi->stat.st_mode & S_IROTH)) goto error; @@ -92,6 +92,9 @@ enum http_method { UH_HTTP_MSG_POST, UH_HTTP_MSG_HEAD, UH_HTTP_MSG_OPTIONS, + UH_HTTP_MSG_PUT, + UH_HTTP_MSG_PATCH, + UH_HTTP_MSG_DELETE, }; enum http_version { |