33823
|
1 |
(* Title: Tools/WWW_Find/http_status.ML
|
33817
|
2 |
Author: Timothy Bourke, NICTA
|
|
3 |
|
|
4 |
HTTP status codes and reasons.
|
|
5 |
*)
|
33823
|
6 |
|
33817
|
7 |
signature HTTP_STATUS =
|
|
8 |
sig
|
|
9 |
type t
|
|
10 |
|
|
11 |
val to_status_code : t -> int
|
|
12 |
val to_reason : t -> string
|
|
13 |
val from_status_code : int -> t option
|
|
14 |
|
|
15 |
val continue : t
|
|
16 |
val switching_protocols : t
|
|
17 |
val ok : t
|
|
18 |
val created : t
|
|
19 |
val accepted : t
|
|
20 |
val non_authoritative_information : t
|
|
21 |
val no_content : t
|
|
22 |
val reset_content : t
|
|
23 |
val partial_content : t
|
|
24 |
val multiple_choices : t
|
|
25 |
val moved_permanently : t
|
|
26 |
val found : t
|
|
27 |
val see_other : t
|
|
28 |
val not_modified : t
|
|
29 |
val use_proxy : t
|
|
30 |
val temporary_redirect : t
|
|
31 |
val bad_request : t
|
|
32 |
val unauthorized : t
|
|
33 |
val payment_required : t
|
|
34 |
val forbidden : t
|
|
35 |
val not_found : t
|
|
36 |
val method_not_allowed : t
|
|
37 |
val not_acceptable : t
|
|
38 |
val proxy_authentication_required : t
|
|
39 |
val request_timeout : t
|
|
40 |
val conflict : t
|
|
41 |
val gone : t
|
|
42 |
val length_required : t
|
|
43 |
val precondition_failed : t
|
|
44 |
val request_entity_too_large : t
|
|
45 |
val request_uri_too_long : t
|
|
46 |
val unsupported_media_type : t
|
|
47 |
val requested_range_not_satisfiable : t
|
|
48 |
val expectation_failed : t
|
|
49 |
val internal_server_error : t
|
|
50 |
val not_implemented : t
|
|
51 |
val bad_gateway : t
|
|
52 |
val service_unavailable : t
|
|
53 |
val gateway_timeout : t
|
|
54 |
val http_version_not_supported : t
|
|
55 |
|
|
56 |
end;
|
|
57 |
|
|
58 |
structure HttpStatus : HTTP_STATUS =
|
|
59 |
struct
|
|
60 |
|
|
61 |
type t = int
|
|
62 |
|
|
63 |
local
|
|
64 |
val int_status_map = Inttab.make
|
|
65 |
[(100, "Continue"),
|
|
66 |
(101, "Switching Protocols"),
|
|
67 |
(200, "OK"),
|
|
68 |
(201, "Created"),
|
|
69 |
(202, "Accepted"),
|
|
70 |
(203, "Non-Authoritative Information"),
|
|
71 |
(204, "No Content"),
|
|
72 |
(205, "Reset Content"),
|
|
73 |
(206, "Partial Content"),
|
|
74 |
(300, "Multiple Choices"),
|
|
75 |
(301, "Moved Permanently"),
|
|
76 |
(302, "Found"),
|
|
77 |
(303, "See Other"),
|
|
78 |
(304, "Not Modified"),
|
|
79 |
(305, "Use Proxy"),
|
|
80 |
(307, "Temporary Redirect"),
|
|
81 |
(400, "Bad Request"),
|
|
82 |
(401, "Unauthorized"),
|
|
83 |
(402, "Payment Required"),
|
|
84 |
(403, "Forbidden"),
|
|
85 |
(404, "Not Found"),
|
|
86 |
(405, "Method Not Allowed"),
|
|
87 |
(406, "Not Acceptable"),
|
|
88 |
(407, "Proxy Authentication Required"),
|
|
89 |
(408, "Request Timeout"),
|
|
90 |
(409, "Conflict"),
|
|
91 |
(410, "Gone"),
|
|
92 |
(411, "Length Required"),
|
|
93 |
(412, "Precondition Failed"),
|
|
94 |
(413, "Request Entity Too Large"),
|
|
95 |
(414, "Request URI Too Long"),
|
|
96 |
(415, "Unsupported Media Type"),
|
|
97 |
(416, "Requested Range Not Satisfiable"),
|
|
98 |
(417, "Expectation Failed"),
|
|
99 |
(500, "Internal Server Error"),
|
|
100 |
(501, "Not Implemented"),
|
|
101 |
(502, "Bad Gateway"),
|
|
102 |
(503, "Service Unavailable"),
|
|
103 |
(504, "Gateway Timeout"),
|
|
104 |
(505, "HTTP Version Not Supported")];
|
|
105 |
in
|
|
106 |
fun from_status_code i =
|
|
107 |
if is_some (Inttab.lookup int_status_map i)
|
|
108 |
then SOME i
|
|
109 |
else NONE;
|
|
110 |
|
|
111 |
val to_reason = the o Inttab.lookup int_status_map;
|
|
112 |
end;
|
|
113 |
|
|
114 |
val to_status_code = I;
|
|
115 |
|
|
116 |
val continue = 100;
|
|
117 |
val switching_protocols = 101;
|
|
118 |
val ok = 200;
|
|
119 |
val created = 201;
|
|
120 |
val accepted = 202;
|
|
121 |
val non_authoritative_information = 203;
|
|
122 |
val no_content = 204;
|
|
123 |
val reset_content = 205;
|
|
124 |
val partial_content = 206;
|
|
125 |
val multiple_choices = 300;
|
|
126 |
val moved_permanently = 301;
|
|
127 |
val found = 302;
|
|
128 |
val see_other = 303;
|
|
129 |
val not_modified = 304;
|
|
130 |
val use_proxy = 305;
|
|
131 |
val temporary_redirect = 307;
|
|
132 |
val bad_request = 400;
|
|
133 |
val unauthorized = 401;
|
|
134 |
val payment_required = 402;
|
|
135 |
val forbidden = 403;
|
|
136 |
val not_found = 404;
|
|
137 |
val method_not_allowed = 405;
|
|
138 |
val not_acceptable = 406;
|
|
139 |
val proxy_authentication_required = 407;
|
|
140 |
val request_timeout = 408;
|
|
141 |
val conflict = 409;
|
|
142 |
val gone = 410;
|
|
143 |
val length_required = 411;
|
|
144 |
val precondition_failed = 412;
|
|
145 |
val request_entity_too_large = 413;
|
|
146 |
val request_uri_too_long = 414;
|
|
147 |
val unsupported_media_type = 415;
|
|
148 |
val requested_range_not_satisfiable = 416;
|
|
149 |
val expectation_failed = 417;
|
|
150 |
val internal_server_error = 500;
|
|
151 |
val not_implemented = 501;
|
|
152 |
val bad_gateway = 502;
|
|
153 |
val service_unavailable = 503;
|
|
154 |
val gateway_timeout = 504;
|
|
155 |
val http_version_not_supported = 505;
|
|
156 |
|
|
157 |
end;
|
|
158 |
|