chore(lnm): copied over http constants
ci/woodpecker/push/build Pipeline was successful
Details
ci/woodpecker/push/build Pipeline was successful
Details
parent
f79ba2818c
commit
c7b3f68c2e
|
@ -0,0 +1,97 @@
|
||||||
|
#ifndef LNM_HTTP_CONSTS
|
||||||
|
#define LNM_HTTP_CONSTS
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
extern const char *lnm_http_method_names[];
|
||||||
|
extern const size_t lnm_http_method_names_len;
|
||||||
|
|
||||||
|
typedef enum lnm_http_method {
|
||||||
|
http_method_get = 0,
|
||||||
|
http_method_post,
|
||||||
|
http_method_put,
|
||||||
|
http_method_patch,
|
||||||
|
http_method_delete
|
||||||
|
} http_method;
|
||||||
|
|
||||||
|
extern const char *lnm_http_status_names[][32];
|
||||||
|
|
||||||
|
typedef enum lnm_http_status {
|
||||||
|
// 1xx
|
||||||
|
lnm_http_status_continue = 100,
|
||||||
|
lnm_http_status_switching_protocols = 101,
|
||||||
|
lnm_http_status_processing = 102,
|
||||||
|
lnm_http_status_early_hints = 103,
|
||||||
|
// 2xx
|
||||||
|
lnm_http_status_ok = 200,
|
||||||
|
lnm_http_status_created = 201,
|
||||||
|
lnm_http_status_accepted = 202,
|
||||||
|
lnm_http_status_non_authoritative_information = 203,
|
||||||
|
lnm_http_status_no_content = 204,
|
||||||
|
lnm_http_status_reset_content = 205,
|
||||||
|
lnm_http_status_partial_content = 206,
|
||||||
|
lnm_http_status_multi_status = 207,
|
||||||
|
lnm_http_status_already_reported = 208,
|
||||||
|
// 3xx
|
||||||
|
lnm_http_status_multiple_choices = 300,
|
||||||
|
lnm_http_status_moved_permanently = 301,
|
||||||
|
lnm_http_status_found = 302,
|
||||||
|
lnm_http_status_see_other = 303,
|
||||||
|
lnm_http_status_not_modified = 304,
|
||||||
|
lnm_http_status_temporary_redirect = 307,
|
||||||
|
lnm_http_status_permanent_redirect = 308,
|
||||||
|
// 4xx
|
||||||
|
lnm_http_status_bad_request = 400,
|
||||||
|
lnm_http_status_unauthorized = 401,
|
||||||
|
lnm_http_status_payment_required = 402,
|
||||||
|
lnm_http_status_forbidden = 403,
|
||||||
|
lnm_http_status_not_found = 404,
|
||||||
|
lnm_http_status_method_not_allowed = 405,
|
||||||
|
lnm_http_status_not_acceptable = 406,
|
||||||
|
lnm_http_status_proxy_authentication_required = 407,
|
||||||
|
lnm_http_status_request_timeout = 408,
|
||||||
|
lnm_http_status_conflict = 409,
|
||||||
|
lnm_http_status_gone = 410,
|
||||||
|
lnm_http_status_length_required = 411,
|
||||||
|
lnm_http_status_precondition_failed = 412,
|
||||||
|
lnm_http_status_content_too_large = 413,
|
||||||
|
lnm_http_status_uri_too_long = 414,
|
||||||
|
lnm_http_status_unsupported_media_type = 415,
|
||||||
|
lnm_http_status_range_not_satisfiable = 416,
|
||||||
|
lnm_http_status_expection_failed = 417,
|
||||||
|
lnm_http_status_im_a_teapot = 418,
|
||||||
|
lnm_http_status_misdirected_request = 421,
|
||||||
|
lnm_http_status_unprocessable_content = 422,
|
||||||
|
lnm_http_status_locked = 423,
|
||||||
|
lnm_http_status_failed_dependency = 424,
|
||||||
|
lnm_http_status_too_early = 425,
|
||||||
|
lnm_http_status_upgrade_required = 426,
|
||||||
|
lnm_http_status_precondition_required = 428,
|
||||||
|
lnm_http_status_too_many_requests = 429,
|
||||||
|
lnm_http_status_request_header_fields_too_large = 431,
|
||||||
|
// 5xx
|
||||||
|
lnm_http_status_internal_server_error = 500,
|
||||||
|
lnm_http_status_method_not_implemented = 501,
|
||||||
|
lnm_http_status_bad_gateway = 502,
|
||||||
|
lnm_http_status_service_unavailable = 503,
|
||||||
|
lnm_http_status_gateway_timeout = 504,
|
||||||
|
lnm_http_status_http_status_version_not_supported = 505,
|
||||||
|
lnm_http_status_variant_also_negotiates = 506,
|
||||||
|
lnm_http_status_insufficient_storage = 507,
|
||||||
|
lnm_http_status_loop_detected = 508,
|
||||||
|
lnm_http_status_not_extended = 510,
|
||||||
|
lnm_http_status_network_authentication_required = 511
|
||||||
|
} lnm_http_status;
|
||||||
|
|
||||||
|
extern const char *lnm_http_header_names[];
|
||||||
|
|
||||||
|
typedef enum lnm_http_header {
|
||||||
|
lnm_http_header_connection = 0,
|
||||||
|
lnm_http_header_location,
|
||||||
|
lnm_http_header_content_type,
|
||||||
|
lnm_http_header_content_disposition,
|
||||||
|
lnm_http_header_server,
|
||||||
|
lnm_http_header_content_length
|
||||||
|
} lnm_http_header;
|
||||||
|
|
||||||
|
#endif
|
|
@ -46,7 +46,9 @@ typedef struct {
|
||||||
|
|
||||||
lnm_err lnm_loop_init(lnm_loop **out, void *gctx,
|
lnm_err lnm_loop_init(lnm_loop **out, void *gctx,
|
||||||
lnm_err (*ctx_init)(void **out, void *gctx),
|
lnm_err (*ctx_init)(void **out, void *gctx),
|
||||||
void (*ctx_free)(void *ctx));
|
void (*ctx_free)(void *ctx),
|
||||||
|
void (*data_read)(lnm_loop_conn *conn),
|
||||||
|
void (*data_write)(lnm_loop_conn *conn));
|
||||||
|
|
||||||
lnm_err lnm_loop_setup(lnm_loop *l, uint16_t port);
|
lnm_err lnm_loop_setup(lnm_loop *l, uint16_t port);
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
#ifndef LNM_LOOP_INTERNAL
|
||||||
|
#define LNM_LOOP_INTERNAL
|
||||||
|
|
||||||
#include "lnm/loop.h"
|
#include "lnm/loop.h"
|
||||||
|
|
||||||
lnm_err lnm_loop_conn_init(lnm_loop_conn **out, lnm_loop *l);
|
lnm_err lnm_loop_conn_init(lnm_loop_conn **out, lnm_loop *l);
|
||||||
|
@ -7,3 +10,5 @@ void lnm_loop_conn_free(lnm_loop *l, lnm_loop_conn *conn);
|
||||||
lnm_err lnm_loop_accept(lnm_loop *l);
|
lnm_err lnm_loop_accept(lnm_loop *l);
|
||||||
|
|
||||||
void lnm_loop_conn_io(lnm_loop *l, lnm_loop_conn *conn);
|
void lnm_loop_conn_io(lnm_loop *l, lnm_loop_conn *conn);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,100 @@
|
||||||
|
#include "lnm/http/consts.h"
|
||||||
|
|
||||||
|
const char *lnm_http_method_names[] = {"GET", "POST", "PUT", "PATCH", "DELETE"};
|
||||||
|
const size_t lnm_http_method_names_len =
|
||||||
|
sizeof(lnm_http_method_names) / sizeof(lnm_http_method_names[0]);
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
|
||||||
|
const char *lnm_http_status_names[][32] = {
|
||||||
|
// 1xx
|
||||||
|
{
|
||||||
|
"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
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *lnm_http_header_names[] = {
|
||||||
|
"Connection",
|
||||||
|
"Location",
|
||||||
|
"Content-Type",
|
||||||
|
"Content-Disposition",
|
||||||
|
"Server",
|
||||||
|
"Content-Length"
|
||||||
|
};
|
|
@ -8,7 +8,9 @@
|
||||||
|
|
||||||
lnm_err lnm_loop_init(lnm_loop **out, void *gctx,
|
lnm_err lnm_loop_init(lnm_loop **out, void *gctx,
|
||||||
lnm_err (*ctx_init)(void **out, void *gctx),
|
lnm_err (*ctx_init)(void **out, void *gctx),
|
||||||
void (*ctx_free)(void *ctx)) {
|
void (*ctx_free)(void *ctx),
|
||||||
|
void (*data_read)(lnm_loop_conn *conn),
|
||||||
|
void (*data_write)(lnm_loop_conn *conn)) {
|
||||||
lnm_loop *l = calloc(1, sizeof(lnm_loop));
|
lnm_loop *l = calloc(1, sizeof(lnm_loop));
|
||||||
|
|
||||||
if (l == NULL) {
|
if (l == NULL) {
|
||||||
|
@ -18,6 +20,8 @@ lnm_err lnm_loop_init(lnm_loop **out, void *gctx,
|
||||||
l->gctx = gctx;
|
l->gctx = gctx;
|
||||||
l->ctx_init = ctx_init;
|
l->ctx_init = ctx_init;
|
||||||
l->ctx_free = ctx_free;
|
l->ctx_free = ctx_free;
|
||||||
|
l->data_read = data_read;
|
||||||
|
l->data_write = data_write;
|
||||||
|
|
||||||
*out = l;
|
*out = l;
|
||||||
|
|
||||||
|
@ -121,7 +125,7 @@ lnm_err lnm_loop_run(lnm_loop *l) {
|
||||||
// Add all open connections to the poll command
|
// Add all open connections to the poll command
|
||||||
for (size_t i = 0; i < l->conns.len && poll_args_len < l->conns.open + 1;
|
for (size_t i = 0; i < l->conns.len && poll_args_len < l->conns.open + 1;
|
||||||
i++) {
|
i++) {
|
||||||
lnm_loop_conn *conn = l->conns.arr[i];
|
const lnm_loop_conn *conn = l->conns.arr[i];
|
||||||
|
|
||||||
if (conn == NULL) {
|
if (conn == NULL) {
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in New Issue