Structure Mosmlcgi


Identifier index Structure index

(* Mosmlcgi -- Support for writing CGI scripts in Moscow ML 

 (c) Jonas Barklund, Computing Science Dept., Uppsala University, 1996.
     Documentation and support for file upload added by Peter Sestoft.
*)

(* 1. Accessing the fields or parameters of a CGI call *)

val cgi_fieldnames : string list
val cgi_field_strings : string -> string list;
val cgi_field_string  : string -> string option;
val cgi_field_integer : string * int -> int;

(* 2. Accessing parts in multipart/form-data; form-based file upload *)

val cgi_partnames : string list

type part
val cgi_part  : string -> part option
val cgi_parts : string -> part list

val part_fieldnames    : part -> string list
val part_type          : part -> string option
val part_data          : part -> string
val part_field_strings : part -> string -> string list
val part_field_string  : part -> string -> string option
val part_field_integer : part -> string * int -> int

(* 3. Administrative information *)

val cgi_server_software   : string option;
val cgi_server_name       : string option;
val cgi_gateway_interface : string option;
val cgi_server_protocol   : string option;
val cgi_server_port       : string option;
val cgi_request_method    : string option;
val cgi_http_accept       : string option;
val cgi_http_user_agent   : string option;
val cgi_http_referer      : string option;
val cgi_path_info         : string option;
val cgi_path_translated   : string option;
val cgi_script_name       : string option;
val cgi_query_string      : string option;
val cgi_remote_host       : string option;
val cgi_remote_addr       : string option;
val cgi_remote_user       : string option;
val cgi_remote_ident      : string option;
val cgi_auth_type         : string option;
val cgi_content_type      : string option;
val cgi_content_length    : string option;
val cgi_annotation_server : string option;

(* The Mosmlcgi library is for writing CGI programs in Moscow ML.  A
   CGI program may be installed on a WWW server and is invoked in
   response to HTTP requests sent to the server from a web browser,
   typically from an HTML FORM element.


   1. Obtaining field values sent from an ordinary HTML form
   ---------------------------------------------------------

   [cgi_fieldnames] is a list of the names of fields present in the
   CGI call message.  If field name fnm is in cgi_fieldnames, then
   cgi_field_string fnm <> NONE.

   [cgi_field_strings fnm] is a (possibly empty) list of the strings
   bound to field fnm.

   [cgi_field_string fnm] returns SOME(s) where s is a string bound to
   field name fnm, if any; otherwise NONE.  Equivalent to 
	case cgi_field_strings fnm of 
             []     => NONE 
           | s :: _ => SOME s

   [cgi_field_integer (fnm, deflt)] attempts to parse an integer from
   field fnm.  Returns i if cgi_field_string(fnm) = SOME(s) and an
   integer i can be parsed from a prefix of s; otherwise returns deflt.


   2. Obtaining field values sent with ENCTYPE="multipart/form-data"  
   -----------------------------------------------------------------

   [cgi_partnames] is a list of the names of the parts of the
   multipart/form-data message.

   The type part is the abstract type of parts of a message.  Each part
   may have several fields.  In this implementation, the field of a
   part cannot be a another part itself.

   [cgi_parts pnm] is a (possibly empty) list of the parts called pnm.

   [cgi_part pnm] is SOME(prt) where prt is a part called pnm, if any;
   otherwise NONE.  Equivalent to
	case cgi_parts pnm of 
             []       => NONE 
           | prt :: _ => SOME prt

   [part_fieldnames prt] is the list of field names in part pnm.

   [part_type prt] is SOME(typ) if the part prt contains a specification
   `Context-Type: typ'; otherwise NONE.

   [part_data prt] is the data contain in part prt; for instance, the
   contents of a file uploaded via form-based file upload.

   [part_field_strings prt fnm] is a (possibly empty) list of the
   strings bound to field fnm in part prt.

   [part_field_string prt fnm] returns SOME(s) where s is a string
   bound to field name fnm in part prt, if any; otherwise NONE.
   Equivalent to 
	case part_field_strings prt fnm of 
	     []     => NONE 
	   | s :: _ => SOME s

   [part_field_integer prt (fnm, deflt)] attempts to parse an integer
   from field fnm of part prt.  Returns i if part_field_string prt fnm
   = SOME(s) and an integer i can be parsed from a prefix of s;
   otherwise returns deflt.


   3. Administrative and server information
   ----------------------------------------

   Each of the following variables has the value SOME(s) if the
   corresponding CGI environment variable is bound to string s;
   otherwise NONE:

   [cgi_server_software] is the value of SERVER_SOFTWARE

   [cgi_server_name] is the value of SERVER_NAME

   [cgi_gateway_interface] is the value of GATEWAY_INTERFACE

   [cgi_server_protocol] is the value of SERVER_PROTOCOL

   [cgi_server_port] is the value of SERVER_PORT

   [cgi_request_method] is the value of REQUEST_METHOD

   [cgi_http_accept] is the value of HTTP_ACCEPT

   [cgi_http_user_agent] is the value of HTTP_USER_AGENT

   [cgi_http_referer] is the value of HTTP_REFERER

   [cgi_path_info] is the value of PATH_INFO

   [cgi_path_translated] is the value of PATH_TRANSLATED

   [cgi_script_name] is the value of SCRIPT_NAME

   [cgi_query_string] is the value of QUERY_STRING

   [cgi_remote_host] is the value of REMOTE_HOST

   [cgi_remote_addr] is the value of REMOTE_ADDR

   [cgi_remote_user] is the value of REMOTE_USER

   [cgi_remote_ident] is the value of REMOTE_IDENT

   [cgi_auth_type] is the value of AUTH_TYPE

   [cgi_content_type] is the value of CONTENT_TYPE

   [cgi_content_length] is the value of CONTENT_LENGTH, that is, the
   length of the data transmitted in the CGI call.

   [cgi_annotation_server] is the value of ANNOTATION_SERVER
*)


Identifier index Structure index


Moscow ML 1.42