]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: http-server-connection - Restructure request callback handling.
authorStephan Bosch <stephan.bosch@open-xchange.com>
Fri, 8 Nov 2019 16:11:36 +0000 (17:11 +0100)
committermartti.rannanjarvi <martti.rannanjarvi@open-xchange.com>
Sat, 18 Apr 2020 14:55:11 +0000 (14:55 +0000)
Move most of it to http-server-request.

src/lib-http/http-server-connection.c
src/lib-http/http-server-private.h
src/lib-http/http-server-request.c

index 315f585b284d7a4aac8dbb139e5c3b223ec4925b..be01595d07db520e555321621ce1a1573f844ca0 100644 (file)
@@ -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
                 */
index 4fa22f299f471204ba155520b3bf880ffc9fc164..9f2cb515ffce197acf10e0b6a281a17aaf46aa10 100644 (file)
@@ -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);
 
index b459924fad277bc728c9d590a1521d199bfd2c7b..65c669d857f5210ef048a00062c15d72d711430b 100644 (file)
@@ -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");