aboutsummaryrefslogtreecommitdiff
path: root/src/microhttpd/reason_phrase.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/microhttpd/reason_phrase.c')
-rw-r--r--src/microhttpd/reason_phrase.c160
1 files changed, 160 insertions, 0 deletions
diff --git a/src/microhttpd/reason_phrase.c b/src/microhttpd/reason_phrase.c
new file mode 100644
index 00000000..3afe8af8
--- /dev/null
+++ b/src/microhttpd/reason_phrase.c
@@ -0,0 +1,160 @@
+/*
+ This file is part of libmicrohttpd
+ Copyright (C) 2007, 2011 Christian Grothoff
+
+ 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)
+ */
+#include "platform.h"
+#include "reason_phrase.h"
+
+#ifndef NULL
+#define NULL (void*)0
+#endif
+
+static const char *invalid_hundred[] = { NULL };
+
+static const char *const one_hundred[] = {
+ "Continue",
+ "Switching Protocols",
+ "Processing"
+};
+
+static const char *const two_hundred[] = {
+ "OK",
+ "Created",
+ "Accepted",
+ "Non-Authoritative Information",
+ "No Content",
+ "Reset Content",
+ "Partial Content",
+ "Multi Status"
+};
+
+static const char *const three_hundred[] = {
+ "Multiple Choices",
+ "Moved Permanently",
+ "Moved Temporarily",
+ "See Other",
+ "Not Modified",
+ "Use Proxy",
+ "Switch Proxy",
+ "Temporary Redirect"
+};
+
+static const char *const four_hundred[] = {
+ "Bad Request",
+ "Unauthorized",
+ "Payment Required",
+ "Forbidden",
+ "Not Found",
+ "Method Not Allowed",
+ "Not Acceptable",
+ "Proxy Authentication Required",
+ "Request Time-out",
+ "Conflict",
+ "Gone",
+ "Length Required",
+ "Precondition Failed",
+ "Request Entity Too Large",
+ "Request-URI Too Large",
+ "Unsupported Media Type",
+ "Requested Range Not Satisfiable",
+ "Expectation Failed",
+ "Unknown",
+ "Unknown",
+ "Unknown", /* 420 */
+ "Unknown",
+ "Unprocessable Entity",
+ "Locked",
+ "Failed Dependency",
+ "Unordered Collection",
+ "Upgrade Required",
+ "Unknown",
+ "Unknown",
+ "Unknown",
+ "Unknown", /* 430 */
+ "Unknown",
+ "Unknown",
+ "Unknown",
+ "Unknown",
+ "Unknown", /* 435 */
+ "Unknown",
+ "Unknown",
+ "Unknown",
+ "Unknown",
+ "Unknown", /* 440 */
+ "Unknown",
+ "Unknown",
+ "Unknown",
+ "No Response",
+ "Unknown", /* 445 */
+ "Unknown",
+ "Unknown",
+ "Unknown",
+ "Retry With",
+ "Blocked by Windows Parental Controls", /* 450 */
+ "Unavailable For Legal Reasons"
+};
+
+static const char *const five_hundred[] = {
+ "Internal Server Error",
+ "Not Implemented",
+ "Bad Gateway",
+ "Service Unavailable",
+ "Gateway Time-out",
+ "HTTP Version not supported",
+ "Variant Also Negotiates",
+ "Insufficient Storage",
+ "Unknown",
+ "Bandwidth Limit Exceeded",
+ "Not Extended"
+};
+
+
+struct MHD_Reason_Block
+{
+ unsigned int 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";
+}