Fix #1624
This commit is contained in:
parent
ee625232a4
commit
afb0674ccb
146
httplib.h
146
httplib.h
@ -668,6 +668,8 @@ using SocketOptions = std::function<void(socket_t sock)>;
|
|||||||
|
|
||||||
void default_socket_options(socket_t sock);
|
void default_socket_options(socket_t sock);
|
||||||
|
|
||||||
|
const char *status_message(int status);
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
|
|
||||||
class MatcherBase {
|
class MatcherBase {
|
||||||
@ -1776,6 +1778,76 @@ inline void default_socket_options(socket_t sock) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline const char *status_message(int status) {
|
||||||
|
switch (status) {
|
||||||
|
case 100: return "Continue";
|
||||||
|
case 101: return "Switching Protocol";
|
||||||
|
case 102: return "Processing";
|
||||||
|
case 103: return "Early Hints";
|
||||||
|
case 200: return "OK";
|
||||||
|
case 201: return "Created";
|
||||||
|
case 202: return "Accepted";
|
||||||
|
case 203: return "Non-Authoritative Information";
|
||||||
|
case 204: return "No Content";
|
||||||
|
case 205: return "Reset Content";
|
||||||
|
case 206: return "Partial Content";
|
||||||
|
case 207: return "Multi-Status";
|
||||||
|
case 208: return "Already Reported";
|
||||||
|
case 226: return "IM Used";
|
||||||
|
case 300: return "Multiple Choice";
|
||||||
|
case 301: return "Moved Permanently";
|
||||||
|
case 302: return "Found";
|
||||||
|
case 303: return "See Other";
|
||||||
|
case 304: return "Not Modified";
|
||||||
|
case 305: return "Use Proxy";
|
||||||
|
case 306: return "unused";
|
||||||
|
case 307: return "Temporary Redirect";
|
||||||
|
case 308: return "Permanent Redirect";
|
||||||
|
case 400: return "Bad Request";
|
||||||
|
case 401: return "Unauthorized";
|
||||||
|
case 402: return "Payment Required";
|
||||||
|
case 403: return "Forbidden";
|
||||||
|
case 404: return "Not Found";
|
||||||
|
case 405: return "Method Not Allowed";
|
||||||
|
case 406: return "Not Acceptable";
|
||||||
|
case 407: return "Proxy Authentication Required";
|
||||||
|
case 408: return "Request Timeout";
|
||||||
|
case 409: return "Conflict";
|
||||||
|
case 410: return "Gone";
|
||||||
|
case 411: return "Length Required";
|
||||||
|
case 412: return "Precondition Failed";
|
||||||
|
case 413: return "Payload Too Large";
|
||||||
|
case 414: return "URI Too Long";
|
||||||
|
case 415: return "Unsupported Media Type";
|
||||||
|
case 416: return "Range Not Satisfiable";
|
||||||
|
case 417: return "Expectation Failed";
|
||||||
|
case 418: return "I'm a teapot";
|
||||||
|
case 421: return "Misdirected Request";
|
||||||
|
case 422: return "Unprocessable Entity";
|
||||||
|
case 423: return "Locked";
|
||||||
|
case 424: return "Failed Dependency";
|
||||||
|
case 425: return "Too Early";
|
||||||
|
case 426: return "Upgrade Required";
|
||||||
|
case 428: return "Precondition Required";
|
||||||
|
case 429: return "Too Many Requests";
|
||||||
|
case 431: return "Request Header Fields Too Large";
|
||||||
|
case 451: return "Unavailable For Legal Reasons";
|
||||||
|
case 501: return "Not Implemented";
|
||||||
|
case 502: return "Bad Gateway";
|
||||||
|
case 503: return "Service Unavailable";
|
||||||
|
case 504: return "Gateway Timeout";
|
||||||
|
case 505: return "HTTP Version Not Supported";
|
||||||
|
case 506: return "Variant Also Negotiates";
|
||||||
|
case 507: return "Insufficient Storage";
|
||||||
|
case 508: return "Loop Detected";
|
||||||
|
case 510: return "Not Extended";
|
||||||
|
case 511: return "Network Authentication Required";
|
||||||
|
|
||||||
|
default:
|
||||||
|
case 500: return "Internal Server Error";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template <class Rep, class Period>
|
template <class Rep, class Period>
|
||||||
inline Server &
|
inline Server &
|
||||||
Server::set_read_timeout(const std::chrono::duration<Rep, Period> &duration) {
|
Server::set_read_timeout(const std::chrono::duration<Rep, Period> &duration) {
|
||||||
@ -3180,76 +3252,6 @@ find_content_type(const std::string &path,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const char *status_message(int status) {
|
|
||||||
switch (status) {
|
|
||||||
case 100: return "Continue";
|
|
||||||
case 101: return "Switching Protocol";
|
|
||||||
case 102: return "Processing";
|
|
||||||
case 103: return "Early Hints";
|
|
||||||
case 200: return "OK";
|
|
||||||
case 201: return "Created";
|
|
||||||
case 202: return "Accepted";
|
|
||||||
case 203: return "Non-Authoritative Information";
|
|
||||||
case 204: return "No Content";
|
|
||||||
case 205: return "Reset Content";
|
|
||||||
case 206: return "Partial Content";
|
|
||||||
case 207: return "Multi-Status";
|
|
||||||
case 208: return "Already Reported";
|
|
||||||
case 226: return "IM Used";
|
|
||||||
case 300: return "Multiple Choice";
|
|
||||||
case 301: return "Moved Permanently";
|
|
||||||
case 302: return "Found";
|
|
||||||
case 303: return "See Other";
|
|
||||||
case 304: return "Not Modified";
|
|
||||||
case 305: return "Use Proxy";
|
|
||||||
case 306: return "unused";
|
|
||||||
case 307: return "Temporary Redirect";
|
|
||||||
case 308: return "Permanent Redirect";
|
|
||||||
case 400: return "Bad Request";
|
|
||||||
case 401: return "Unauthorized";
|
|
||||||
case 402: return "Payment Required";
|
|
||||||
case 403: return "Forbidden";
|
|
||||||
case 404: return "Not Found";
|
|
||||||
case 405: return "Method Not Allowed";
|
|
||||||
case 406: return "Not Acceptable";
|
|
||||||
case 407: return "Proxy Authentication Required";
|
|
||||||
case 408: return "Request Timeout";
|
|
||||||
case 409: return "Conflict";
|
|
||||||
case 410: return "Gone";
|
|
||||||
case 411: return "Length Required";
|
|
||||||
case 412: return "Precondition Failed";
|
|
||||||
case 413: return "Payload Too Large";
|
|
||||||
case 414: return "URI Too Long";
|
|
||||||
case 415: return "Unsupported Media Type";
|
|
||||||
case 416: return "Range Not Satisfiable";
|
|
||||||
case 417: return "Expectation Failed";
|
|
||||||
case 418: return "I'm a teapot";
|
|
||||||
case 421: return "Misdirected Request";
|
|
||||||
case 422: return "Unprocessable Entity";
|
|
||||||
case 423: return "Locked";
|
|
||||||
case 424: return "Failed Dependency";
|
|
||||||
case 425: return "Too Early";
|
|
||||||
case 426: return "Upgrade Required";
|
|
||||||
case 428: return "Precondition Required";
|
|
||||||
case 429: return "Too Many Requests";
|
|
||||||
case 431: return "Request Header Fields Too Large";
|
|
||||||
case 451: return "Unavailable For Legal Reasons";
|
|
||||||
case 501: return "Not Implemented";
|
|
||||||
case 502: return "Bad Gateway";
|
|
||||||
case 503: return "Service Unavailable";
|
|
||||||
case 504: return "Gateway Timeout";
|
|
||||||
case 505: return "HTTP Version Not Supported";
|
|
||||||
case 506: return "Variant Also Negotiates";
|
|
||||||
case 507: return "Insufficient Storage";
|
|
||||||
case 508: return "Loop Detected";
|
|
||||||
case 510: return "Not Extended";
|
|
||||||
case 511: return "Network Authentication Required";
|
|
||||||
|
|
||||||
default:
|
|
||||||
case 500: return "Internal Server Error";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool can_compress_content_type(const std::string &content_type) {
|
inline bool can_compress_content_type(const std::string &content_type) {
|
||||||
using udl::operator""_t;
|
using udl::operator""_t;
|
||||||
|
|
||||||
@ -5692,7 +5694,7 @@ inline bool Server::write_response_core(Stream &strm, bool close_connection,
|
|||||||
detail::BufferStream bstrm;
|
detail::BufferStream bstrm;
|
||||||
|
|
||||||
if (!bstrm.write_format("HTTP/1.1 %d %s\r\n", res.status,
|
if (!bstrm.write_format("HTTP/1.1 %d %s\r\n", res.status,
|
||||||
detail::status_message(res.status))) {
|
status_message(res.status))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6328,7 +6330,7 @@ Server::process_request(Stream &strm, bool close_connection,
|
|||||||
case 100:
|
case 100:
|
||||||
case 417:
|
case 417:
|
||||||
strm.write_format("HTTP/1.1 %d %s\r\n\r\n", status,
|
strm.write_format("HTTP/1.1 %d %s\r\n\r\n", status,
|
||||||
detail::status_message(status));
|
status_message(status));
|
||||||
break;
|
break;
|
||||||
default: return write_response(strm, close_connection, req, res);
|
default: return write_response(strm, close_connection, req, res);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user