#include "headers.h" #ifndef HTTP_H #define HTTP_H typedef enum { GET, HEAD, UNKNOWN, } http_method_t; typedef enum { HTTP100 = 100, HTTP101, HTTP200 = 200, HTTP201, HTTP202, HTTP203, HTTP204, HTTP205, HTTP206, HTTP300 = 300, HTTP301, HTTP302, HTTP303, HTTP304, HTTP305, HTTP307 = 307, HTTP400 = 400, HTTP401, HTTP402, HTTP403, HTTP404, HTTP405, HTTP406, HTTP407, HTTP408, HTTP409, HTTP410, HTTP411, HTTP412, HTTP413, HTTP414, HTTP415, HTTP416, HTTP417, HTTP500 = 500, HTTP501, HTTP502, HTTP503, HTTP504, HTTP505 } http_status_code_t; struct http_version { int major; int minor; }; typedef struct { http_method_t method; char* request_uri; struct http_version version; } http_request_line; typedef struct { struct http_version version; http_status_code_t status_code; const char* reason_phrase; } http_status_line; typedef struct { http_request_line request_line; struct general_headers general_headers; struct request_headers request_headers; } http_request; typedef struct { http_status_line status; struct general_headers general_headers; struct response_headers response_headers; char* message_body; } http_response; http_method_t str_to_http_method(char* input); const char* http_method_to_str(http_method_t input); const char* http_status_code_to_str(http_status_code_t code); void parse_request_line(char** line, http_request_line* request); void init_general_headers(struct general_headers* headers); void init_http_request(http_request* request); void init_http_response(http_response* response); void free_http_request(http_request* request); void free_http_response(http_response* response); void parse_http_request(char** buffer, http_request* request); void create_http_response(http_request* request, http_response* response); #endif