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
|
main.o: include/tcp.h
|
||||||
tcp.o: include/tcp.h include/http.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
|
file.o: include/file.h
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
|
83
src/http.c
83
src/http.c
@ -3,22 +3,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "include/http.h"
|
#include "include/http.h"
|
||||||
|
#include "include/file.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
|
|
||||||
|
|
||||||
http_method_t str_to_http_method(char* input)
|
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)
|
void free_http_request(http_request* request)
|
||||||
{
|
{
|
||||||
free(request->request_line.request_uri);
|
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)
|
void parse_request_line(char** line, http_request_line* request)
|
||||||
{
|
{
|
||||||
char *tok, *ver, *num;
|
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 {
|
typedef struct {
|
||||||
http_status_line status;
|
http_status_line status;
|
||||||
struct general_headers general;
|
struct general_headers general_headers;
|
||||||
struct response_headers response;
|
struct response_headers response_headers;
|
||||||
size_t message_len;
|
size_t message_len;
|
||||||
char* message_body;
|
char* message_body;
|
||||||
} http_response;
|
} 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 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 parse_http_request(char** buffer, http_request* request);
|
||||||
|
|
||||||
|
void create_http_response(http_request* request, http_response* response);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
10
src/main.c
10
src/main.c
@ -16,6 +16,16 @@
|
|||||||
* but eventually i would like to start implementing headers
|
* but eventually i would like to start implementing headers
|
||||||
*
|
*
|
||||||
* file config for port, file location, etc
|
* 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;
|
int client_socket = *(int*) arg;
|
||||||
http_request request;
|
http_request request;
|
||||||
|
http_response response;
|
||||||
//http_request_line request;
|
//http_request_line request;
|
||||||
char* buffer = NULL;
|
char* buffer = NULL;
|
||||||
int err;
|
int err;
|
||||||
@ -119,7 +120,8 @@ void* connection_handler(void* arg)
|
|||||||
|
|
||||||
// create payload
|
// create payload
|
||||||
|
|
||||||
// get the file
|
create_http_response(&request, &response);
|
||||||
|
free_http_request(&request);
|
||||||
|
|
||||||
|
|
||||||
// send payload
|
// send payload
|
||||||
|
Loading…
x
Reference in New Issue
Block a user