package yurt

  1. Overview
  2. Docs

Module Yurt_serverSource

include module type of struct include Cohttp_lwt_unix.Server end
include Cohttp_lwt.S.Server with module IO = Cohttp_lwt_unix__.Io
type response_action = [
  1. | `Expert of Cohttp.Response.t * (IO.ic -> IO.oc -> unit Lwt.t)
  2. | `Response of Cohttp.Response.t * Cohttp_lwt__.Body.t
]

A request handler can respond in two ways:

  • Using `Response, with a Response.t and a Body.t.
  • Using `Expert, with a Response.t and an IO function that is expected to write the response body. The IO function has access to the underlying IO.ic and IO.oc, which allows writing a response body more efficiently, stream a response or to switch protocols entirely (e.g. websockets). Processing of pipelined requests continue after the unitLwt.t is resolved. The connection can be closed by closing the IO.ic.
val make_response_action : ?conn_closed:(conn -> unit) -> callback: (conn -> Cohttp.Request.t -> Cohttp_lwt__.Body.t -> response_action Lwt.t) -> unit -> t
val make_expert : ?conn_closed:(conn -> unit) -> callback: (conn -> Cohttp.Request.t -> Cohttp_lwt__.Body.t -> (Cohttp.Response.t * (IO.ic -> IO.oc -> unit Lwt.t)) Lwt.t) -> unit -> t
val make : ?conn_closed:(conn -> unit) -> callback: (conn -> Cohttp.Request.t -> Cohttp_lwt__.Body.t -> (Cohttp.Response.t * Cohttp_lwt__.Body.t) Lwt.t) -> unit -> t
val resolve_local_file : docroot:string -> uri:Uri.t -> string

Resolve a URI and a docroot into a concrete local filename.

Deprecated. Please use Cohttp.Path.resolve_local_file.

val respond : ?headers:Cohttp.Header.t -> ?flush:bool -> status:Cohttp.Code.status_code -> body:Cohttp_lwt__.Body.t -> unit -> (Cohttp.Response.t * Cohttp_lwt__.Body.t) Lwt.t

respond ?headers ?flush ~status ~body will respond to an HTTP request with the given status code and response body. If flush is true, then every response chunk will be flushed to the network rather than being buffered. flush is true by default. The transfer encoding will be detected from the body value and set to chunked encoding if it cannot be determined immediately. You can override the encoding by supplying an appropriate Content-length or Transfer-encoding in the headers parameter.

val respond_string : ?flush:bool -> ?headers:Cohttp.Header.t -> status:Cohttp.Code.status_code -> body:string -> unit -> (Cohttp.Response.t * Cohttp_lwt__.Body.t) Lwt.t
val respond_error : ?headers:Cohttp.Header.t -> ?status:Cohttp.Code.status_code -> body:string -> unit -> (Cohttp.Response.t * Cohttp_lwt__.Body.t) Lwt.t
val respond_redirect : ?headers:Cohttp.Header.t -> uri:Uri.t -> unit -> (Cohttp.Response.t * Cohttp_lwt__.Body.t) Lwt.t
val respond_need_auth : ?headers:Cohttp.Header.t -> auth:Cohttp.Auth.challenge -> unit -> (Cohttp.Response.t * Cohttp_lwt__.Body.t) Lwt.t
val respond_not_found : ?uri:Uri.t -> unit -> (Cohttp.Response.t * Cohttp_lwt__.Body.t) Lwt.t
val callback : t -> IO.conn -> IO.ic -> IO.oc -> unit Lwt.t
Sourceval resolve_file : docroot:string -> uri:Uri.t -> string

Deprecated. Please use Cohttp.Path.resolve_local_file.

Sourceval respond_file : ?headers:Cohttp.Header.t -> fname:string -> unit -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
Sourceval create : ?timeout:int -> ?backlog:int -> ?stop:unit Lwt.t -> ?on_exn:(exn -> unit) -> ?ctx:Cohttp_lwt_unix.Net.ctx -> ?mode:Conduit_lwt_unix.server -> t -> unit Lwt.t

create ?timeout ?backlog ?stop ?on_exn ?mode t is a new HTTP server.

The user can decide to start a simple HTTP server (without encryption) or one with TLS encryption. It depends on what the user gives as mode and how conduit-unix is configured.

