• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2      This file is part of libmicrohttpd
3      Copyright (C) 2007, 2011 Christian Grothoff
4 
5      This library is free software; you can redistribute it and/or
6      modify it under the terms of the GNU Lesser General Public
7      License as published by the Free Software Foundation; either
8      version 2.1 of the License, or (at your option) any later version.
9 
10      This library is distributed in the hope that it will be useful,
11      but WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      Lesser General Public License for more details.
14 
15      You should have received a copy of the GNU Lesser General Public
16      License along with this library; if not, write to the Free Software
17      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18 
19 */
20 
21 /**
22  * @file reason_phrase.c
23  * @brief  Tables of the string response phrases
24  * @author Elliot Glaysher
25  * @author Christian Grothoff (minor code clean up)
26  */
27 #include "platform.h"
28 #include "reason_phrase.h"
29 
30 #ifndef NULL
31 #define NULL (void*)0
32 #endif
33 
34 static const char *invalid_hundred[] = { NULL };
35 
36 static const char *const one_hundred[] = {
37   "Continue",
38   "Switching Protocols",
39   "Processing"
40 };
41 
42 static const char *const two_hundred[] = {
43   "OK",
44   "Created",
45   "Accepted",
46   "Non-Authoritative Information",
47   "No Content",
48   "Reset Content",
49   "Partial Content",
50   "Multi Status"
51 };
52 
53 static const char *const three_hundred[] = {
54   "Multiple Choices",
55   "Moved Permanently",
56   "Moved Temporarily",
57   "See Other",
58   "Not Modified",
59   "Use Proxy",
60   "Switch Proxy",
61   "Temporary Redirect"
62 };
63 
64 static const char *const four_hundred[] = {
65   "Bad Request",
66   "Unauthorized",
67   "Payment Required",
68   "Forbidden",
69   "Not Found",
70   "Method Not Allowed",
71   "Not Acceptable",
72   "Proxy Authentication Required",
73   "Request Time-out",
74   "Conflict",
75   "Gone",
76   "Length Required",
77   "Precondition Failed",
78   "Request Entity Too Large",
79   "Request-URI Too Large",
80   "Unsupported Media Type",
81   "Requested Range Not Satisfiable",
82   "Expectation Failed",
83   "Unknown",
84   "Unknown",
85   "Unknown", /* 420 */
86   "Unknown",
87   "Unprocessable Entity",
88   "Locked",
89   "Failed Dependency",
90   "Unordered Collection",
91   "Upgrade Required",
92   "Unknown",
93   "Unknown",
94   "Unknown",
95   "Unknown", /* 430 */
96   "Unknown",
97   "Unknown",
98   "Unknown",
99   "Unknown",
100   "Unknown", /* 435 */
101   "Unknown",
102   "Unknown",
103   "Unknown",
104   "Unknown",
105   "Unknown", /* 440 */
106   "Unknown",
107   "Unknown",
108   "Unknown",
109   "No Response",
110   "Unknown", /* 445 */
111   "Unknown",
112   "Unknown",
113   "Unknown",
114   "Retry With",
115   "Blocked by Windows Parental Controls", /* 450 */
116   "Unavailable For Legal Reasons"
117 };
118 
119 static const char *const five_hundred[] = {
120   "Internal Server Error",
121   "Not Implemented",
122   "Bad Gateway",
123   "Service Unavailable",
124   "Gateway Time-out",
125   "HTTP Version not supported",
126   "Variant Also Negotiates",
127   "Insufficient Storage",
128   "Unknown",
129   "Bandwidth Limit Exceeded",
130   "Not Extended"
131 };
132 
133 
134 struct MHD_Reason_Block
135 {
136   unsigned int max;
137   const char *const*data;
138 };
139 
140 #define BLOCK(m) { (sizeof(m) / sizeof(char*)), m }
141 
142 static const struct MHD_Reason_Block reasons[] = {
143   BLOCK (invalid_hundred),
144   BLOCK (one_hundred),
145   BLOCK (two_hundred),
146   BLOCK (three_hundred),
147   BLOCK (four_hundred),
148   BLOCK (five_hundred),
149 };
150 
151 
152 const char *
MHD_get_reason_phrase_for(unsigned int code)153 MHD_get_reason_phrase_for (unsigned int code)
154 {
155   if ( (code >= 100) &&
156        (code < 600) &&
157        (reasons[code / 100].max > (code % 100)) )
158     return reasons[code / 100].data[code % 100];
159   return "Unknown";
160 }
161