@@ -88,6 +88,7 @@ type t = {
8888 mutable tcp_server : IO.TCP_server .t option ;
8989 mutable handler : IO.Input .t Request .t -> Response .t ;
9090 (* * toplevel handler, if any *)
91+ mutable head_middlewares : Head_middleware .t list ;
9192 mutable middlewares : (int * Middleware .t ) list ; (* * Global middlewares *)
9293 mutable middlewares_sorted : (int * Middleware .t ) list lazy_t ;
9394 (* * sorted version of {!middlewares} *)
@@ -128,6 +129,9 @@ let add_middleware ~stage self m =
128129 self.middlewares < - (stage, m) :: self.middlewares;
129130 self.middlewares_sorted < - lazy (sort_middlewares_ self.middlewares)
130131
132+ let add_head_middleware (self : t ) m : unit =
133+ self.head_middlewares < - m :: self.head_middlewares
134+
131135let add_decode_request_cb self f =
132136 (* turn it into a middleware *)
133137 let m h req ~resp =
@@ -258,6 +262,7 @@ let add_route_server_sent_handler ?accept ?(middlewares = []) self route f =
258262let add_upgrade_handler ?(accept = fun _ -> Ok () ) ?(middlewares = [] )
259263 (self : t ) route f : unit =
260264 let ph req : handler_result option =
265+ let middlewares = List. rev_append self.head_middlewares middlewares in
261266 if req.Request. meth <> `GET then
262267 None
263268 else (
@@ -274,7 +279,7 @@ let add_upgrade_handler ?(accept = fun _ -> Ok ()) ?(middlewares = [])
274279let clear_bytes_ bs = Bytes. fill bs 0 (Bytes. length bs) '\x00'
275280
276281let create_from ?(enable_logging = not Log. dummy) ?(buf_size = 16 * 1_024 )
277- ?(middlewares = [] ) ~backend () : t =
282+ ?(head_middlewares = [] ) ?( middlewares = [] ) ~backend () : t =
278283 let handler _req = Response. fail ~code: 404 " no top handler" in
279284 let self =
280285 {
@@ -283,6 +288,7 @@ let create_from ?(enable_logging = not Log.dummy) ?(buf_size = 16 * 1_024)
283288 tcp_server = None ;
284289 handler;
285290 path_handlers = [] ;
291+ head_middlewares;
286292 middlewares = [] ;
287293 middlewares_sorted = lazy [] ;
288294 bytes_pool =
0 commit comments