sig
  type engine_req_state =
    [ `Finishing | `Received_header | `Received_request | `Receiving_body ]
  class type http_engine_config =
    object
      method config_cgi : Netcgi_env.cgi_config
      method config_error_response : int -> string
      method config_input_flow_control : bool
      method config_limit_pipeline_length : int
      method config_limit_pipeline_size : int
      method config_log_error :
        Unix.sockaddr option ->
        Unix.sockaddr option ->
        Nethttp.http_method option ->
        Nethttp.http_header option -> string -> unit
      method config_max_header_length : int
      method config_max_reqline_length : int
      method config_max_trailer_length : int
      method config_output_flow_control : bool
      method config_timeout : float
      method config_timeout_next_request : float
    end
  class type extended_async_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_ch_async : Uq_engines.async_in_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_ch_async : Uq_engines.async_out_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 remote_socket_addr : Unix.sockaddr
      method send_file : Unix.file_descr -> int64 -> unit
      method send_output_header : unit -> unit
      method server_socket_addr : Unix.sockaddr
      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
  class type http_request_header_notification =
    object
      method environment : Nethttpd_engine.extended_async_environment
      method req_state : Nethttpd_engine.engine_req_state
      method schedule_accept_body :
        on_request:(Nethttpd_engine.http_request_notification -> unit) ->
        ?on_error:(unit -> unit) -> unit -> unit
      method schedule_finish : unit -> unit
      method schedule_reject_body :
        on_request:(Nethttpd_engine.http_request_notification -> unit) ->
        ?on_error:(unit -> unit) -> unit -> unit
    end
  and http_request_notification =
    object
      method environment : Nethttpd_engine.extended_async_environment
      method req_state : Nethttpd_engine.engine_req_state
      method schedule_finish : unit -> unit
    end
  class http_engine :
    on_request_header:(Nethttpd_engine.http_request_header_notification ->
                       unit) ->
    unit ->
    #Nethttpd_engine.http_engine_config ->
    Unix.file_descr ->
    Unixqueue.unix_event_system -> [unit] Uq_engines.engine
  class type http_engine_processing_config =
    object
      method config_synch_input :
        (Netchannels.in_obj_channel -> unit) ->
        Uq_engines.async_in_channel -> unit
      method config_synch_output :
        (Netchannels.out_obj_channel -> unit) ->
        Uq_engines.async_out_channel -> unit
    end
  class buffering_engine_processing_config : http_engine_processing_config
  class type http_engine_processing_context =
    object method engine : unit Uq_engines.engine end
  val process_connection :
    #Nethttpd_reactor.http_processor_config ->
    #Nethttpd_engine.http_engine_processing_config ->
    Unix.file_descr ->
    Unixqueue.unix_event_system ->
    'Nethttpd_types.http_service ->
    Nethttpd_engine.http_engine_processing_context
end