diff --git a/unikernel/server.ml b/unikernel/server.ml index 415c1757..6ec94946 100644 --- a/unikernel/server.ml +++ b/unikernel/server.ml @@ -12,13 +12,33 @@ let request_from_h1 ~scheme { H1.Request.meth; target; headers; _ } = let request_from_h2 { H2.Request.meth; target; scheme; headers } = Mte.{ meth; target; scheme; headers } -let http_1_1_request_handler reqd = - let request = H1.Reqd.request reqd in - Log.debug (fun m -> - m "(HTTP/1.1) request-handler: %S" request.H1.Request.target); - let Mte.{ status; headers; content } = - Mte.request_handler (request_from_h1 ~scheme:"http" request) +let request_handler (reqd : [`H1 of H1.Reqd.t | `H2 of H2.Reqd.t] ) = + let request = + match reqd with + | `H1 reqd -> + request_from_h1 ~scheme:"http" (H1.Reqd.request reqd) + | `H2 reqd -> request_from_h2 (H2.Reqd.request reqd) in + begin + match reqd with + | `H1 _ -> + Log.debug (fun m -> m "(HTTP/1.1) request-handler: %S" request.target); + | `H2 _ -> Log.debug (fun m -> m "(H2) request-handler: %S" request.target); + end; + let Mte.{ status; headers; content } = Mte.request_handler request in + let status = + match status with + | #H1.Status.t as status -> status + | _ -> Fmt.failwith "H2 status response on a H1 request" + in + let headers = H1.Headers.of_list (Headers.to_list headers) in + let response = H1.Response.create ~headers status in + H1.Reqd.respond_with_string reqd response content + +let http_1_1_request_handler reqd = + let request = request_from_h1 ~scheme:"http" (H1.Reqd.request reqd) in + Log.debug (fun m -> m "(HTTP/1.1) request-handler: %S" request.target); + let Mte.{ status; headers; content } = Mte.request_handler request in let status = match status with | #H1.Status.t as status -> status @@ -29,11 +49,9 @@ let http_1_1_request_handler reqd = H1.Reqd.respond_with_string reqd response content let http_2_0_request_handler reqd = - let request = H2.Reqd.request reqd in - Log.debug (fun m -> m "(H2) request-handler: %S" request.H2.Request.target); - let Mte.{ status; headers; content } = - Mte.request_handler (request_from_h2 request) - in + let request = request_from_h2 (H2.Reqd.request reqd) in + Log.debug (fun m -> m "(H2) request-handler: %S" request.target); + let Mte.{ status; headers; content } = Mte.request_handler request in let response = H2.Response.create ~headers status in H2.Reqd.respond_with_string reqd response content