added status codes

This commit is contained in:
SuperNovaa41 2025-01-30 13:50:42 -05:00
parent 986290f6de
commit 97d970c0cd
3 changed files with 135 additions and 7 deletions

View File

@ -1,3 +0,0 @@
#include "include/headers.h"

View File

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

View File

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