feat: added http response type names
This commit is contained in:
parent
a90330dd6e
commit
590f0e5186
6 changed files with 168 additions and 21 deletions
88
src/http/http_res_names.c
Normal file
88
src/http/http_res_names.c
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
#include "http.h"
|
||||
|
||||
// clang-format off
|
||||
|
||||
const char *http_response_type_names[5][32] = {
|
||||
{
|
||||
"Continue", // 100
|
||||
"Switching Protocols", // 101,
|
||||
"Processing", // 102
|
||||
"Early Hints", // 103
|
||||
},
|
||||
// 2xx
|
||||
{
|
||||
"OK", // 200
|
||||
"Created", // 201
|
||||
"Accepted", // 202
|
||||
"Non-Authoritative Information", // 203
|
||||
"No Content", // 204
|
||||
"Reset Content", // 205
|
||||
"Partial Content", // 206
|
||||
"Multi-Status", // 207
|
||||
"Already Reported", // 208
|
||||
},
|
||||
// 3xx
|
||||
{
|
||||
"Multiple Choices", // 300
|
||||
"Moved Permanently", // 301
|
||||
"Found", // 302
|
||||
"See Other", // 303
|
||||
"Not Modified", // 304
|
||||
NULL, // 305
|
||||
NULL, // 306
|
||||
"Temporary Redirect", // 307
|
||||
"Permanent Redirect", // 308
|
||||
},
|
||||
// 4xx
|
||||
{
|
||||
"Bad Request", // 400
|
||||
"Unauthorized", // 401
|
||||
"Payment Required", // 402
|
||||
"Forbidden", // 403
|
||||
"Not Found", // 404
|
||||
"Method Not Allowed", // 405
|
||||
"Not Acceptable", // 406
|
||||
"Proxy Authentication Required", // 407
|
||||
"Request Timeout", // 408
|
||||
"Conflict", // 409
|
||||
"Gone", // 410
|
||||
"Length Required", // 411
|
||||
"Precondition Failed", // 412
|
||||
"Content Too Large", // 413
|
||||
"URI Too Long", // 414
|
||||
"Unsupported Media Type", // 415
|
||||
"Range Not Satisfiable", // 416
|
||||
"Expectation Failed", // 417
|
||||
"I'm a teapot", // 418
|
||||
NULL, // 419
|
||||
NULL, // 420
|
||||
"Misdirected Request", // 421
|
||||
"Unprocessable Content", // 422
|
||||
"Locked", // 423
|
||||
"Failed Dependency", // 424
|
||||
"Too Early", // 425
|
||||
"Upgrade Required", // 426
|
||||
NULL, // 427
|
||||
"Precondition Required", // 428
|
||||
"Too Many Requests", // 429
|
||||
NULL, // 430
|
||||
"Request Header Fields Too Large", // 431
|
||||
},
|
||||
// 5xx
|
||||
{
|
||||
"Internal Server Error", // 500
|
||||
"Not Implemented", // 501
|
||||
"Bad Gateway", // 502
|
||||
"Service Unavailable", // 503
|
||||
"Gateway Timeout", // 504
|
||||
"HTTP Version Not Supported", // 505
|
||||
"Variant Also Negotiates", // 506
|
||||
"Insufficient Storage", // 507
|
||||
"Loop Detected", // 508
|
||||
NULL, // 509
|
||||
"Not Extended", // 510
|
||||
"Network Authentication Required" // 511
|
||||
},
|
||||
};
|
||||
|
||||
// clang-format on
|
||||
|
|
@ -39,7 +39,7 @@ bool http_loop_handle_request(event_loop_conn *conn) {
|
|||
// It's fun to respond with extremely specific error messages
|
||||
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/501
|
||||
else if (res == http_parse_error_unknown_method) {
|
||||
http_write_standard_response(conn, 501);
|
||||
http_loop_write_standard_response(conn, 501);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -74,19 +74,18 @@ http_parse_error http_loop_parse_request(event_loop_conn *conn) {
|
|||
void http_loop_process_request(event_loop_conn *conn) {
|
||||
http_loop_ctx *ctx = conn->ctx;
|
||||
|
||||
// The end of the list of steps is marked with a NULL. When this is reached,
|
||||
// we simply set the route to NULL, letting the http loop know a new request
|
||||
// can be handled.
|
||||
// We keep processing step functions as long as they don't need to wait for
|
||||
// I/O
|
||||
while ((ctx->route->steps[ctx->current_step] != NULL) &&
|
||||
ctx->route->steps[ctx->current_step](conn)) {
|
||||
ctx->current_step++;
|
||||
}
|
||||
|
||||
// If we've reached the end of the list of step functions, we report the
|
||||
// request as finished by clearing its route
|
||||
if (ctx->route->steps[ctx->current_step] == NULL) {
|
||||
ctx->route = NULL;
|
||||
ctx->current_step = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
// We execute the next step
|
||||
// NOTE can/should we execute more than one step at once here?
|
||||
if (ctx->route->steps[ctx->current_step](conn)) {
|
||||
ctx->current_step++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -114,7 +113,7 @@ bool http_loop_route_request(event_loop_conn *conn) {
|
|||
}
|
||||
|
||||
// Fallthrough is to write a 404
|
||||
http_write_standard_response(conn, http_not_found);
|
||||
http_loop_write_standard_response(conn, http_not_found);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
#include "http.h"
|
||||
#include "http_loop.h"
|
||||
#include "string.h"
|
||||
|
||||
void http_write_standard_response(event_loop_conn *conn,
|
||||
http_response_type type) {
|
||||
void http_loop_write_standard_response(event_loop_conn *conn,
|
||||
http_response_type type) {
|
||||
const char *s;
|
||||
size_t len;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue