sig
  type input_mode = [ `Standard ]
  type input_state =
    [ `Received_body
    | `Received_header
    | `Receiving_body
    | `Receiving_header
    | `Start ]
  type output_mode = [ `Standard ]
  type output_state =
    [ `End
    | `Sending_body
    | `Sending_header
    | `Sending_part_body
    | `Sending_part_header
    | `Sent_body
    | `Sent_header
    | `Sent_part_body
    | `Sent_part_header
    | `Start ]
  type protocol_version = Nethttp.protocol_version
  type protocol_attribute = Nethttp.protocol_attribute
  type protocol = Nethttp.protocol
  type workaround =
    [ `Work_around_MSIE_Content_type_bug | `Work_around_backslash_bug ]
  type cgi_config = {
    tmp_directory : string;
    tmp_prefix : string;
    permitted_http_methods : string list;
    permitted_input_content_types : string list;
    input_content_length_limit : int;
    workarounds : Netcgi_env.workaround list;
  }
  val default_config : Netcgi_env.cgi_config
  class type cgi_environment =
    object
      method cgi_auth_type : string
      method cgi_gateway_interface : string
      method cgi_https : bool
      method cgi_path_info : string
      method cgi_path_translated : string
      method cgi_properties : (string * string) list
      method cgi_property : ?default:string -> string -> string
      method cgi_query_string : string
      method cgi_remote_addr : string
      method cgi_remote_host : string
      method cgi_remote_ident : string
      method cgi_remote_user : string
      method cgi_request_method : string
      method cgi_request_uri : string
      method cgi_script_name : string
      method cgi_server_name : string
      method cgi_server_port : int option
      method cgi_server_protocol : string
      method cgi_server_software : string
      method config : Netcgi_env.cgi_config
      method cookies : (string * string) list
      method input_ch : Netchannels.in_obj_channel
      method input_content_length : int
      method input_content_type : string * (string * Mimestring.s_param) list
      method input_content_type_string : string
      method input_header : Netmime.mime_header
      method input_header_field : ?default:string -> string -> string
      method input_header_fields : (string * string) list
      method input_state : Netcgi_env.input_state
      method log_error : string -> unit
      method multiple_input_header_field : string -> string list
      method multiple_output_header_field : string -> string list
      method output_ch : Netchannels.out_obj_channel
      method output_header : Netmime.mime_header
      method output_header_field : ?default:string -> string -> string
      method output_header_fields : (string * string) list
      method output_state : Netcgi_env.output_state
      method protocol : Netcgi_env.protocol
      method send_output_header : unit -> unit
      method set_input_state : Netcgi_env.input_state -> unit
      method set_multiple_output_header_field : string -> string list -> unit
      method set_output_header_field : string -> string -> unit
      method set_output_header_fields : (string * string) list -> unit
      method set_output_state : Netcgi_env.output_state -> unit
      method set_status : Nethttp.http_status -> unit
      method user_agent : string
    end
  exception Std_environment_not_found
  class std_environment :
    ?config:Netcgi_env.cgi_config -> unit -> cgi_environment
  class test_environment :
    ?config:Netcgi_env.cgi_config -> unit -> cgi_environment
  class custom_environment :
    ?config:Netcgi_env.cgi_config ->
    unit ->
    object
      method cgi_auth_type : string
      method cgi_gateway_interface : string
      method cgi_https : bool
      method cgi_path_info : string
      method cgi_path_translated : string
      method cgi_properties : (string * string) list
      method cgi_property : ?default:string -> string -> string
      method cgi_query_string : string
      method cgi_remote_addr : string
      method cgi_remote_host : string
      method cgi_remote_ident : string
      method cgi_remote_user : string
      method cgi_request_method : string
      method cgi_request_uri : string
      method cgi_script_name : string
      method cgi_server_name : string
      method cgi_server_port : int option
      method cgi_server_protocol : string
      method cgi_server_software : string
      method config : cgi_config
      method cookies : (string * string) list
      method input_ch : Netchannels.in_obj_channel
      method input_content_length : int
      method input_content_type : string * (string * Mimestring.s_param) list
      method input_content_type_string : string
      method input_header : Netmime.mime_header
      method input_header_field : ?default:string -> string -> string
      method input_header_fields : (string * string) list
      method input_state : input_state
      method log_error : string -> unit
      method multiple_input_header_field : string -> string list
      method multiple_output_header_field : string -> string list
      method output_ch : Netchannels.out_obj_channel
      method output_header : Netmime.mime_header
      method output_header_field : ?default:string -> string -> string
      method output_header_fields : (string * string) list
      method output_state : output_state
      method protocol : protocol
      method send_output_header : unit -> unit
      method set_cgi :
        ?gateway_interface:string ->
        ?server_software:string ->
        ?server_name:string ->
        ?server_protocol:string ->
        ?server_port:int option ->
        ?request_method:string ->
        ?path_info:string ->
        ?path_translated:string ->
        ?script_name:string ->
        ?query_string:string ->
        ?remote_host:string ->
        ?remote_addr:string ->
        ?auth_type:string ->
        ?remote_user:string ->
        ?remote_ident:string ->
        ?https:bool -> ?property:string * string -> unit -> unit
      method set_error_log : (string -> unit) -> unit
      method set_input_ch : Netchannels.in_obj_channel -> unit
      method set_input_content_length : int -> unit
      method set_input_content_type : string -> unit
      method set_input_header_field : string -> string -> unit
      method set_input_header_fields : (string * string) list -> unit
      method set_input_state : input_state -> unit
      method set_multiple_input_header_field : string -> string list -> unit
      method set_multiple_output_header_field : string -> string list -> unit
      method set_output_ch : Netchannels.out_obj_channel -> unit
      method set_output_header_field : string -> string -> unit
      method set_output_header_fields : (string * string) list -> unit
      method set_output_state : output_state -> unit
      method set_status : Nethttp.http_status -> unit
      method setup_finished : unit -> unit
      method user_agent : string
    end
end