sig
  module Cgi :
    sig
      exception HttpError of int
      module Request :
        sig
          type t
          type role = Responder | Authorizer | Filter
          type gateway = CGI of int * int | FCGI of int
          val gateway : CamlGI.Cgi.Request.t -> CamlGI.Cgi.Request.gateway
          val role : CamlGI.Cgi.Request.t -> CamlGI.Cgi.Request.role
          val path_info : CamlGI.Cgi.Request.t -> string
          val protocol : CamlGI.Cgi.Request.t -> string
          val remote_addr : CamlGI.Cgi.Request.t -> string
          val server_name : CamlGI.Cgi.Request.t -> string
          val server_port : CamlGI.Cgi.Request.t -> int
          val server_software : CamlGI.Cgi.Request.t -> string
          val accept : CamlGI.Cgi.Request.t -> string
          val accept_charset : CamlGI.Cgi.Request.t -> string
          val accept_encoding : CamlGI.Cgi.Request.t -> string
          val auth : CamlGI.Cgi.Request.t -> string
          val user : CamlGI.Cgi.Request.t -> string
          val user_agent : CamlGI.Cgi.Request.t -> string
          val metavar : CamlGI.Cgi.Request.t -> string -> string
          val print_string : CamlGI.Cgi.Request.t -> string -> unit
          val prerr_string : CamlGI.Cgi.Request.t -> string -> unit
        end
      val register_script :
        ?max_conns:int ->
        ?max_reqs:int ->
        ?sockaddr:Unix.sockaddr -> (CamlGI.Cgi.Request.t -> unit) -> unit
      val random_sessionid : unit -> string
      class type template =
        object method output : (string -> unit) -> unit end
      exception Abort
      type upload_data = {
        upload_value : string;
        upload_filename : string;
        upload_content_type : string;
      }
      class cgi :
        ?post_max:int ->
        CamlGI.Cgi.Request.t ->
        object
          method cookie : string -> Cookie.cookie
          method cookies : Cookie.cookie list
          method exit : unit -> 'a
          method header :
            ?content_type:string ->
            ?cookie:Cookie.cookie ->
            ?cookies:Cookie.cookie list -> ?cookie_cache:bool -> unit -> unit
          method is_multipart : bool
          method log : string -> unit
          method param : string -> string
          method param_all : string -> string list
          method param_exists : string -> bool
          method param_true : string -> bool
          method params : (string * string) list
          method redirect :
            ?cookie:Cookie.cookie ->
            ?cookies:Cookie.cookie list -> ?cookie_cache:bool -> string -> 'b
          method request : CamlGI.Cgi.Request.t
          method template :
            ?content_type:string ->
            ?cookie:Cookie.cookie ->
            ?cookies:Cookie.cookie list ->
            ?cookie_cache:bool -> #CamlGI.Cgi.template -> unit
          method upload : string -> CamlGI.Cgi.upload_data
          method upload_all : string -> CamlGI.Cgi.upload_data list
          method url : unit -> string
        end
      module Cgi_args :
        sig
          val parse : string -> (string * string) list
          val make : (string * string) list -> string
        end
      val cHTTP_CONTINUE : int
      val cHTTP_SWITCHING_PROTOCOLS : int
      val cHTTP_PROCESSING : int
      val cHTTP_OK : int
      val cHTTP_CREATED : int
      val cHTTP_ACCEPTED : int
      val cHTTP_NON_AUTHORITATIVE : int
      val cHTTP_NO_CONTENT : int
      val cHTTP_RESET_CONTENT : int
      val cHTTP_PARTIAL_CONTENT : int
      val cHTTP_MULTI_STATUS : int
      val cHTTP_MULTIPLE_CHOICES : int
      val cHTTP_MOVED_PERMANENTLY : int
      val cHTTP_MOVED_TEMPORARILY : int
      val cHTTP_SEE_OTHER : int
      val cHTTP_NOT_MODIFIED : int
      val cHTTP_USE_PROXY : int
      val cHTTP_TEMPORARY_REDIRECT : int
      val cHTTP_BAD_REQUEST : int
      val cHTTP_UNAUTHORIZED : int
      val cHTTP_PAYMENT_REQUIRED : int
      val cHTTP_FORBIDDEN : int
      val cHTTP_NOT_FOUND : int
      val cHTTP_METHOD_NOT_ALLOWED : int
      val cHTTP_NOT_ACCEPTABLE : int
      val cHTTP_PROXY_AUTHENTICATION_REQUIRED : int
      val cHTTP_REQUEST_TIME_OUT : int
      val cHTTP_CONFLICT : int
      val cHTTP_GONE : int
      val cHTTP_LENGTH_REQUIRED : int
      val cHTTP_PRECONDITION_FAILED : int
      val cHTTP_REQUEST_ENTITY_TOO_LARGE : int
      val cHTTP_REQUEST_URI_TOO_LARGE : int
      val cHTTP_UNSUPPORTED_MEDIA_TYPE : int
      val cHTTP_RANGE_NOT_SATISFIABLE : int
      val cHTTP_EXPECTATION_FAILED : int
      val cHTTP_UNPROCESSABLE_ENTITY : int
      val cHTTP_LOCKED : int
      val cHTTP_FAILED_DEPENDENCY : int
      val cHTTP_INTERNAL_SERVER_ERROR : int
      val cHTTP_NOT_IMPLEMENTED : int
      val cHTTP_BAD_GATEWAY : int
      val cHTTP_SERVICE_UNAVAILABLE : int
      val cHTTP_GATEWAY_TIME_OUT : int
      val cHTTP_VERSION_NOT_SUPPORTED : int
      val cHTTP_VARIANT_ALSO_VARIES : int
      val cHTTP_INSUFFICIENT_STORAGE : int
      val cHTTP_NOT_EXTENDED : int
      val cDOCUMENT_FOLLOWS : int
      val cPARTIAL_CONTENT : int
      val cMULTIPLE_CHOICES : int
      val cMOVED : int
      val cREDIRECT : int
      val cUSE_LOCAL_COPY : int
      val cBAD_REQUEST : int
      val cAUTH_REQUIRED : int
      val cFORBIDDEN : int
      val cNOT_FOUND : int
      val cMETHOD_NOT_ALLOWED : int
      val cNOT_ACCEPTABLE : int
      val cLENGTH_REQUIRED : int
      val cPRECONDITION_FAILED : int
      val cSERVER_ERROR : int
      val cNOT_IMPLEMENTED : int
      val cBAD_GATEWAY : int
      val cVARIANT_ALSO_VARIES : int
    end
  module Cookie :
    sig
      class cookie :
        name:string ->
        value:string ->
        max_age:int option ->
        domain:string ->
        path:string ->
        secure:bool ->
        object
          method domain : string
          method max_age : int option
          method name : string
          method path : string
          method secure : bool
          method set_domain : string -> unit
          method set_max_age : int option -> unit
          method set_name : string -> unit
          method set_path : string -> unit
          method set_secure : bool -> unit
          method set_value : string -> unit
          method to_string : string
          method value : string
        end
      val cookie :
        ?max_age:int ->
        ?domain:string ->
        ?path:string ->
        ?secure:bool -> string -> string -> CamlGI.Cookie.cookie
      val parse : string -> CamlGI.Cookie.cookie list
    end
  module Expires :
    sig
      val make : int -> string
      val past : unit -> string
      val short : unit -> string
      val medium : unit -> string
      val long : unit -> string
    end
  module Sendmail :
    sig
      exception Failure of string
      val sendmail : string Pervasives.ref
      val sendmail_args : string Pervasives.ref
      val send : unit -> Pervasives.out_channel
      val close : Pervasives.out_channel -> unit
      val send_mail :
        ?subject:string ->
        ?to_addr:string list ->
        ?cc:string list ->
        ?bcc:string list ->
        ?from:string ->
        ?content_type:string ->
        ?headers:(string * string) list -> string -> unit
    end
end