From 50c7ef81207ab81e5586ef3d2f57e2cfc0d40de3 Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Wed, 24 May 2023 15:51:21 +0200 Subject: [PATCH] first http server working --- file.c | 5 ++++- http.c | 23 +++++++++++++++++------ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/file.c b/file.c index 4a866b6..47f91a7 100644 --- a/file.c +++ b/file.c @@ -13,23 +13,26 @@ int readfile (char **buffer, char *filename) /* open file */ + VERBOSE (DEBUG, PRINT ("Opening file %s\n", filename)); FILE *fd = fopen (filename, "rb"); if (fd == NULL) { VERBOSE (WARNING, PRINT ("Can't open file (%s)\n", filename)); return -1; } + VERBOSE (DEBUG, PRINT ("Seek file size\n")); fseek (fd, 0, SEEK_END); int size = ftell (fd); fseek (fd, 0, SEEK_SET); /* same as rewind(f); */ /* read full file */ + VERBOSE (DEBUG, PRINT ("Reading %d bytes\n", size)); *buffer = calloc (size + 1, 1); fread (*buffer, size, 1, fd); fclose (fd); - *buffer[size] = 0; + (*buffer)[size] = 0; return size; } diff --git a/http.c b/http.c index 4c37459..403dd1f 100644 --- a/http.c +++ b/http.c @@ -107,8 +107,14 @@ char *find_sequence (char *data, int len, char *seq, char **pdata) int add_line (char **buffer, char *str) { - int len = strlen (*buffer) + strlen (str) + 1; - *buffer = realloc (*buffer, len); + VERBOSE (DEBUG, PRINT ("add line: %s", str)); + int len = ((*buffer) ? strlen (*buffer) : 0) + strlen (str) + 1; + VERBOSE (DEBUG, PRINT ("len: %d\n", len)); + if (*buffer) { + *buffer = (char *)realloc (*buffer, len); + } else { + *buffer = (char *)calloc (len, 1); + } strcat (*buffer, str); return len; } @@ -220,10 +226,15 @@ int error_404 (char **buffer, char *uri) int response_html (char **buffer, char *location, char *response) { - add_status_line (buffer, c200); - add_general_header (buffer); - add_response_header (buffer, location); - + int len = 0; + VERBOSE (DEBUG, PRINT ("add_status_line %d\n", len)); + len = add_status_line (buffer, c200); + VERBOSE (DEBUG, PRINT ("add_general_header %d\n", len)); + len = add_general_header (buffer); + VERBOSE (DEBUG, PRINT ("add_response_header %d\n", len)); + len = add_response_header (buffer, location); + + VERBOSE (DEBUG, PRINT ("add_entity %d\n", len)); return add_entity (buffer, response, strlen (response), "text/html", "iso-8859-1"); } -- 2.30.2