28 #ifndef HTTP_CONSTANTS_HPP
29 #define HTTP_CONSTANTS_HPP
79 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
80 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
81 0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,
82 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,
83 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
84 1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,
85 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
86 1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,
87 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
88 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
89 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
90 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
91 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
92 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
93 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
94 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
99 return (header_token[c] == 1);
104 return !header_token[c];
112 return (c == 9 || c == 32);
117 return (c != 9 && c != 32);
121 namespace status_code {
126 switching_protocols = 101,
131 non_authoritative_information = 203,
134 partial_content = 206,
136 multiple_choices = 300,
137 moved_permanently = 301,
142 temporary_redirect = 307,
146 payment_required = 402,
149 method_not_allowed = 405,
150 not_acceptable = 406,
151 proxy_authentication_required = 407,
152 request_timeout = 408,
155 length_required = 411,
156 precondition_failed = 412,
157 request_entity_too_large = 413,
158 request_uri_too_long = 414,
159 unsupported_media_type = 415,
160 request_range_not_satisfiable = 416,
161 expectation_failed = 417,
163 upgrade_required = 426,
164 precondition_required = 428,
165 too_many_requests = 429,
166 request_header_fields_too_large = 431,
168 internal_server_error = 500,
169 not_implemented = 501,
171 service_unavailable = 503,
172 gateway_timeout = 504,
173 http_version_not_supported = 505,
175 network_authentication_required = 511
179 inline std::string get_string(value c) {
182 return "Uninitialized";
185 case switching_protocols:
186 return "Switching Protocols";
193 case non_authoritative_information:
194 return "Non Authoritative Information";
198 return "Reset Content";
199 case partial_content:
200 return "Partial Content";
201 case multiple_choices:
202 return "Multiple Choices";
203 case moved_permanently:
204 return "Moved Permanently";
210 return "Not Modified";
213 case temporary_redirect:
214 return "Temporary Redirect";
216 return "Bad Request";
218 return "Unauthorized";
219 case payment_required:
220 return "Payment Required";
225 case method_not_allowed:
226 return "Method Not Allowed";
228 return "Not Acceptable";
229 case proxy_authentication_required:
230 return "Proxy Authentication Required";
231 case request_timeout:
232 return "Request Timeout";
237 case length_required:
238 return "Length Required";
239 case precondition_failed:
240 return "Precondition Failed";
241 case request_entity_too_large:
242 return "Request Entity Too Large";
243 case request_uri_too_long:
244 return "Request-URI Too Long";
245 case unsupported_media_type:
246 return "Unsupported Media Type";
247 case request_range_not_satisfiable:
248 return "Requested Range Not Satisfiable";
249 case expectation_failed:
250 return "Expectation Failed";
252 return "I'm a teapot";
253 case upgrade_required:
254 return "Upgrade Required";
255 case precondition_required:
256 return "Precondition Required";
257 case too_many_requests:
258 return "Too Many Requests";
259 case request_header_fields_too_large:
260 return "Request Header Fields Too Large";
261 case internal_server_error:
262 return "Internal Server Error";
263 case not_implemented:
264 return "Not Implemented";
266 return "Bad Gateway";
267 case service_unavailable:
268 return "Service Unavailable";
269 case gateway_timeout:
270 return "Gateway Timeout";
271 case http_version_not_supported:
272 return "HTTP Version Not Supported";
274 return "Not Extended";
275 case network_authentication_required:
276 return "Network Authentication Required";
286 status_code::value error_code,
287 const std::string& error_msg =
"",
288 const std::string& body =
"")
290 , m_error_msg(error_msg)
292 , m_error_code(error_code) {}
296 virtual const char* what()
const throw() {
297 return m_msg.c_str();
301 std::string m_error_msg;
303 status_code::value m_error_code;
308 #endif // HTTP_CONSTANTS_HPP
static std::string const empty_header
Literal value of an empty header.
bool is_not_whitespace_char(unsigned char c)
Is the character non-whitespace.
static char const header_delimiter[]
Literal value of the HTTP header delimiter.
std::vector< std::pair< std::string, attribute_list > > parameter_list
The type of an HTTP parameter list.
bool is_not_token_char(unsigned char c)
Is the character a non-token.
static char const header_separator[]
Literal value of the HTTP header separator.
size_t const istream_buffer
Number of bytes to use for temporary istream read buffers.
static char const header_token[]
invalid HTTP token characters
Namespace for the WebSocket++ project.
size_t const max_header_size
Maximum size in bytes before rejecting an HTTP header as too big.
std::map< std::string, std::string > attribute_list
The type of an HTTP attribute list.
bool is_token_char(unsigned char c)
Is the character a token.
bool is_whitespace_char(unsigned char c)
Is the character whitespace.
size_t const max_body_size
Default Maximum size in bytes for HTTP message bodies.