adds a bunch of todos and completes init functions

This commit is contained in:
SuperNovaa41 2025-01-30 15:10:06 -05:00
parent 18579c7981
commit e1f9046db0
5 changed files with 92 additions and 20 deletions

View File

@ -10,7 +10,7 @@ $(TARGET): $(OBJ)
main.o: include/tcp.h
tcp.o: include/tcp.h include/http.h
http.o: include/http.h
http.o: include/http.h include/file.h
file.o: include/file.h
.PHONY: clean

View File

@ -3,22 +3,7 @@
#include <stdio.h>
#include "include/http.h"
// what we want to do here is start parsing the http message
// GET / HTTP/1.1
// Host: localhost:8080
// User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:134.0) Gecko/20100101 Firefox/134.0
// Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
// Accept-Language: en-US,en;q=0.5
// Accept-Encoding: gzip, deflate, br, zstd
// Connection: keep-alive
// Upgrade-Insecure-Requests: 1
// Sec-Fetch-Dest: document
// Sec-Fetch-Mode: navigate
// Sec-Fetch-Site: none
// Sec-Fetch-User: ?1
// Priority: u=0, i
#include "include/file.h"
http_method_t str_to_http_method(char* input)
{
@ -132,11 +117,70 @@ const char* http_status_code_to_str(http_status_code_t code)
}
}
void init_general_headers(struct general_headers* headers)
{
headers->cache_control = "";
headers->connection = "";
headers->date = "";
headers->pragma = "";
headers->trailer = "";
headers->transfer_encoding = "";
headers->upgrade = "";
headers->via = "";
headers->warning = "";
}
void init_http_request(http_request* request)
{
init_general_headers(&(request->general_headers));
request->request_headers.accept = "";
request->request_headers.accept_charset = "";
request->request_headers.accept_encoding = "";
request->request_headers.accept_language = "";
request->request_headers.authorization = "";
request->request_headers.expect = "";
request->request_headers.from = "";
request->request_headers.host = "";
request->request_headers.if_match = "";
request->request_headers.if_modified_since = "";
request->request_headers.if_none_match = "";
request->request_headers.if_range = "";
request->request_headers.if_unmodified_since = "";
request->request_headers.max_forwards = "";
request->request_headers.proxy_authorization = "";
request->request_headers.range = "";
request->request_headers.referer = "";
request->request_headers.te = "";
request->request_headers.user_agent = "";
}
void init_http_response(http_response* response)
{
init_general_headers(&(response->general_headers));
response->response_headers.accept_ranges = "";
response->response_headers.age = 0;
response->response_headers.etag = "";
response->response_headers.location = "";
response->response_headers.proxy_authenticate = "";
response->response_headers.retry_after = "";
response->response_headers.server = "";
response->response_headers.vary = "";
response->response_headers.www_authenticate = "";
}
void free_http_request(http_request* request)
{
free(request->request_line.request_uri);
}
void free_http_response(http_response* response)
{
free(response->message_body);
}
void parse_request_line(char** line, http_request_line* request)
{
char *tok, *ver, *num;
@ -228,3 +272,10 @@ void parse_http_request(char** buffer, http_request* request)
}
*/
}
void create_http_response(http_request* request, http_response* response)
{
get_file_from_uri(&(request->request_line.request_uri), &(response->message_body));
response->message_len = strlen(response->message_body);
}

View File

@ -56,8 +56,8 @@ typedef struct {
typedef struct {
http_status_line status;
struct general_headers general;
struct response_headers response;
struct general_headers general_headers;
struct response_headers response_headers;
size_t message_len;
char* message_body;
} http_response;
@ -70,6 +70,15 @@ 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

View File

@ -16,6 +16,16 @@
* but eventually i would like to start implementing headers
*
* file config for port, file location, etc
*
* send INTERNAL SERVER ERROR for failures instead of exiting the thread
*
* send 404 for if the file couldnt be found (use errno for this)
*
* setup the http_request parser to fill the request struct
*
* set the init_response to fill the required default headers (e.g. date)
*
* TODO: see where content-length is supposed to be ?
*/

View File

@ -92,6 +92,7 @@ void* connection_handler(void* arg)
{
int client_socket = *(int*) arg;
http_request request;
http_response response;
//http_request_line request;
char* buffer = NULL;
int err;
@ -119,7 +120,8 @@ void* connection_handler(void* arg)
// create payload
// get the file
create_http_response(&request, &response);
free_http_request(&request);
// send payload