To create a simple HTTP server listening on port 8089:

 let run = create (`TCP 8080) 

When provided, the stop thread will terminate the server if it ever becomes determined.

When provided, backlog will limit the number of open connections.

Every connection will be served in a new lightweight thread that is invoked via the callback defined in t. If the callback raises an exception, it is passed to on_exn (by default, to a function that logs the exception using the Logs library).

Sourcetype server = {
  1. host : string;
  2. port : int;
  3. mutable routes : (string * Yurt_route.route * Yurt_request_ctx.endpoint) list;
  4. mutable tls_config : Conduit_lwt_unix.server_tls_config option;
  5. mutable logger : Lwt_log.logger;
}
Sourceval tls_server_key_of_config : ('a * 'b * 'c * 'd) -> [> `TLS of 'a * 'b * 'c ]
Sourceval server : ?tls_config:Conduit_lwt_unix.server_tls_config -> ?logger:Lwt_log.logger -> string -> int -> server
Sourceval find_string : Ezjsonm.value -> string list -> string
Sourceval find_float : Ezjsonm.value -> string list -> float
Sourceval find_tls_config : Ezjsonm.value -> 'a -> ([> `Crt_file_path of string ] * [> `Key_file_path of string ] * [> `No_password ] * [> `Port of 'a ]) option
Sourceval server_from_config : string -> server
Sourceexception End_route_iteration of (Yurt_request_ctx.Response.t * Yurt_request_ctx.Body.t) Lwt.t
Sourceval log_debug : server -> string -> string -> unit
Sourceval log_info : server -> string -> string -> unit
Sourceval log_notice : server -> string -> string -> unit
Sourceval log_warning : server -> string -> string -> unit
Sourceval log_error : server -> string -> string -> unit
Sourceval log_fatal : server -> string -> string -> unit
Sourceval configure_tls : ?password:[ `No_password | `Password of bool -> string ] -> server -> string -> string -> server

Configure TLS for server

Sourceval stream : ?flush:bool -> ?headers:Cohttp.Header.t -> ?status:int -> string Lwt_stream.t -> (Cohttp.Response.t * Cohttp_lwt__.Body.t) Lwt.t

Finish with a string stream

Sourceval string : ?flush:bool -> ?headers:Cohttp.Header.t -> ?status:int -> string -> (Cohttp.Response.t * Cohttp_lwt__.Body.t) Lwt.t
Sourceval json : ?flush:bool -> ?headers:Cohttp.Header.t -> ?status:int -> Ezjsonm.t -> (Cohttp.Response.t * Cohttp_lwt__.Body.t) Lwt.t

Finish with JSON

Sourceval html : ?flush:bool -> ?headers:Cohttp.Header.t -> ?status:int -> Yurt_html.t -> (Cohttp.Response.t * Cohttp_lwt__.Body.t) Lwt.t

Finish with HTML

Sourceval file : ?headers:Cohttp.Header.t -> string -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
Sourceval redirect : ?headers:Cohttp.Header.t -> string -> (Cohttp.Response.t * Cohttp_lwt__.Body.t) Lwt.t
Sourceval register : server -> (string * Yurt_route.route * Yurt_request_ctx.endpoint) list -> server

Sets a route for a compiled regex + endpoint function

Sourceval register_route_string : server -> string -> string -> Yurt_request_ctx.endpoint -> server

Register a single route

Sourceval register_route : server -> string -> Yurt_route.route -> Yurt_request_ctx.endpoint -> server

Register a single route

Sourceval register_static_file_route : ?headers:Cohttp.Header.t -> server -> string -> string -> server

Register a route for a directory

Sourceval register_single_file_route : ?headers:Cohttp.Header.t -> server -> string -> string -> server

Register a route for single file

Sourceval options : string -> Yurt_request_ctx.endpoint -> server -> server
Sourceval post : string -> Yurt_request_ctx.endpoint -> server -> server
Sourceval update : string -> Yurt_request_ctx.endpoint -> server -> server
Sourceval delete : string -> Yurt_request_ctx.endpoint -> server -> server
Sourceval folder : string -> string -> server -> server
Sourceval static_file : string -> string -> server -> server
Sourceval wrap : server -> (t -> 'a) -> 'a

Start the server

Sourceval daemonize : ?directory:string -> ?syslog:bool -> server -> unit

Run as daemon

Sourceval start : server -> unit Lwt.t

Start a configured server with attached endpoints

Sourceexception Cannot_start_server
Sourceval run : server -> unit
Sourceval (>|) : server -> (server -> server) -> server

Add a handler

Sourceval (>||) : server -> (server -> unit) -> server

Run a function that returns unit in the handler definition chain

OCaml

Innovation. Community. Security.