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 (*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); | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,3 +1,6 @@ | |||
| #ifndef LNM_LOOP_INTERNAL | ||||
| #define LNM_LOOP_INTERNAL | ||||
| 
 | ||||
| #include "lnm/loop.h" | ||||
| 
 | ||||
| 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); | ||||
| 
 | ||||
| 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 (*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)); | ||||
| 
 | ||||
|   if (l == NULL) { | ||||
|  | @ -18,6 +20,8 @@ lnm_err lnm_loop_init(lnm_loop **out, void *gctx, | |||
|   l->gctx = gctx; | ||||
|   l->ctx_init = ctx_init; | ||||
|   l->ctx_free = ctx_free; | ||||
|   l->data_read = data_read; | ||||
|   l->data_write = data_write; | ||||
| 
 | ||||
|   *out = l; | ||||
| 
 | ||||
|  | @ -121,7 +125,7 @@ lnm_err lnm_loop_run(lnm_loop *l) { | |||
|     // Add all open connections to the poll command
 | ||||
|     for (size_t i = 0; i < l->conns.len && poll_args_len < l->conns.open + 1; | ||||
|          i++) { | ||||
|       lnm_loop_conn *conn = l->conns.arr[i]; | ||||
|       const lnm_loop_conn *conn = l->conns.arr[i]; | ||||
| 
 | ||||
|       if (conn == NULL) { | ||||
|         continue; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue