]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: http-server - Add global request_finished() callback
authorStephan Bosch <stephan.bosch@open-xchange.com>
Mon, 9 Mar 2026 06:51:19 +0000 (07:51 +0100)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 12 Mar 2026 06:37:18 +0000 (06:37 +0000)
src/lib-http/http-server-request.c
src/lib-http/http-server.h

index a9c148d5b5ec0a3e5e95801f22560b32ee56b044..093fdbb3619e10b7e0a1837be432e302ec730a2f 100644 (file)
@@ -424,9 +424,14 @@ void http_server_request_finished(struct http_server_request *req)
        http_server_tunnel_callback_t tunnel_callback = resp->tunnel_callback;
        void *tunnel_context = resp->tunnel_context;
 
+       i_assert(conn != NULL);
        i_assert(req->state < HTTP_SERVER_REQUEST_STATE_FINISHED);
        req->state = HTTP_SERVER_REQUEST_STATE_FINISHED;
 
+       if (conn->callbacks != NULL &&
+           conn->callbacks->request_finished != NULL)
+               conn->callbacks->request_finished(conn->context, req);
+
        http_server_connection_remove_request(conn, req);
        conn->stats.response_count++;
 
index c27170777acf55f460e790628c5e0e7ac43a384a..12dc57f3d4997ab864604ef472e9664c14f43df7 100644 (file)
@@ -343,6 +343,12 @@ struct http_server_callbacks {
                                       struct http_server_request *req,
                                       struct http_url *target);
 
+       /* Called once a request is finished (response is sent). This also
+          catches requests that fail before the handle_request() callback is
+          reached. */
+       void (*request_finished)(void *context,
+                                struct http_server_request *req);
+
        /* Called once the connection is destroyed. */
        void (*connection_destroy)(void *context, const char *reason);
 };