Module Netcgi_jserv_ajp12


module Netcgi_jserv_ajp12: sig .. end
Implementation of the AJP/1.2 protocol


This module implements the core of the AJP/1.2 protocol. This protocol is supported by both the old mod_jserv and by the newer mod_jk (Jakarta/Tomcat). Note however, that mod_jserv passes more variables, and that it is fully CGI compatible. In contrast to this, mod_jk omits some variables (e.g. PATH_INFO, and SCRIPT_NAME). These variables must be fixed by special rules, see below. Furthermore, mod_jk has a different format of the property file, but it is not (yet) accepted by this library. mod_jk does not support authentication for AJP/1.2. So try to get mod_jserv if possible.
val serve_connection : ?config:Netcgi_env.cgi_config ->
?https:bool ->
?jk_servletSubString:string ->
(string option -> string option -> Netcgi_env.cgi_environment -> unit) ->
Netcgi_jserv.auth option ->
Netchannels.in_obj_channel -> Netchannels.out_obj_channel -> unit
Serves the connection designated by the in_obj_channel and the out_obj_channel. The function ensures that both channels are closed before it returns to the caller (and before it raises an exception).

If an authentication record auth is passed, the connection is authenticated first. If this fails, the channels will be closed immediately, and the function will return normally.

The request is read from the in_obj_channel, and a cgi_environment is created from it. The request handler is called with this environment and two extra string option arguments. The first is the zone, and the second is the servlet identifier. The request handler may look like a small CGI program:

 (fun zone servlet env ->
   let cgi = new std_activation ~env () in
   cgi # set_header();
   cgi # output # output_string  "Hello world!";
   cgi # output # commit_work();
 )
 

If the request arriving at the in_obj_channel is a signal, the function will close both channels, and will raise either Signal_restart or Signal_shutdown.


config : This is the configuration of the cgi_environment. It defaults to Netcgi_env.default_config
https : Because AJP/1.2 does not pass the HTTPS variable, it is necessary to set this argument to true if the server is secure.
jk_servletSubString : The fields servlet, path_info, and script_name are always empty if mod_jk is used. There is a fixup routine that is controlled by this optional argument, and that will be invoked if servlet is empty. The fixup is that the string jk_servletSubString is searched in the request URI, and if it is found, the following modifications will be applied: The servlet is set to the path component following jk_servletSubString. The path_info is set to the rest of the URI. The script_name is set to the beginning of the URI until the servlet name (inclusive). Other fields are not modified. If the string jk_servletSubString is not found, or if it is the empty string, the servlet name and the script_name will be set to the request URI, and the path_info will be set to the empty string.