Legend:
Library
Module
Module type
Parameter
Class
Class type
Library
Module
Module type
Parameter
Class
Class type
include module type of struct include Cohttp_lwt_unix.Server end
include Cohttp_lwt.S.Server with module IO = Cohttp_lwt_unix__.Io
module IO = Cohttp_lwt_unix.Server.IO
type conn = IO.conn * Cohttp.Connection.t
type response_action = [
| `Expert of Cohttp.Response.t * (IO.ic -> IO.oc -> unit Lwt.t)
| `Response of Cohttp.Response.t * Cohttp_lwt.Body.t
]
A request handler can respond in two ways:
`Response
, with a Response.t
and a Body.t
.`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
.type t = Cohttp_lwt_unix.Server.t
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
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
Deprecated. Please use Cohttp.Path.resolve_local_file.
val respond_file :
?headers:Cohttp.Header.t ->
fname:string ->
unit ->
(Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
val 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).
type server = {
host : string;
port : int;
mutable routes : (string * Yurt_route.route * Yurt_request_ctx.endpoint) list;
mutable tls_config : Conduit_lwt_unix.server_tls_config option;
mutable logger : Lwt_log.logger;
}
val server :
?tls_config:Conduit_lwt_unix.server_tls_config ->
?logger:Lwt_log.logger ->
string ->
int ->
server
val find_string : Ezjsonm.value -> string list -> string
val find_float : Ezjsonm.value -> string list -> float
val find_tls_config :
Ezjsonm.value ->
'a ->
([> `Crt_file_path of string ]
* [> `Key_file_path of string ]
* [> `No_password ]
* [> `Port of 'a ])
option
val server_from_config : string -> server
exception End_route_iteration of (Yurt_request_ctx.Response.t * Yurt_request_ctx.Body.t)
Lwt.t
val log_debug : server -> string -> string -> unit
val log_info : server -> string -> string -> unit
val log_notice : server -> string -> string -> unit
val log_warning : server -> string -> string -> unit
val log_error : server -> string -> string -> unit
val log_fatal : server -> string -> string -> unit
val configure_tls :
?password:[ `No_password | `Password of bool -> string ] ->
server ->
string ->
string ->
server
Configure TLS for server
val 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
val string :
?flush:bool ->
?headers:Cohttp.Header.t ->
?status:int ->
string ->
(Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
val json :
?flush:bool ->
?headers:Cohttp.Header.t ->
?status:int ->
Ezjsonm.t ->
(Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
Finish with JSON
val html :
?flush:bool ->
?headers:Cohttp.Header.t ->
?status:int ->
Yurt_html.t ->
(Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
Finish with HTML
val file :
?headers:Cohttp.Header.t ->
string ->
(Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
val redirect :
?headers:Cohttp.Header.t ->
string ->
(Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
val register :
server ->
(string * Yurt_route.route * Yurt_request_ctx.endpoint) list ->
server
Sets a route for a compiled regex + endpoint function
val register_route_string :
server ->
string ->
string ->
Yurt_request_ctx.endpoint ->
server
Register a single route
val register_route :
server ->
string ->
Yurt_route.route ->
Yurt_request_ctx.endpoint ->
server
Register a single route
val register_static_file_route :
?headers:Cohttp.Header.t ->
server ->
string ->
string ->
server
Register a route for a directory
val register_single_file_route :
?headers:Cohttp.Header.t ->
server ->
string ->
string ->
server
Register a route for single file
val options : string -> Yurt_request_ctx.endpoint -> server -> server
val get : string -> Yurt_request_ctx.endpoint -> server -> server
val post : string -> Yurt_request_ctx.endpoint -> server -> server
val put : string -> Yurt_request_ctx.endpoint -> server -> server
val update : string -> Yurt_request_ctx.endpoint -> server -> server
val delete : string -> Yurt_request_ctx.endpoint -> server -> server
val daemonize : ?directory:string -> ?syslog:bool -> server -> unit
Run as daemon
val start : server -> unit Lwt.t
Start a configured server with attached endpoints
val run : server -> unit