From e59827e90c65f781cf054b52614308f538f7b018 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 14 Feb 2021 18:14:16 +0400 Subject: Added rest of HTTP methods and default handler for unhandled methods. --- spider/src/http_server.rs | 55 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 6 deletions(-) (limited to 'spider/src/http_server.rs') diff --git a/spider/src/http_server.rs b/spider/src/http_server.rs index fc740d6..f12c45d 100644 --- a/spider/src/http_server.rs +++ b/spider/src/http_server.rs @@ -7,9 +7,46 @@ use crate::response::Response; use crate::http_method::HttpMethod; pub trait HttpHandler { - // TODO(andrew): add default behaviour to handlers? - fn do_get(&self, request: Request) -> Response; - fn do_post(&self, request: Request) -> Response; + fn do_get(&self, _request: Request) -> Response { + return self.default_action(_request); + } + + fn do_head(&self, _request: Request) -> Response { + return self.default_action(_request); + } + + fn do_post(&self, _request: Request) -> Response { + return self.default_action(_request); + } + + fn do_put(&self, _request: Request) -> Response { + return self.default_action(_request); + } + + fn do_delete(&self, _request: Request) -> Response { + return self.default_action(_request); + } + + fn do_connect(&self, _request: Request) -> Response { + return self.default_action(_request); + } + + fn do_options(&self, _request: Request) -> Response { + return self.default_action(_request); + } + + fn do_trace(&self, _request: Request) -> Response { + return self.default_action(_request); + } + + fn do_patch(&self, _request: Request) -> Response { + return self.default_action(_request); + } + + fn default_action(&self, _request: Request) -> Response { + let msg = String::from("

Method not allowed

"); + return Response::html(msg, 405); + } } pub struct HttpServer { @@ -70,10 +107,16 @@ impl HttpServer where T: HttpHandler { None => return Err("Request parsed with errors") }; - // TODO(andrew): add more methods. let response = match request.method { - HttpMethod::GET => self.handler.do_get(request), - HttpMethod::POST => self.handler.do_post(request) + HttpMethod::GET => self.handler.do_get(request), + HttpMethod::HEAD => self.handler.do_head(request), + HttpMethod::POST => self.handler.do_post(request), + HttpMethod::PUT => self.handler.do_put(request), + HttpMethod::DELETE => self.handler.do_delete(request), + HttpMethod::CONNECT => self.handler.do_connect(request), + HttpMethod::OPTIONS => self.handler.do_options(request), + HttpMethod::TRACE => self.handler.do_trace(request), + HttpMethod::PATCH => self.handler.do_patch(request), }; let response = response.format(); match stream.write(&response) { -- cgit v1.2.3