drogon
C++14/17-based HTTP application framework
Loading...
Searching...
No Matches
HttpTypes.h
Go to the documentation of this file.
1
13
14#pragma once
15#include <atomic>
16#include <thread>
17#include <iostream>
18#include <string_view>
19#include <trantor/utils/LogStream.h>
21
22namespace drogon
23{
24enum HttpStatusCode
25{
26 kUnknown = 0,
27 k100Continue = 100,
28 k101SwitchingProtocols = 101,
29 k102Processing = 102,
30 k103EarlyHints = 103,
31 k200OK = 200,
32 k201Created = 201,
33 k202Accepted = 202,
34 k203NonAuthoritativeInformation = 203,
35 k204NoContent = 204,
36 k205ResetContent = 205,
37 k206PartialContent = 206,
38 k207MultiStatus = 207,
39 k208AlreadyReported = 208,
40 k226IMUsed = 226,
41 k300MultipleChoices = 300,
42 k301MovedPermanently = 301,
43 k302Found = 302,
44 k303SeeOther = 303,
45 k304NotModified = 304,
46 k305UseProxy = 305,
47 k306Unused = 306,
48 k307TemporaryRedirect = 307,
49 k308PermanentRedirect = 308,
50 k400BadRequest = 400,
51 k401Unauthorized = 401,
52 k402PaymentRequired = 402,
53 k403Forbidden = 403,
54 k404NotFound = 404,
55 k405MethodNotAllowed = 405,
56 k406NotAcceptable = 406,
57 k407ProxyAuthenticationRequired = 407,
58 k408RequestTimeout = 408,
59 k409Conflict = 409,
60 k410Gone = 410,
61 k411LengthRequired = 411,
62 k412PreconditionFailed = 412,
63 k413RequestEntityTooLarge = 413,
64 k414RequestURITooLarge = 414,
65 k415UnsupportedMediaType = 415,
66 k416RequestedRangeNotSatisfiable = 416,
67 k417ExpectationFailed = 417,
68 k418ImATeapot = 418,
69 k421MisdirectedRequest = 421,
70 k422UnprocessableEntity = 422,
71 k423Locked = 423,
72 k424FailedDependency = 424,
73 k425TooEarly = 425,
74 k426UpgradeRequired = 426,
75 k428PreconditionRequired = 428,
76 k429TooManyRequests = 429,
77 k431RequestHeaderFieldsTooLarge = 431,
78 k451UnavailableForLegalReasons = 451,
79 k500InternalServerError = 500,
80 k501NotImplemented = 501,
81 k502BadGateway = 502,
82 k503ServiceUnavailable = 503,
83 k504GatewayTimeout = 504,
84 k505HTTPVersionNotSupported = 505,
85 k506VariantAlsoNegotiates = 506,
86 k507InsufficientStorage = 507,
87 k508LoopDetected = 508,
88 k510NotExtended = 510,
89 k511NetworkAuthenticationRequired = 511
90};
91
92enum class Version
93{
94 kUnknown = 0,
95 kHttp10,
96 kHttp11
97};
98
99enum ContentType
100{
101 CT_NONE = 0,
102 CT_APPLICATION_JSON,
103 CT_TEXT_PLAIN,
104 CT_TEXT_HTML,
105 CT_APPLICATION_X_FORM,
106 CT_APPLICATION_X_JAVASCRIPT [[deprecated("use CT_TEXT_JAVASCRIPT")]],
107 CT_TEXT_JAVASCRIPT,
108 CT_TEXT_CSS,
109 CT_TEXT_CSV,
110 CT_TEXT_XML, // suggests human readable xml
111 CT_APPLICATION_XML, // suggest machine-to-machine xml
112 CT_TEXT_XSL,
113 CT_APPLICATION_WASM,
114 CT_APPLICATION_OCTET_STREAM,
115 CT_APPLICATION_FONT_WOFF,
116 CT_APPLICATION_FONT_WOFF2,
117 CT_APPLICATION_GZIP,
118 CT_APPLICATION_JAVA_ARCHIVE,
119 CT_APPLICATION_PDF,
120 CT_APPLICATION_MSWORD,
121 CT_APPLICATION_MSWORDX,
122 CT_APPLICATION_VND_MS_FONTOBJ,
123 CT_APPLICATION_VND_RAR,
124 CT_APPLICATION_XHTML,
125 CT_APPLICATION_X_7Z,
126 CT_APPLICATION_X_BZIP,
127 CT_APPLICATION_X_BZIP2,
128 CT_APPLICATION_X_HTTPD_PHP,
129 CT_APPLICATION_X_FONT_TRUETYPE,
130 CT_APPLICATION_X_FONT_OPENTYPE,
131 CT_APPLICATION_X_TAR,
132 CT_APPLICATION_X_TGZ,
133 CT_APPLICATION_X_XZ,
134 CT_APPLICATION_ZIP,
135 CT_AUDIO_AAC,
136 CT_AUDIO_AC3,
137 CT_AUDIO_AIFF,
138 CT_AUDIO_FLAC,
139 CT_AUDIO_MATROSKA,
140 CT_AUDIO_MPEG,
141 CT_AUDIO_MPEG4,
142 CT_AUDIO_OGG,
143 CT_AUDIO_WAVE,
144 CT_AUDIO_WEBM,
145 CT_AUDIO_X_APE,
146 CT_AUDIO_X_MS_WMA,
147 CT_AUDIO_X_TTA,
148 CT_AUDIO_X_WAVPACK,
149 CT_IMAGE_APNG,
150 CT_IMAGE_AVIF,
151 CT_IMAGE_BMP,
152 CT_IMAGE_GIF,
153 CT_IMAGE_ICNS,
154 CT_IMAGE_JPG,
155 CT_IMAGE_JP2,
156 CT_IMAGE_PNG,
157 CT_IMAGE_SVG_XML,
158 CT_IMAGE_TIFF,
159 CT_IMAGE_WEBP,
160 CT_IMAGE_X_MNG,
161 CT_IMAGE_X_TGA,
162 CT_IMAGE_XICON,
163 CT_VIDEO_APG,
164 CT_VIDEO_AV1,
165 CT_VIDEO_QUICKTIME,
166 CT_VIDEO_MATROSKA,
167 CT_VIDEO_MP4,
168 CT_VIDEO_MPEG,
169 CT_VIDEO_MPEG2TS,
170 CT_VIDEO_OGG,
171 CT_VIDEO_WEBM,
172 CT_VIDEO_X_M4V,
173 CT_VIDEO_X_MSVIDEO,
174 CT_MULTIPART_FORM_DATA,
175 CT_CUSTOM
176};
177
178enum FileType
179{
180 FT_UNKNOWN = 0,
181 FT_CUSTOM,
182 FT_DOCUMENT,
183 FT_ARCHIVE,
184 FT_AUDIO,
185 FT_MEDIA,
186 FT_IMAGE
187};
188
189enum HttpMethod
190{
191 Get = 0,
192 Post,
193 Head,
194 Put,
195 Delete,
196 Options,
197 Patch,
198 Propfind,
199 Mkcol,
200 Copy,
201 Move,
202 Invalid
203};
204
205enum class ReqResult
206{
207 Ok = 0,
208 BadResponse,
209 NetworkFailure,
210 BadServerAddress,
211 Timeout,
212 HandshakeError,
213 InvalidCertificate,
214 EncryptionFailure,
215};
216
217enum class WebSocketMessageType
218{
219 Text = 0,
220 Binary,
221 Ping,
222 Pong,
223 Close,
224 Unknown
225};
226
227inline std::string_view to_string_view(drogon::ReqResult result)
228{
229 switch (result)
230 {
231 case ReqResult::Ok:
232 return "OK";
233 case ReqResult::BadResponse:
234 return "Bad response from server";
235 case ReqResult::NetworkFailure:
236 return "Network failure";
237 case ReqResult::BadServerAddress:
238 return "Bad server address";
239 case ReqResult::Timeout:
240 return "Timeout";
241 case ReqResult::HandshakeError:
242 return "Handshake error";
243 case ReqResult::InvalidCertificate:
244 return "Invalid certificate";
245 case ReqResult::EncryptionFailure:
246 return "Unrecoverable encryption failure";
247 default:
248 return "Unknown error";
249 }
250}
251
252inline std::string to_string(drogon::ReqResult result)
253{
254 auto sv = to_string_view(result);
255 return std::string(sv.data(), sv.size());
256}
257
258inline std::ostream &operator<<(std::ostream &out, drogon::ReqResult result)
259{
260 return out << to_string_view(result);
261}
262
263inline trantor::LogStream &operator<<(trantor::LogStream &out,
264 drogon::ReqResult result)
265{
266 return out << to_string_view(result);
267}
268
269inline std::string_view to_string_view(drogon::HttpMethod method)
270{
271 switch (method)
272 {
273 case drogon::HttpMethod::Get:
274 return "GET";
275 case drogon::HttpMethod::Post:
276 return "POST";
277 case drogon::HttpMethod::Head:
278 return "HEAD";
279 case drogon::HttpMethod::Put:
280 return "PUT";
281 case drogon::HttpMethod::Delete:
282 return "DELETE";
283 case drogon::HttpMethod::Options:
284 return "OPTIONS";
285 case drogon::HttpMethod::Patch:
286 return "PATCH";
287 case drogon::HttpMethod::Propfind:
288 return "PROPFIND";
289 case drogon::HttpMethod::Mkcol:
290 return "MKCOL";
291 case drogon::HttpMethod::Copy:
292 return "COPY";
293 case drogon::HttpMethod::Move:
294 return "MOVE";
295 default:
296 return "INVALID";
297 }
298}
299
300inline std::string to_string(drogon::HttpMethod method)
301{
302 auto sv = to_string_view(method);
303 return std::string(sv.data(), sv.size());
304}
305
306} // namespace drogon
Drogon Test is a minimal effort test framework developed because the major C++ test frameworks doesn'...
Definition Attribute.h:23