diff options
-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 { |