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))