adds a bunch of todos and completes init functions
This commit is contained in:
parent
18579c7981
commit
e1f9046db0
@ -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
|
||||
|
83
src/http.c
83
src/http.c
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
10
src/main.c
10
src/main.c
@ -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 ?
|
||||
*/
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user