diff --git a/src/headers.c b/src/headers.c deleted file mode 100644 index 3148e7c..0000000 --- a/src/headers.c +++ /dev/null @@ -1,3 +0,0 @@ -#include "include/headers.h" - - diff --git a/src/http.c b/src/http.c index 4370595..bf1006d 100644 --- a/src/http.c +++ b/src/http.c @@ -44,7 +44,95 @@ const char* http_method_to_str(http_method_t input) } } -void parse_request_line(char** line, http_request* request) +const char* http_status_code_to_str(http_status_code_t code) +{ + switch(code) { + case HTTP100: + return "Continue"; + case HTTP101: + return "Switching Protocols"; + case HTTP200: + return "OK"; + case HTTP201: + return "Created"; + case HTTP202: + return "Accepted"; + case HTTP203: + return "Non-Authoritative Information"; + case HTTP204: + return "No Content"; + case HTTP205: + return "Reset Content"; + case HTTP206: + return "Partial Content"; + case HTTP300: + return "Multiple Choices"; + case HTTP301: + return "Moved Permanently"; + case HTTP302: + return "Found"; + case HTTP303: + return "See Other"; + case HTTP304: + return "Not Modified"; + case HTTP305: + return "Use Proxy"; + case HTTP307: + return "Temporary Redirect"; + case HTTP400: + return "Bad Request"; + case HTTP401: + return "Unauthorized"; + case HTTP402: + return "Payment Required"; + case HTTP403: + return "Forbidden"; + case HTTP404: + return "Not Found"; + case HTTP405: + return "Method Not Allowed"; + case HTTP406: + return "Not Acceptable"; + case HTTP407: + return "Proxy Authentication Required"; + case HTTP408: + return "Request Time-out"; + case HTTP409: + return "Conflict"; + case HTTP410: + return "Gone"; + case HTTP411: + return "Length Required"; + case HTTP412: + return "Precondition Failed"; + case HTTP413: + return "Request Entity Too Large"; + case HTTP414: + return "Request-URI Too Large"; + case HTTP415: + return "Unsupported Media Type"; + case HTTP416: + return "Requested range not satisfiable"; + case HTTP417: + return "Expectation Failed"; + case HTTP500: + return "Internal Server Error"; + case HTTP501: + return "Not Implemented"; + case HTTP502: + return "Bad Gateway"; + case HTTP503: + return "Service Unavailable"; + case HTTP504: + return "Gateway Time-out"; + case HTTP505: + return "HTTP Version not supported"; + default: + return "UNKNOWN"; + } +} + +void parse_request_line(char** line, http_request_line* request) { char *tok, *ver, *num; @@ -97,7 +185,7 @@ void parse_request_line(char** line, http_request* request) request->version.minor = atoi(num); } -void parse_http_request(char** buffer, http_request* request) +void parse_http_request(char** buffer, http_request_line* request) { // going to be using strtok here to split up the request diff --git a/src/include/http.h b/src/include/http.h index 01ce7d0..063ecda 100644 --- a/src/include/http.h +++ b/src/include/http.h @@ -1,3 +1,5 @@ +#include "headers.h" + #ifndef HTTP_H #define HTTP_H @@ -7,6 +9,28 @@ typedef enum { 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; @@ -16,15 +40,34 @@ 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 { + struct http_request_line; + struct general_headers; + struct requests_headers; } http_request; +typedef struct { + http_status_line status; + struct general_headers general; + struct response_headers response; +} http_response; + http_method_t str_to_http_method(char* input); const char* http_method_to_str(http_method_t input); -void parse_request_line(char** line, http_request* request); +const char* http_status_code_to_str(http_status_code_t code); -void parse_http_request(char** buffer, http_request* request); +void parse_request_line(char** line, http_request_line* request); + +void parse_http_request(char** buffer, http_request_line* request); #endif