sig
  exception Eliom_404
  exception Eliom_Wrong_parameter
  exception Eliom_Link_too_old
  exception Eliom_Session_expired
  exception Eliom_Service_session_expired of string list
  exception Eliom_Typing_Error of (string * exn) list
  exception Eliom_function_forbidden_outside_site_loading of string
  type timeout = TGlobal | TNone | TSome of float
  type cookie =
      Set of Extensions.url_path option * float option * string * string
    | Unset of Extensions.url_path option * string
  type result_to_send =
      EliomResult of Http_frame.result
    | EliomExn of (exn list * Eliommod.cookie list)
  type cookie_exp = CENothing | CEBrowser | CESome of float
  type internal_state = string
  type sess_info = {
    si_other_get_params : (string * string) list;
    si_all_get_params : (string * string) list;
    si_all_post_params : (string * string) list;
    si_service_session_cookies : string Http_frame.Cookievalues.t;
    si_data_session_cookies : string Http_frame.Cookievalues.t;
    si_persistent_session_cookies : string Http_frame.Cookievalues.t;
    si_nonatt_info : string option * string option;
    si_state_info :
      Eliommod.internal_state option * Eliommod.internal_state option;
    si_config_file_charset : string;
    si_previous_extension_error : int;
  }
  module SessionCookies :
    sig
      type key = string
      type 'a t
      val create : int -> 'a t
      val clear : 'a t -> unit
      val copy : 'a t -> 'a t
      val add : 'a t -> key -> '-> unit
      val remove : 'a t -> key -> unit
      val find : 'a t -> key -> 'a
      val find_all : 'a t -> key -> 'a list
      val replace : 'a t -> key -> '-> unit
      val mem : 'a t -> key -> bool
      val iter : (key -> '-> unit) -> 'a t -> unit
      val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val length : 'a t -> int
    end
  type tables
  type 'a servicecookiestablecontent =
      string * 'a * float option Pervasives.ref *
      Eliommod.timeout Pervasives.ref
  type 'a servicecookiestable =
      'Eliommod.servicecookiestablecontent Eliommod.SessionCookies.t
  type datacookiestablecontent =
      string * float option Pervasives.ref * Eliommod.timeout Pervasives.ref
  type datacookiestable =
      Eliommod.datacookiestablecontent Eliommod.SessionCookies.t
  type 'a session_cookie
  type 'a one_service_cookie_info =
      string * 'Pervasives.ref * Eliommod.timeout Pervasives.ref *
      float option Pervasives.ref * Eliommod.cookie_exp Pervasives.ref
  type one_data_cookie_info =
      string * Eliommod.timeout Pervasives.ref *
      float option Pervasives.ref * Eliommod.cookie_exp Pervasives.ref
  type one_persistent_cookie_info =
      string * Eliommod.timeout Pervasives.ref *
      Eliommod.cookie_exp Pervasives.ref
  type 'a cookie_info =
      (string option *
       'Eliommod.one_service_cookie_info Eliommod.session_cookie
       Pervasives.ref)
      Http_frame.Cookievalues.t Pervasives.ref *
      (string option *
       Eliommod.one_data_cookie_info Eliommod.session_cookie Pervasives.ref)
      Lazy.t Http_frame.Cookievalues.t Pervasives.ref *
      ((string * Eliommod.timeout * float option) option *
       Eliommod.one_persistent_cookie_info Eliommod.session_cookie
       Pervasives.ref)
      Lwt.t Lazy.t Http_frame.Cookievalues.t Pervasives.ref
  type sitedata = {
    site_dir : Extensions.url_path;
    site_dir_string : string;
    mutable servtimeout : (string * float option) list;
    mutable datatimeout : (string * float option) list;
    mutable perstimeout : (string * float option) list;
    global_services : Eliommod.tables;
    session_services : Eliommod.tables Eliommod.servicecookiestable;
    session_data : Eliommod.datacookiestable;
    mutable remove_session_data : string -> unit;
    mutable not_bound_in_data_tables : string -> bool;
    mutable exn_handler :
      Eliommod.server_params -> exn -> Eliommod.result_to_send Lwt.t;
    mutable unregistered_services : Extensions.url_path option list;
  }
  and server_params = {
    sp_ri : Extensions.request_info;
    sp_si : Eliommod.sess_info;
    sp_sitedata : Eliommod.sitedata;
    sp_cookie_info : Eliommod.tables Eliommod.cookie_info;
    sp_suffix : Extensions.url_path;
    sp_fullsessname : string option;
  }
  exception Eliom_duplicate_registration of string
  exception Eliom_page_erasing of string
  exception Eliom_there_are_unregistered_services of
              (string list * string list option list)
  exception Eliom_error_while_loading_site of string
  type anon_params_type = int
  val persistent_cookies_table :
    (string * float option * Eliommod.timeout * int64) Ocsipersist.table
  type page_table_key = {
    key_state :
      Eliommod.internal_state option * Eliommod.internal_state option;
    key_kind : Http_frame.Http_header.http_method;
  }
  val empty_tables : unit -> Eliommod.tables
  val add_service :
    Eliommod.tables ->
    bool ->
    string list ->
    Eliommod.page_table_key *
    ((Eliommod.anon_params_type * Eliommod.anon_params_type) *
     int Pervasives.ref option * (float * float Pervasives.ref) option *
     (Eliommod.server_params -> Eliommod.result_to_send Lwt.t)) ->
    unit
  val add_naservice :
    Eliommod.tables ->
    bool ->
    string option * string option ->
    int Pervasives.ref option * (float * float Pervasives.ref) option *
    (Eliommod.server_params -> Eliommod.result_to_send Lwt.t) -> unit
  val get_state_param_name : string
  val post_state_param_name : string
  val eliom_suffix_name : string
  val eliom_suffix_internal_name : string
  val naservice_name : string
  val co_param_prefix : string
  val na_co_param_prefix : string
  val config : Simplexmlparser.xml list Pervasives.ref
  val set_global_service_timeout :
    session_name:string option ->
    recompute_expdates:bool ->
    Eliommod.sitedata -> float option -> unit Lwt.t
  val get_global_service_timeout :
    session_name:string option -> Eliommod.sitedata -> float option
  val set_global_data_timeout :
    session_name:string option ->
    recompute_expdates:bool ->
    Eliommod.sitedata -> float option -> unit Lwt.t
  val get_global_data_timeout :
    session_name:string option -> Eliommod.sitedata -> float option
  val set_global_persistent_timeout :
    session_name:string option ->
    recompute_expdates:bool ->
    Eliommod.sitedata -> float option -> unit Lwt.t
  val get_global_persistent_timeout :
    session_name:string option -> Eliommod.sitedata -> float option
  val get_default_service_timeout : unit -> float option
  val set_default_service_timeout : float option -> unit
  val get_default_data_timeout : unit -> float option
  val set_default_data_timeout : float option -> unit
  val set_default_volatile_timeout : float option -> unit
  val get_default_persistent_timeout : unit -> float option
  val set_default_persistent_timeout : float option -> unit
  val create_volatile_table : unit -> 'Eliommod.SessionCookies.t
  val create_volatile_table_during_session :
    Eliommod.server_params -> 'Eliommod.SessionCookies.t
  val create_persistent_table : string -> 'Ocsipersist.table
  val remove_from_all_persistent_tables : string -> unit Lwt.t
  val find_or_create_service_cookie :
    ?session_name:string ->
    sp:Eliommod.server_params ->
    unit -> Eliommod.tables Eliommod.one_service_cookie_info
  val find_service_cookie_only :
    ?session_name:string ->
    sp:Eliommod.server_params ->
    unit -> Eliommod.tables Eliommod.one_service_cookie_info
  val find_or_create_data_cookie :
    ?session_name:string ->
    sp:Eliommod.server_params -> unit -> Eliommod.one_data_cookie_info
  val find_data_cookie_only :
    ?session_name:string ->
    sp:Eliommod.server_params -> unit -> Eliommod.one_data_cookie_info
  val find_or_create_persistent_cookie :
    ?session_name:string ->
    sp:Eliommod.server_params ->
    unit -> Eliommod.one_persistent_cookie_info Lwt.t
  val find_persistent_cookie_only :
    ?session_name:string ->
    sp:Eliommod.server_params ->
    unit -> Eliommod.one_persistent_cookie_info Lwt.t
  val close_service_session2 : Eliommod.sitedata -> string -> unit
  val close_service_session :
    ?session_name:string -> sp:Eliommod.server_params -> unit -> unit
  val close_data_session2 : Eliommod.sitedata -> string -> unit
  val close_data_session :
    ?session_name:string -> sp:Eliommod.server_params -> unit -> unit
  val close_volatile_session :
    ?session_name:string -> sp:Eliommod.server_params -> unit -> unit
  val close_persistent_session2 : string -> unit Lwt.t
  val close_persistent_session :
    ?session_name:string -> sp:Eliommod.server_params -> unit -> unit Lwt.t
  val close_all_service_sessions :
    ?session_name:string -> Eliommod.sitedata -> unit Lwt.t
  val close_all_data_sessions :
    ?session_name:string -> Eliommod.sitedata -> unit Lwt.t
  val close_all_persistent_sessions :
    ?session_name:string -> Eliommod.sitedata -> unit Lwt.t
  val iter_service_sessions :
    Eliommod.sitedata ->
    (Eliommod.SessionCookies.key *
     Eliommod.tables Eliommod.servicecookiestablecontent * Eliommod.sitedata ->
     unit Lwt.t) ->
    unit Lwt.t
  val iter_data_sessions :
    Eliommod.sitedata ->
    (Eliommod.SessionCookies.key * Eliommod.datacookiestablecontent *
     Eliommod.sitedata -> unit Lwt.t) ->
    unit Lwt.t
  val iter_persistent_sessions :
    (string * (string * float option * Eliommod.timeout * Int64.t) ->
     unit Lwt.t) ->
    unit Lwt.t
  val fold_service_sessions :
    Eliommod.sitedata ->
    (Eliommod.SessionCookies.key *
     Eliommod.tables Eliommod.servicecookiestablecontent * Eliommod.sitedata ->
     '-> 'Lwt.t) ->
    '-> 'Lwt.t
  val fold_data_sessions :
    Eliommod.sitedata ->
    (Eliommod.SessionCookies.key * Eliommod.datacookiestablecontent *
     Eliommod.sitedata -> '-> 'Lwt.t) ->
    '-> 'Lwt.t
  val fold_persistent_sessions :
    (string * (string * float option * Eliommod.timeout * Int64.t) ->
     '-> 'Lwt.t) ->
    '-> 'Lwt.t
  val number_of_service_sessions : sp:Eliommod.server_params -> int
  val number_of_data_sessions : sp:Eliommod.server_params -> int
  val number_of_tables : unit -> int
  val number_of_table_elements : unit -> int list
  val number_of_persistent_sessions : unit -> int Lwt.t
  val number_of_persistent_tables : unit -> int
  val number_of_persistent_table_elements : unit -> (string * int) list Lwt.t
  val add_unregistered : Eliommod.sitedata -> string list option -> unit
  val remove_unregistered : Eliommod.sitedata -> string list option -> unit
  val global_register_allowed : unit -> (unit -> Eliommod.sitedata) option
  val add_cookie_list_to_send :
    Eliommod.sitedata ->
    Eliommod.cookie list -> Http_frame.cookieset -> Http_frame.cookieset
end