feat: added http response type names

This commit is contained in:
Jef Roosens 2023-05-28 10:23:32 +02:00
parent a90330dd6e
commit 590f0e5186
Signed by: Jef Roosens
GPG key ID: B75D4F293C7052DB
6 changed files with 168 additions and 21 deletions

88
src/http/http_res_names.c Normal file
View 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

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;