/usr/lib/ocaml/netcgi2/netcgi_fcgi.mli is in libocamlnet-ocaml-dev 4.0.4-1build3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | (* netcgi_fcgi.mli
Copyright (C) 2005-2006
Christophe Troestler
email: Christophe.Troestler@umh.ac.be
WWW: http://math.umh.ac.be/an/
This library is free software; see the file LICENSE for more information.
This library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the file
LICENSE for more details.
*)
(** FastCGI connector.
*
* {b Remark:} This connector does not allow requests to be multiplexed
* (and let it know to the web server via FCGI_MPXS_CONNS=0).
* Multiplexing requests is seldom done by
* {{:http://www.fastcgi.com}FastCGI modules} and is even sometimes
* impossible because of bugs in them. Moreover, multiplexing is
* mostly useful if concurrent requests are handled by different
* threads while this library use a single thread to process all
* requests coming on a given connection. If the need is felt (speak
* out!), a multithreaded connector can be built on the side of this
* one.
*)
open Netcgi
(** The usual {!Netcgi.cgi} class with FCGI specific methods. *)
class type cgi =
object
inherit Netcgi.cgi
method role : [`Responder | `Authorizer | `Filter]
(** A FastCGI application can fulfill each of the following three
roles:
- [`Responder]: This is the usual role. In this case the
application is expected to act like a CGI program: It receives
all the information associated with an HTTP request and
generates an HTTP response.
- [`Authorizer]: An Authorizer FastCGI application receives
all the information associated with an HTTP request and
generates an authorized/unauthorized decision.
- [`Filter]: A Filter FastCGI application receives all the
information associated with an HTTP request, plus an extra
stream of data from a file stored on the Web server, and
generates a "filtered" version of the data stream as an HTTP
response. *)
method data : Netchannels.in_obj_channel
(** This the the channel on which the filter data is available.
All methods of the object raise {!Netchannels.Closed_channel}
if the role is not [`Filter]. *)
method data_length : int
(** How many bytes of the data are available. *)
method data_mtime : float
(** The data last modification time, expressed as an integer
number of seconds since the epoch (January 1, 1970 UTC). *)
end
val run :
?config:config ->
?allow:(Unix.sockaddr -> bool) ->
?output_type:output_type ->
?arg_store:arg_store ->
?exn_handler:exn_handler ->
?socket:Unix.file_descr ->
?sockaddr:Unix.sockaddr ->
?port:int ->
(cgi -> unit) -> unit
(** [run f] register the function [f] as a main function of the
script. Each call to the script will execute [f cgi]. The code
outside [f] will be executed only once (when the script is
loaded into memory) which allows to cache database connections,
etc.
@param config Default: {!Netcgi.default_config}
@param allow Tells whether a connection from the socket is allowed.
Default: Use the comma separated list given in the
environment variable FCGI_WEB_SERVER_ADDRS or allow all
if it does not exist.
@param output_type Default: [`Direct ""]
@param arg_store Default: [`Automatic] for all arguments.
@param exn_handler See {!Netcgi.exn_handler}. Default: delegate
all exceptions to the default handler.
@param socket is a listening socket to use. Overrides [sockaddr]
and [port].
@param sockaddr tells on what socket to contact the script. If
not specified, the script expects to be launched by the web
server and to communicate with it through stdin. For external
scripts (launched independently of the web server and possibly
on a different machine), set [sockaddr] to the address the web
server needs to connect to to talk to the script (this address
must also be specified in the web server config file).
@param port alternative way to specify [sockaddr] listening to
localhost {b only}. If you would like your FastCGI program to
be accessed from a different machine, use [sockaddr] instead.
Your application should be ready handle SIGUSR1, used to
resquest a "graceful" process shutdown, and SIGTERM to request a
quick shutdown. *)
val handle_request :
config -> output_type -> arg_store -> exn_handler ->
(cgi -> unit) -> max_conns:int -> log:(string -> unit) option ->
Unix.file_descr ->
connection_directive
(** [handle_request config output_type arg_store eh f ~max_conns
~log fd]: This is a lower-level interface that processes
exactly one request arriving on the existing connection [fd].
[max_conns] is passed to the FCGI client and indicates how many
connections this server can process in parallel.
[log] is the error logger function or [None], in which case
errors are passed through to the FCGI client.
The other arguments are just like for [run].
The return value indicates whether the connection can be kept
open or must be closed.
*)
val handle_connection :
config -> output_type -> arg_store -> exn_handler ->
(cgi -> unit) -> max_conns:int -> one_shot:bool ->
Unix.file_descr ->
unit
(** [handle_connection config output_type arg_store eh f ~max_conns
~one_shot fd]: This is a lower-level interface that processes
exactly one connection [fd]. The descriptor is closed (even on
error).
[max_conns] is passed to the FCGI client and indicates how many
connections this server can process in parallel.
[one_shot]: if true, only one request is processed over this
connection, overriding any indication by the web server.
The other arguments are just like for [run].
*)
|