/* This file is part of libmicrohttpd Copyright (C) 2007, 2011, 2017, 2019 Christian Grothoff, Karlson2k (Evgeny Grin) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file reason_phrase.c * @brief Tables of the string response phrases * @author Elliot Glaysher * @author Christian Grothoff (minor code clean up) * @author Karlson2k (Evgeny Grin) */ #include "platform.h" #include "microhttpd.h" #ifndef NULL #define NULL ((void*)0) #endif static const char *const invalid_hundred[] = { NULL }; static const char *const one_hundred[] = { /* 100 */ "Continue" /* RFC7231, Section 6.2.1 */, /* 101 */ "Switching Protocols" /* RFC7231, Section 6.2.2 */, /* 102 */ "Processing" /* RFC2518 */, /* 103 */ "Early Hints" /* RFC8297 */ }; static const char *const two_hundred[] = { /* 200 */ "OK" /* RFC7231, Section 6.3.1 */, /* 201 */ "Created" /* RFC7231, Section 6.3.2 */, /* 202 */ "Accepted" /* RFC7231, Section 6.3.3 */, /* 203 */ "Non-Authoritative Information" /* RFC7231, Section 6.3.4 */, /* 204 */ "No Content" /* RFC7231, Section 6.3.5 */, /* 205 */ "Reset Content" /* RFC7231, Section 6.3.6 */, /* 206 */ "Partial Content" /* RFC7233, Section 4.1 */, /* 207 */ "Multi-Status" /* RFC4918 */, /* 208 */ "Already Reported" /* RFC5842 */, /* 209 */ "Unknown" /* Not used */, /* 210 */ "Unknown" /* Not used */, /* 211 */ "Unknown" /* Not used */, /* 212 */ "Unknown" /* Not used */, /* 213 */ "Unknown" /* Not used */, /* 214 */ "Unknown" /* Not used */, /* 215 */ "Unknown" /* Not used */, /* 216 */ "Unknown" /* Not used */, /* 217 */ "Unknown" /* Not used */, /* 218 */ "Unknown" /* Not used */, /* 219 */ "Unknown" /* Not used */, /* 220 */ "Unknown" /* Not used */, /* 221 */ "Unknown" /* Not used */, /* 222 */ "Unknown" /* Not used */, /* 223 */ "Unknown" /* Not used */, /* 224 */ "Unknown" /* Not used */, /* 225 */ "Unknown" /* Not used */, /* 226 */ "IM Used" /* RFC3229 */ }; static const char *const three_hundred[] = { /* 300 */ "Multiple Choices" /* RFC7231, Section 6.4.1 */, /* 301 */ "Moved Permanently" /* RFC7231, Section 6.4.2 */, /* 302 */ "Found" /* RFC7231, Section 6.4.3 */, /* 303 */ "See Other" /* RFC7231, Section 6.4.4 */, /* 304 */ "Not Modified" /* RFC7232, Section 4.1 */, /* 305 */ "Use Proxy" /* RFC7231, Section 6.4.5 */, /* 306 */ "Switch Proxy" /* Not used! RFC7231, Section 6.4.6 */, /* 307 */ "Temporary Redirect" /* RFC7231, Section 6.4.7 */, /* 308 */ "Permanent Redirect" /* RFC7538 */ }; static const char *const four_hundred[] = { /* 400 */ "Bad Request" /* RFC7231, Section 6.5.1 */, /* 401 */ "Unauthorized" /* RFC7235, Section 3.1 */, /* 402 */ "Payment Required" /* RFC7231, Section 6.5.2 */, /* 403 */ "Forbidden" /* RFC7231, Section 6.5.3 */, /* 404 */ "Not Found" /* RFC7231, Section 6.5.4 */, /* 405 */ "Method Not Allowed" /* RFC7231, Section 6.5.5 */, /* 406 */ "Not Acceptable" /* RFC7231, Section 6.5.6 */, /* 407 */ "Proxy Authentication Required" /* RFC7235, Section 3.2 */, /* 408 */ "Request Timeout" /* RFC7231, Section 6.5.7 */, /* 409 */ "Conflict" /* RFC7231, Section 6.5.8 */, /* 410 */ "Gone" /* RFC7231, Section 6.5.9 */, /* 411 */ "Length Required" /* RFC7231, Section 6.5.10 */, /* 412 */ "Precondition Failed" /* RFC7232, Section 4.2; RFC8144, Section 3.2 */, /* 413 */ "Payload Too Large" /* RFC7231, Section 6.5.11 */, /* 414 */ "URI Too Long" /* RFC7231, Section 6.5.12 */, /* 415 */ "Unsupported Media Type" /* RFC7231, Section 6.5.13; RFC7694, Section 3 */, /* 416 */ "Range Not Satisfiable" /* RFC7233, Section 4.4 */, /* 417 */ "Expectation Failed" /* RFC7231, Section 6.5.14 */, /* 418 */ "Unknown" /* Not used */, /* 419 */ "Unknown" /* Not used */, /* 420 */ "Unknown" /* Not used */, /* 421 */ "Misdirected Request" /* RFC7540, Section 9.1.2 */, /* 422 */ "Unprocessable Entity" /* RFC4918 */, /* 423 */ "Locked" /* RFC4918 */, /* 424 */ "Failed Dependency" /* RFC4918 */, /* 425 */ "Too Early" /* RFC8470 */, /* 426 */ "Upgrade Required" /* RFC7231, Section 6.5.15 */, /* 427 */ "Unknown" /* Not used */, /* 428 */ "Precondition Required" /* RFC6585 */, /* 429 */ "Too Many Requests" /* RFC6585 */, /* 430 */ "Unknown" /* Not used */, /* 431 */ "Request Header Fields Too Large" /* RFC6585 */, /* 432 */ "Unknown" /* Not used */, /* 433 */ "Unknown" /* Not used */, /* 434 */ "Unknown" /* Not used */, /* 435 */ "Unknown" /* Not used */, /* 436 */ "Unknown" /* Not used */, /* 437 */ "Unknown" /* Not used */, /* 438 */ "Unknown" /* Not used */, /* 439 */ "Unknown" /* Not used */, /* 440 */ "Unknown" /* Not used */, /* 441 */ "Unknown" /* Not used */, /* 442 */ "Unknown" /* Not used */, /* 443 */ "Unknown" /* Not used */, /* 444 */ "Unknown" /* Not used */, /* 445 */ "Unknown" /* Not used */, /* 446 */ "Unknown" /* Not used */, /* 447 */ "Unknown" /* Not used */, /* 448 */ "Unknown" /* Not used */, /* 449 */ "Reply With" /* MS IIS extension */, /* 450 */ "Blocked by Windows Parental Controls" /* MS extension */, /* 451 */ "Unavailable For Legal Reasons" /* RFC7725 */ }; static const char *const five_hundred[] = { /* 500 */ "Internal Server Error" /* RFC7231, Section 6.6.1 */, /* 501 */ "Not Implemented" /* RFC7231, Section 6.6.2 */, /* 502 */ "Bad Gateway" /* RFC7231, Section 6.6.3 */, /* 503 */ "Service Unavailable" /* RFC7231, Section 6.6.4 */, /* 504 */ "Gateway Timeout" /* RFC7231, Section 6.6.5 */, /* 505 */ "HTTP Version Not Supported" /* RFC7231, Section 6.6.6 */, /* 506 */ "Variant Also Negotiates" /* RFC2295 */, /* 507 */ "Insufficient Storage" /* RFC4918 */, /* 508 */ "Loop Detected" /* RFC5842 */, /* 509 */ "Bandwidth Limit Exceeded" /* Apache extension */, /* 510 */ "Not Extended" /* RFC2774 */, /* 511 */ "Network Authentication Required" /* RFC6585 */ }; struct MHD_Reason_Block { size_t max; const char *const*data; }; #define BLOCK(m) { (sizeof(m) / sizeof(char*)), m } static const struct MHD_Reason_Block reasons[] = { BLOCK (invalid_hundred), BLOCK (one_hundred), BLOCK (two_hundred), BLOCK (three_hundred), BLOCK (four_hundred), BLOCK (five_hundred), }; const char * MHD_get_reason_phrase_for (unsigned int code) { if ( (code >= 100) && (code < 600) && (reasons[code / 100].max > (code % 100)) ) return reasons[code / 100].data[code % 100]; return "Unknown"; }