1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
type 'addr request = 'addr Request.t
type response = Response.t
type 'a status = 'a Response.status
type mime = Mime.t
type body = Response.body
module Gemtext = Gemtext
let paragraph = Gemtext.paragraph
let uri = Request.uri
let target = Request.target
let ip = Request.ip
let port = Request.port
let sni = Request.sni
let query = Request.query
let client_cert = Request.client_cert
let param = Request.param
let response = Response.response
let response_body = Response.response_body
let response_text = Response.response_text
let response_gemtext = Response.response_gemtext
let response_raw = Response.response_raw
include Response.Status
let string = Response.string
let gemtext = Response.gemtext
let lines = Response.lines
let seq = Response.seq
let stream = Response.stream
let page = Response.page
let make_mime = Mime.make_mime
let from_filename = Mime.from_filename
let from_content = Mime.from_content
let gemini = Mime.gemini
let app_octet_stream = Mime.app_octet_stream
let plaintext = Mime.plaintext
let text = Mime.text
let with_charset = Mime.with_charset
module type NET = sig
module IO : Types.IO
type route
type rate_limiter
type addr
type handler = addr Request.t -> Response.t IO.t
type middleware = handler -> handler
type clock
val no_middleware : middleware
val pipeline : middleware list -> middleware
val router : route list -> handler
val route :
?rate_limit:rate_limiter ->
?mw:middleware ->
?regex:bool ->
string ->
handler ->
route
val scope :
?rate_limit:rate_limiter -> ?mw:middleware -> string -> route list -> route
val no_route : route
val make_rate_limit :
clock ->
?period:int ->
int ->
[ `Second | `Minute | `Hour | `Day ] ->
rate_limiter
val virtual_hosts :
?meth:[ `ByURL | `SNI ] -> (string * handler) list -> handler
val set_log_lvl : Logs.level -> unit
val logger : clock -> handler -> handler
val debug : 'a Logs.log
val info : 'a Logs.log
val warning : 'a Logs.log
val error : 'a Logs.log
end
module type FS = sig
module IO : Types.IO
type addr
type handler = addr Handler.Make(IO).t
type dir_path
val response_document : ?mime:mime -> dir_path -> response IO.t
val static :
?handler:(dir_path -> handler) ->
?dir_listing:
(([ `Regular_file | `Directory | `Other ] * string) list -> handler) ->
?index:string ->
?show_hidden:bool ->
dir_path ->
handler
end
module Private = struct
module type IO = Types.IO
module type ADDR = Types.ADDR
module type PCLOCK = Types.PCLOCK
type response_view = Response.view
let view_of_resp = Response.view_of_resp
module Cert = struct
let get_certs ~exn_msg = function
| default :: mult -> `Multiple_default (default, mult)
| _ -> invalid_arg exn_msg
end
module CGI = Cgi
module Handler = Handler
module Logger_impl = Logger_impl
module Protocol = Protocol
module Rate_limiter_impl = Rate_limiter_impl
module Router_impl = Router_impl
module Static = Static
end