Warning: Reason support is experimental. We are looking for beta-tester and contributors.

Module Ocsigen_http_frame

module Ocsigen_http_frame: sig..end

This table is to store cookie values for each path. The key has type url_path option: it is for the path (default: root of the site),


type etag = string

type url_path = string list

module Cookies:
   Map.S  
    with type key = url_path

This table is to store cookie values for each path.

type cookie =

|OSet of float option * string * bool
|OUnset

Type used for cookies to set. The float option is the timestamp for the expiration date. The string is the value. If the bool is true and the protocol is https, the cookie will be secure (will ask the browser to send it only through secure connections).

type cookieset =
   cookie Ocsigen_lib.String_Table.t
    Cookies.t

add_cookie c cookie_table adds the cookie c to the table cookie_table. If the cookie is already bound, the previous binding disappear.

val add_cookies :
   cookie Ocsigen_lib.String_Table.t
    Cookies.t ->
    cookie Ocsigen_lib.String_Table.t
    Cookies.t ->
    cookie Ocsigen_lib.String_Table.t
    Cookies.t

add_cookies newcookies oldcookies adds the cookies from newcookies to oldcookies. If cookies are already bound in oldcookies, the previous binding disappear.

val compute_new_ri_cookies :
   float ->
    string list ->
    string Ocsigen_lib.String_Table.t ->
    cookie Ocsigen_lib.String_Table.t
    Cookies.t -> string Ocsigen_lib.String_Table.t

compute_new_ri_cookies now path ri_cookies cookies_to_set adds the cookies from cookies_to_set to ri_cookies, as if the cookies add been send to the browser and the browser was doing a new request to the url path. Only the cookies that match path (current path) are added.

type result = {

   res_cookies : cookieset;(*cookies to set*)
   res_lastmodified : float option;(*Default: None*)
   res_etag : etag option;
   res_code : int;(*HTTP code, if not 200*)
   res_stream :
   string Ocsigen_stream.t *
    (string Ocsigen_stream.t -> int64 -> string Ocsigen_stream.step Lwt.t) option
;
(*Default: empty stream. The second field is (optionaly) the function used to skip a part of the stream, if you do not you want to use a basic reading of the stream. For example, for static files, you can optimize it by using a seek function.*)
   res_stop_stream : unit -> unit Lwt.t;(*A function that will be called if sending the stream fails. It is called before the stream finalizer, only in case of error. Use it if you want a different behaviour if sending succeeds or not. Default is do nothing (Lwt.return).*)
   res_content_length : int64 option;(*None means Transfer-encoding: chunked*)
   res_content_type : string option;
   res_headers : Http_headers.t;(*The headers you want to add*)
   res_charset : string option;(*Default: None*)
   res_location : string option;(*Default: None*)

}

The type of answers to send

val default_result : unit -> result

Default result to use as a base for constructing others.

val empty_result : unit -> result

result for an empty page.

module type HTTP_CONTENT = sig..end

module Http_header: sig..end

module Http_error: sig..end

type t = {

   frame_header : Http_header.http_header;
   frame_content : string Ocsigen_stream.t option;
   frame_abort : unit -> unit Lwt.t;

}

The type of HTTP frames. The content may be void (no body) or a stream. While sending, a stream will be sent with chunked encoding if no content-length is supplied. abort is the function to be called if you want to cancel the stream reading (closes the connection).