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