/** * sesimos - secure, simple, modern web server * @brief HTTP static implementation * @file src/lib/http_static.c * @author Lorenz Stechauner * @date 2021-05-03 * @details https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml */ #include "http.h" const http_status http_statuses[] = { {100, HTTP_TYPE_INFORMATIONAL, "Continue"}, {101, HTTP_TYPE_INFORMATIONAL, "Switching Protocols"}, {102, HTTP_TYPE_INFORMATIONAL, "Processing"}, {103, HTTP_TYPE_INFORMATIONAL, "Early Hints"}, {200, HTTP_TYPE_SUCCESS, "OK"}, {201, HTTP_TYPE_SUCCESS, "Created"}, {202, HTTP_TYPE_SUCCESS, "Accepted"}, {203, HTTP_TYPE_SUCCESS, "Non-Authoritative Information"}, {204, HTTP_TYPE_SUCCESS, "No Content"}, {205, HTTP_TYPE_SUCCESS, "Reset Content"}, {206, HTTP_TYPE_SUCCESS, "Partial Content"}, {207, HTTP_TYPE_SUCCESS, "Multi-Status"}, {208, HTTP_TYPE_SUCCESS, "Already Reported"}, {226, HTTP_TYPE_SUCCESS, "Instance Manipulation Used"}, {300, HTTP_TYPE_REDIRECTION, "Multiple Choices"}, {301, HTTP_TYPE_REDIRECTION, "Moved Permanently"}, {302, HTTP_TYPE_REDIRECTION, "Found"}, {303, HTTP_TYPE_REDIRECTION, "See Other"}, {304, HTTP_TYPE_SUCCESS, "Not Modified"}, {305, HTTP_TYPE_REDIRECTION, "Use Proxy"}, {307, HTTP_TYPE_REDIRECTION, "Temporary Redirect"}, {308, HTTP_TYPE_REDIRECTION, "Permanent Redirect"}, {400, HTTP_TYPE_CLIENT_ERROR, "Bad Request"}, {401, HTTP_TYPE_CLIENT_ERROR, "Unauthorized"}, {402, HTTP_TYPE_CLIENT_ERROR, "Payment Required"}, {403, HTTP_TYPE_CLIENT_ERROR, "Forbidden"}, {404, HTTP_TYPE_CLIENT_ERROR, "Not Found"}, {405, HTTP_TYPE_CLIENT_ERROR, "Method Not Allowed"}, {406, HTTP_TYPE_CLIENT_ERROR, "Not Acceptable"}, {407, HTTP_TYPE_CLIENT_ERROR, "Proxy Authentication Required"}, {408, HTTP_TYPE_CLIENT_ERROR, "Request Timeout"}, {409, HTTP_TYPE_CLIENT_ERROR, "Conflict"}, {410, HTTP_TYPE_CLIENT_ERROR, "Gone"}, {411, HTTP_TYPE_CLIENT_ERROR, "Length Required"}, {412, HTTP_TYPE_CLIENT_ERROR, "Precondition Failed"}, {413, HTTP_TYPE_CLIENT_ERROR, "Request Entity Too Large"}, {414, HTTP_TYPE_CLIENT_ERROR, "Request-URI Too Long"}, {415, HTTP_TYPE_CLIENT_ERROR, "Unsupported Media Type"}, {416, HTTP_TYPE_CLIENT_ERROR, "Range Not Satisfiable"}, {417, HTTP_TYPE_CLIENT_ERROR, "Expectation Failed"}, {421, HTTP_TYPE_CLIENT_ERROR, "Misdirected Request"}, {422, HTTP_TYPE_CLIENT_ERROR, "Unprocessable Content"}, {423, HTTP_TYPE_CLIENT_ERROR, "Locked"}, {424, HTTP_TYPE_CLIENT_ERROR, "Failed Dependency"}, {425, HTTP_TYPE_CLIENT_ERROR, "Too Early"}, {426, HTTP_TYPE_CLIENT_ERROR, "Upgrade Required"}, {428, HTTP_TYPE_CLIENT_ERROR, "Precondition Required"}, {429, HTTP_TYPE_CLIENT_ERROR, "Too Many Requests"}, {431, HTTP_TYPE_CLIENT_ERROR, "Request Header Fields Too Large"}, {451, HTTP_TYPE_CLIENT_ERROR, "Unavailable For Legal Reasons"}, {500, HTTP_TYPE_SERVER_ERROR, "Internal Server Error"}, {501, HTTP_TYPE_SERVER_ERROR, "Not Implemented"}, {502, HTTP_TYPE_SERVER_ERROR, "Bad Gateway"}, {503, HTTP_TYPE_SERVER_ERROR, "Service Unavailable"}, {504, HTTP_TYPE_SERVER_ERROR, "Gateway Timeout"}, {505, HTTP_TYPE_SERVER_ERROR, "HTTP Version Not Supported"}, {506, HTTP_TYPE_SERVER_ERROR, "Variant Also Negotiates"}, {507, HTTP_TYPE_SERVER_ERROR, "Insufficient Storage"}, {508, HTTP_TYPE_SERVER_ERROR, "Loop Detected"}, {511, HTTP_TYPE_SERVER_ERROR, "Network Authentication Required"}, }; const http_status_msg http_status_messages[] = { {100, "The client SHOULD continue with its request. The server MUST send a final response after the request " "has been completed."}, {101, "The server understands and is willing to comply with the clients request, via the Upgrade message " "header field, for a change in the application protocol being used on this connection."}, {102, "The server has a reasonable expectation that the request will take significant time to complete. The " "server MUST send a final response after the request has been completed."}, {103, "The client can speculatively evaluate the header fields included in the response while waiting for the " "final response. The server MUST send a final response after the request has been completed."}, {200, "The request has succeeded."}, {201, "The request has been fulfilled and resulted in a new resource being created."}, {202, "The request has been accepted for processing, but the processing has not been completed."}, {203, "The returned meta information in the entity-header is not the definitive set as available from the " "origin server, but is gathered from a local or a third-party copy."}, {204, "The server has fulfilled the request but does not need to return an entity-body, and might want to " "return updated meta information."}, {205, "The server has fulfilled the request and the user agent SHOULD reset the document view which caused the " "request to be sent."}, {206, "The server has fulfilled the partial GET request for the resource."}, {207, "The response provides status for multiple independent operations."}, {208, "The response is used to avoid enumerating the internal members of multiple bindings to the same " "collection repeatedly."}, {226, "The server has fulfilled a GET request for the resource, and the response is a representation of the " "result of one or more instance-manipulations applied to the current instance."}, {300, "The requested resource corresponds to any one of a set of representations, each with its own specific " "location, and agent-driven negotiation information is being provided so that the user (or user agent) " "can select a preferred representation and redirect its request to that location."}, {301, "The requested resource has been assigned a new permanent URI and any future references to this resource " "SHOULD use one of the returned URIs."}, {302, "The requested resource resides temporarily under a different URI."}, {303, "The response to the request can be found under a different URI and SHOULD be retrieved using a GET " "method on that resource."}, {304, "The request has been fulfilled and the requested resource has not been modified."}, {305, "The requested resource MUST be accessed through the proxy given by the Location field."}, {307, "The requested resource resides temporarily under a different URI."}, {308, "The requested resource has been assigned a new permanent URI and any future references to this resource " "ought to use one of the enclosed URIs."}, {400, "The request could not be understood by the server due to malformed syntax."}, {401, "The request requires user authentication."}, {403, "The server understood the request, but is refusing to fulfill it."}, {404, "The server has not found anything matching the Request-URI."}, {405, "The method specified in the Request-Line is not allowed for the resource identified by the " "Request-URI."}, {406, "The resource identified by the request is only capable of generating response entities which have " "content characteristics not acceptable according to the accept headers sent in the request."}, {407, "The request requires user authentication on the proxy."}, {408, "The client did not produce a request within the time that the server was prepared to wait."}, {409, "The request could not be completed due to a conflict with the current state of the resource."}, {410, "The requested resource is no longer available at the server and no forwarding address is known."}, {411, "The server refuses to accept the request without a defined Content-Length."}, {412, "The precondition given in one or more of the request-header fields evaluated to false when it was " "tested on the server."}, {413, "The server is refusing to process a request because the request entity is larger than the server is " "willing or able to process."}, {414, "The server is refusing to service the request because the Request-URI is longer than the server is " "willing to interpret."}, {415, "The server is refusing to service the request because the entity of the request is in a format not " "supported by the requested resource for the requested method."}, {416, "None of the ranges in the requests Range header field overlap the current extent of the selected " "resource or that the set of ranges requested has been rejected due to invalid ranges or an excessive " "request of small or overlapping ranges."}, {417, "The expectation given in an Expect request-header field could not be met by this server, or, if the " "server is a proxy, the server has unambiguous evidence that the request could not be met by the " "next-hop server."}, {421, "The server is not able to produce a response. The client MAY retry the request over a different " "connection."}, {422, "The server understands the content type of the request content, and the syntax of the request content " "is correct, but the server was unable to process the contained information."}, {423, "The source or destination resource of a method is locked."}, {424, "The method could not be performed on the resource because the requested action depended on another " "action and that action failed."}, {425, "The server is unwilling to risk processing a request that might be replayed."}, {426, "The server refuses to perform the request using the current protocol but might be willing to do so " "after the client upgrades to a different protocol. The server MUST send an Upgrade header field to" "indicate the required protocol(s)."}, {428, "The origin server requires the request to be conditional. By requiring requests to be conditional, the " "server can assure that clients are working with the correct copies and thus avoiding a lost update."}, {429, "The client has sent too many requests in a given amount of time."}, {431, "The server is unwilling to process the request because its header fields are too large. The request MAY " "be resubmitted after reducing the size of the request header fields."}, {451, "The server is denying access to the resource as a consequence of a legal demand."}, {500, "The server encountered an unexpected condition which prevented it from fulfilling the request."}, {501, "The server does not support the functionality required to fulfill the request."}, {502, "The server, while acting as a gateway or proxy, received an invalid response from the upstream server " "it accessed in attempting to fulfill the request."}, {503, "The server is currently unable to handle the request due to a temporary overloading or maintenance of " "the server."}, {504, "The server, while acting as a gateway or proxy, did not receive a timely response from the upstream " "server specified by the URI or some other auxiliary server it needed to access in attempting to " "complete the request."}, {505, "The server does not support, or refuses to support, the HTTP protocol version that was used in the " "request message."}, {506, "The server has an internal configuration error: the chosen variant resource is configured to engage in " "transparent content negotiation itself, and is therefore not a proper end point in the negotiation " "process."}, {507, "The method could not be performed on the resource because the server is unable to store the " "representation needed to successfully complete the request. This condition is considered to be " "temporary."}, {508, "The server terminated an operation because it encountered an infinite loop while processing the " "request."}, {511, "The client needs to authenticate to gain network access. The response representation SHOULD contain a " "link to a resource that allows the user to submit credentials."}, }; const int http_statuses_size = sizeof(http_statuses) / sizeof(http_status); const int http_status_messages_size = sizeof(http_status_messages) / sizeof(http_status_msg); const char http_error_doc[] = "

%1$i

\n" "

%2$s :(

\n" "

%3$s

\n" "

%4$s

\n"; const char http_warning_doc[] = "

%1$i

\n" "

%2$s :)

\n" "

%3$s

\n" "

%4$s

\n"; const char http_success_doc[] = "

%1$i

\n" "

%2$s :)

\n" "

%3$s

\n" "

%4$s

\n"; const char http_info_doc[] = "

%1$i

\n" "

%2$s :)

\n" "

%3$s

\n" "

%4$s

\n";