From: Stephan Bosch Date: Fri, 8 Nov 2019 16:11:36 +0000 (+0100) Subject: lib-http: http-server-connection - Restructure request callback handling. X-Git-Tag: 2.3.11.2~326 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a18afc4f83254a9a7177f4486227ce6fbea39b5b;p=thirdparty%2Fdovecot%2Fcore.git lib-http: http-server-connection - Restructure request callback handling. Move most of it to http-server-request. --- diff --git a/src/lib-http/http-server-connection.c b/src/lib-http/http-server-connection.c index 315f585b28..be01595d07 100644 --- a/src/lib-http/http-server-connection.c +++ b/src/lib-http/http-server-connection.c @@ -256,32 +256,6 @@ static void http_server_payload_destroyed(struct http_server_request *req) } } -static void http_server_connection_request_callback( - struct http_server_connection *conn, struct http_server_request *req) -{ - /* CONNECT method */ - if (strcmp(req->req.method, "CONNECT") == 0) { - if (conn->callbacks->handle_connect_request == NULL) { - http_server_request_fail(req, 505, "Not Implemented"); - return; - } - if (req->req.target.format != - HTTP_REQUEST_TARGET_FORMAT_AUTHORITY) { - http_server_request_fail(req, 400, "Bad Request"); - return; - } - conn->callbacks->handle_connect_request(conn->context, req, - req->req.target.url); - /* Other methods */ - } else { - if (conn->callbacks->handle_request == NULL) { - http_server_request_fail(req, 505, "Not Implemented"); - return; - } - conn->callbacks->handle_request(conn->context, req); - } -} - static bool http_server_connection_handle_request(struct http_server_connection *conn, struct http_server_request *req) @@ -324,7 +298,7 @@ http_server_connection_handle_request(struct http_server_connection *conn, old_refcount = req->refcount; conn->in_req_callback = TRUE; - http_server_connection_request_callback(conn, req); + http_server_request_callback(req); if (conn->closed) { /* The callback managed to get this connection destroyed/closed */ diff --git a/src/lib-http/http-server-private.h b/src/lib-http/http-server-private.h index 4fa22f299f..9f2cb515ff 100644 --- a/src/lib-http/http-server-private.h +++ b/src/lib-http/http-server-private.h @@ -209,6 +209,8 @@ void http_server_request_abort(struct http_server_request **_req, bool http_server_request_is_complete(struct http_server_request *req); +void http_server_request_callback(struct http_server_request *req); + void http_server_request_halt_payload(struct http_server_request *req); void http_server_request_continue_payload(struct http_server_request *req); diff --git a/src/lib-http/http-server-request.c b/src/lib-http/http-server-request.c index b459924fad..65c669d857 100644 --- a/src/lib-http/http-server-request.c +++ b/src/lib-http/http-server-request.c @@ -259,6 +259,43 @@ void http_server_request_continue_payload(struct http_server_request *req) http_server_connection_trigger_responses(req->conn); } +static void +http_server_request_connect_callback(struct http_server_request *req) +{ + struct http_server_connection *conn = req->conn; + + if (conn->callbacks->handle_connect_request == NULL) { + http_server_request_fail(req, 505, "Not Implemented"); + return; + } + + if (req->req.target.format != + HTTP_REQUEST_TARGET_FORMAT_AUTHORITY) { + http_server_request_fail(req, 400, "Bad Request"); + return; + } + + conn->callbacks->handle_connect_request(conn->context, req, + req->req.target.url); +} + +void http_server_request_callback(struct http_server_request *req) +{ + struct http_server_connection *conn = req->conn; + + if (strcmp(req->req.method, "CONNECT") == 0) { + /* CONNECT method */ + http_server_request_connect_callback(req); + return; + } + + if (conn->callbacks->handle_request == NULL) { + http_server_request_fail(req, 404, "Not Found"); + return; + } + conn->callbacks->handle_request(conn->context, req); +} + void http_server_request_ready_to_respond(struct http_server_request *req) { e_debug(req->event, "Ready to respond");