FastCGI implementation in OCaml
1(** FastCGI protocol implementation for OCaml using Eio. 2 3 This library provides a complete implementation of the FastCGI protocol 4 for building high-performance web applications in OCaml. *) 5 6 7(** {1 Core Protocol Components} *) 8 9(** Record-level protocol handling *) 10module Record = Fastcgi_record 11 12(** Request-level state machine and application interface *) 13module Request = Fastcgi_request 14 15(** {1 High-level Request Processing} *) 16 17(** Request handler function type *) 18type handler = Request.t -> 19 stdout:Eio.Flow.sink_ty Eio.Resource.t -> 20 stderr:Eio.Flow.sink_ty Eio.Resource.t -> 21 Request.app_status 22 23(** [read_request_from_flow ~sw flow] reads a complete FastCGI request from flow. 24 Processes BEGIN_REQUEST, PARAMS, STDIN, and DATA records until complete. 25 Returns the populated request context. *) 26val read_request_from_flow : sw:Eio.Switch.t -> 'a Eio.Flow.source -> (Request.t, string) result 27 28(** [write_response ~sw request ~stdout ~stderr sink app_status] writes FastCGI response. 29 Reads from stdout and stderr flows, converts to FastCGI records, and writes to sink. 30 Automatically handles stream termination and END_REQUEST. *) 31val write_response : 32 sw:Eio.Switch.t -> 33 Request.t -> 34 stdout:'a Eio.Flow.source -> 35 stderr:'a Eio.Flow.source -> 36 'a Eio.Flow.sink -> 37 Request.app_status -> unit 38 39(** [process_request ~sw request handler sink] processes complete request. 40 Calls handler with flows for stdout/stderr output, then writes response to sink. *) 41val process_request : 42 sw:Eio.Switch.t -> 43 Request.t -> 44 handler -> 45 Eio.Flow.sink_ty Eio.Resource.t -> unit 46 47(** [process_request_with_flows ~sw request ~stdout ~stderr sink app_status] 48 processes request using provided output flows. *) 49val process_request_with_flows : 50 sw:Eio.Switch.t -> 51 Request.t -> 52 stdout:'a Eio.Flow.source -> 53 stderr:'a Eio.Flow.source -> 54 'a Eio.Flow.sink -> 55 Request.app_status -> unit 56 57(** {1 Connection Management} *) 58 59(** [handle_connection ~sw flow handler] handles complete FastCGI connection. 60 Reads requests from flow, processes them with handler, multiplexes responses. 61 Continues until connection is closed. *) 62val handle_connection : 63 sw:Eio.Switch.t -> 64 Eio.Flow.two_way_ty Eio.Resource.t -> 65 handler -> 66 unit 67 68(** [serve ~sw ~backlog ~port handler] creates FastCGI server. 69 Listens on port, accepts connections, handles each with handler. *) 70val serve : 71 sw:Eio.Switch.t -> 72 backlog:int -> 73 port:int -> 74 handler -> 75 unit