Skip to content

Instantly share code, notes, and snippets.

@hcarty
Created January 16, 2019 04:22
Show Gist options
  • Save hcarty/724354d7a8c1f42a50b642bf7f29f6ca to your computer and use it in GitHub Desktop.
Save hcarty/724354d7a8c1f42a50b642bf7f29f6ca to your computer and use it in GitHub Desktop.
Simple WIP http/af server
let make_headers content_length =
Httpaf.Headers.of_list
[("content-length", string_of_int content_length); ("connection", "close")]
let request_handler _client_address (reqd : Lwt_unix.file_descr Httpaf.Reqd.t)
=
let request = Httpaf.Reqd.request reqd in
let uri = Uri.of_string request.target in
let meth = request.meth in
match (meth, Uri.path uri) with
| `PUT, "/echo" ->
let headers = make_headers 2 in
Httpaf.Reqd.respond_with_string reqd
(Httpaf.Response.create ~headers `OK)
"ok"
| _, _ ->
let headers = make_headers 4 in
Httpaf.Reqd.respond_with_string reqd
(Httpaf.Response.create ~headers `Not_implemented)
"test"
let error_handler _ ?request _ _ = ignore request
let connection_handler =
Httpaf_lwt.Server.create_connection_handler ~request_handler ~error_handler
let () =
let listen_address = Unix.(ADDR_INET (inet_addr_loopback, 8080)) in
Lwt.async (fun () ->
let%lwt _server =
Lwt_io.establish_server_with_client_socket listen_address
connection_handler
in
Lwt_fmt.printf "Started!@." ) ;
let forever, _ = Lwt.wait () in
Lwt_main.run forever
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment