This commit is contained in:
swrup 2025-11-11 02:07:51 +01:00
parent aa2ff7b2f0
commit 2f3113f55d
11742 changed files with 1223940 additions and 0 deletions

View file

@ -0,0 +1,22 @@
open Mirage
(* Network configuration *)
let stack = generic_stackv4 default_network
(* Dependencies *)
let server =
let packages =
[ package ~pin:"file://../../" "h2-lwt"
; package ~pin:"file://../../" "h2-mirage"
]
in
foreign "Unikernel.Make" ~packages (console @-> pclock @-> http2 @-> job)
let app = http2_server @@ conduit_direct stack
let () =
register
"h2_unikernel"
[ server $ default_console $ default_posix_clock $ app ]

View file

@ -0,0 +1,54 @@
open Lwt.Infix
open H2
module type HTTP2 = H2_mirage.Server
module Dispatch (C : Mirage_console.S) (Http2 : HTTP2) = struct
let log c fmt = Printf.ksprintf (C.log c) fmt
let get_content c path =
log c "Replying: %s" path >|= fun () -> "Hello from the h2 unikernel"
let dispatcher c reqd =
let { Request.target; _ } = Reqd.request reqd in
Lwt.catch
(fun () ->
get_content c target >|= fun body ->
let response =
Response.create
~headers:
(Headers.of_list
[ "content-length", body |> String.length |> string_of_int ])
`OK
in
Reqd.respond_with_string reqd response body)
(fun exn ->
let response = Response.create `Internal_server_error in
Lwt.return
(Reqd.respond_with_string reqd response (Printexc.to_string exn)))
|> ignore
let serve c dispatch =
let error_handler ?request:_ _error mk_response =
let response_body = mk_response Headers.empty in
Body.Writer.write_string response_body "Error handled";
Body.Writer.flush response_body (fun () ->
Body.Writer.close response_body)
in
Http2.create_connection_handler
?config:None
~request_handler:(dispatch c)
~error_handler
end
(** Server boilerplate *)
module Make (C : Mirage_console.S) (Clock : Mirage_clock.PCLOCK) (Http2 : HTTP2) =
struct
module D = Dispatch (C) (Http2)
let log c fmt = Printf.ksprintf (C.log c) fmt
let start c _clock http2 =
log c "started unikernel listen on port 8001" >>= fun () ->
http2 (`TCP 8001) @@ D.serve c D.dispatcher
end