-
Notifications
You must be signed in to change notification settings - Fork 1
/
http_types.ml
223 lines (205 loc) · 6.29 KB
/
http_types.ml
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
(*
OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
Copyright (C) <2002-2007> Stefano Zacchiroli <[email protected]>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as
published by the Free Software Foundation, version 2.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
*)
(** Type definitions *)
type version = [ `HTTP_1_0 | `HTTP_1_1 ]
type meth = [ `GET | `POST | `HEAD | `PUT | `DELETE | `OPTIONS | `TRACE]
type daemon_mode = [ `Single | `Fork | `Thread ]
type tcp_server =
sockaddr:Unix.sockaddr -> timeout:int option ->
(in_channel -> out_channel -> unit) ->
unit
type auth_info =
[ `Basic of string * string (* username, password *)
]
type informational_substatus =
[ `Continue
| `Switching_protocols
]
type success_substatus =
[ `OK
| `Created
| `Accepted
| `Non_authoritative_information
| `No_content
| `Reset_content
| `Partial_content
]
type redirection_substatus =
[ `Multiple_choices
| `Moved_permanently
| `Found
| `See_other
| `Not_modified
| `Use_proxy
| `Temporary_redirect
]
type client_error_substatus =
[ `Bad_request
| `Unauthorized
| `Payment_required
| `Forbidden
| `Not_found
| `Method_not_allowed
| `Not_acceptable
| `Proxy_authentication_required
| `Request_time_out
| `Conflict
| `Gone
| `Length_required
| `Precondition_failed
| `Request_entity_too_large
| `Request_URI_too_large
| `Unsupported_media_type
| `Requested_range_not_satisfiable
| `Expectation_failed
]
type server_error_substatus =
[ `Internal_server_error
| `Not_implemented
| `Bad_gateway
| `Service_unavailable
| `Gateway_time_out
| `HTTP_version_not_supported
]
type informational_status = [ `Informational of informational_substatus ]
type success_status = [ `Success of success_substatus ]
type redirection_status = [ `Redirection of redirection_substatus ]
type client_error_status = [ `Client_error of client_error_substatus ]
type server_error_status = [ `Server_error of server_error_substatus ]
type error_status =
[ client_error_status
| server_error_status
]
type status =
[ informational_status
| success_status
| redirection_status
| client_error_status
| server_error_status
]
type status_code = [ `Code of int | `Status of status ]
type file_source =
| FileSrc of string
| InChanSrc of in_channel
exception Invalid_header of string
exception Invalid_header_name of string
exception Invalid_header_value of string
exception Invalid_HTTP_version of string
exception Invalid_HTTP_method of string
exception Invalid_code of int
exception Malformed_URL of string
exception Malformed_query of string
exception Malformed_query_part of string * string
exception Malformed_request_URI of string
exception Malformed_cookies of string
exception Malformed_request of string
exception Malformed_response of string
exception Param_not_found of string
exception Invalid_status_line of string
exception Header_not_found of string
exception Quit
exception Unauthorized of string
class type message = object
method version: version option
method setVersion: version -> unit
method body: string
method setBody: string -> unit
method bodyBuf: Buffer.t
method setBodyBuf: Buffer.t -> unit
method addBody: string -> unit
method addBodyBuf: Buffer.t -> unit
method addHeader: name:string -> value:string -> unit
method addHeaders: (string * string) list -> unit
method replaceHeader: name:string -> value:string -> unit
method replaceHeaders: (string * string) list -> unit
method removeHeader: name:string -> unit
method hasHeader: name:string -> bool
method header: name:string -> string
method headers: (string * string) list
method clientSockaddr: Unix.sockaddr
method clientAddr: string
method clientPort: int
method serverSockaddr: Unix.sockaddr
method serverAddr: string
method serverPort: int
method toString: string
method serialize: out_channel -> unit
end
class type request = object
inherit message
method meth: meth
method uri: string
method path: string
method param: ?meth:meth -> ?default:string -> string -> string
method paramAll: ?meth:meth -> string -> string list
method params: (string * string) list
method params_GET: (string * string) list
method params_POST: (string * string) list
method cookies: (string * string) list option
method authorization: auth_info option
end
class type response = object
inherit message
method code: int
method setCode: int -> unit
method status: status
method setStatus: status -> unit
method reason: string
method setReason: string -> unit
method statusLine: string
method setStatusLine: string -> unit
method isInformational: bool
method isSuccess: bool
method isRedirection: bool
method isClientError: bool
method isServerError: bool
method isError: bool
method addBasicHeaders: unit
method contentType: string
method setContentType: string -> unit
method contentEncoding: string
method setContentEncoding: string -> unit
method date: string
method setDate: string -> unit
method expires: string
method setExpires: string -> unit
method server: string
method setServer: string -> unit
method connection: string
method setConnection: string -> unit
end
class type connection =
object
method getRequest: request option
method respond_with: response -> unit
method close: unit
end
class type daemon =
object
method accept: connection
method getRequest: request * connection
end
type daemon_spec = {
address: string;
auth: (string * auth_info) option;
callback: request -> out_channel -> unit;
mode: daemon_mode;
port: int;
root_dir: string option;
exn_handler: (exn -> out_channel -> unit) option;
timeout: int option;
auto_close: bool;
}