FastCGI implementation in OCaml
1(* Basic filter that uppercases text content *)
2
3open Fastcgi
4
5let uppercase_filter_logic filter_req response =
6 let input = filter_req.Filter.data_stream in
7 let output = response.stdout in
8
9 (* Simple text transformation: read input and write uppercase output *)
10 let buffer = Cstruct.create 4096 in
11 let rec process () =
12 try
13 let n = Eio.Flow.single_read input buffer in
14 if n > 0 then begin
15 let text = Cstruct.to_string ~len:n buffer in
16 let uppercase_text = String.uppercase_ascii text in
17 Eio.Flow.copy_string uppercase_text output;
18 process ()
19 end
20 with
21 | End_of_file -> ()
22 in
23 process ()
24
25let filter_handler request response =
26 let filter_req = Filter.request_of_fastcgi request in
27
28 (* Write HTTP headers *)
29 Eio.Flow.copy_string "Status: 200 OK\r\n" response.stdout;
30 Eio.Flow.copy_string "Content-Type: text/plain\r\n" response.stdout;
31 Eio.Flow.copy_string "\r\n" response.stdout;
32
33 (* Process the data stream *)
34 uppercase_filter_logic filter_req response;
35
36 { app_status = 0; protocol_status = Request_complete }
37
38let () = Eio_main.run @@ fun env ->
39 let net = Eio.Stdenv.net env in
40 Eio.Switch.run @@ fun sw ->
41 Server.run_default ~sw ~net
42 ~handler:(Handler.Filter filter_handler)
43 ~listen_address:(`Tcp ("127.0.0.1", 9003))