From d3ca8d920a2f9eb7dc1194a3bd230b5ed4507ec8 Mon Sep 17 00:00:00 2001 From: PreacherDHM Date: Mon, 6 Oct 2025 10:58:33 -0700 Subject: [PATCH] working on the web side of things --- DesignedWorlds | Bin 13424 -> 13896 bytes index.html | 0 source/http.c | 47 +++++++++++++++++++++++++++++++++---- source/http.h | 9 ++++--- source/main.c | 62 +++++++++++++++++++++++++++++++++---------------- web/index.html | 34 +++++++++++++++++++++++++++ 6 files changed, 125 insertions(+), 27 deletions(-) create mode 100644 index.html create mode 100644 web/index.html diff --git a/DesignedWorlds b/DesignedWorlds index 1b9c180f497fd67d2bfd0b7b3a05595b14a0e97a..4cfa879a7abdaec2155a7afcdfed6e30749f055d 100755 GIT binary patch delta 4476 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 = (char*) malloc(strlen("HTTP/1.1") + 1); @@ -76,15 +76,15 @@ HttpResponseHeader* createHttpResponse(int statusCode,const char* contextType, break; } - HttpResponseHeaderToS(response, data, buffer, bs); + HttpResponseHeaderToS(response, data, buffer, bufferSize); return response; } -void HttpResponseHeaderToS(HttpResponseHeader* rh,char* d, char* buffer, int bs) { +void HttpResponseHeaderToS(HttpResponseHeader* rh,char* d, char* buffer, int bufferSize) { - snprintf(buffer, 512, + snprintf(buffer, bufferSize, "%s %u %s\r\n" "Content-Type: %s\r\n" "Content-Length: %d\r\n" @@ -94,6 +94,45 @@ void HttpResponseHeaderToS(HttpResponseHeader* rh,char* d, char* buffer, int bs) } +void HttpRequestHeaderFromS(HttpRequestHeader* rh, char* buffer) { + + int methodLen = 0; + char methodStr[8] = ""; + if (strstr(buffer, "GET") != NULL) { + rh->method = HTTP_GET; + } else if (strstr(buffer, "POST") != NULL) { + rh->method = HTTP_POST; + } else if (strstr(buffer, "PUT") != NULL) { + rh->method = HTTP_PUT; + } else if (strstr(buffer, "DELETE") != NULL) { + rh->method = HTTP_DELETE; + } else if (strstr(buffer, "HEAD") != NULL) { + rh->method = HTTP_HEAD; + } else if (strstr(buffer, "OPTIONS") != NULL) { + rh->method = HTTP_OPTIONS; + } else if (strstr(buffer, "PATCH") != NULL) { + rh->method = HTTP_PATCH; + } else if (strstr(buffer, "CONNECT") != NULL) { + rh->method = HTTP_CONNECT; + } else if (strstr(buffer, "CONNECT") != NULL) { + rh->method = HTTP_CONNECT; + } else { + rh->method = HTTP_UNKNOWN; + } + + int bufferLen, wordIndex; + + // Find the bufferLen of the string + bufferLen = strlen(buffer); + int start, end = 0; + + + + // GET /path/to/file/ HTTP:1.1 +} + + + // Function to free the memory allocated for an HTTP request header void freeHttpRequest(HttpRequestHeader* request) { if (request == NULL) return; diff --git a/source/http.h b/source/http.h index 47ccacd..7af9e56 100644 --- a/source/http.h +++ b/source/http.h @@ -8,7 +8,7 @@ #ifndef HTTP_H #define HTTP_H - +#define HTTP_UNKNOWN 0 #define HTTP_GET 1 #define HTTP_POST 2 #define HTTP_PUT 3 @@ -17,7 +17,6 @@ #define HTTP_OPTIONS 6 #define HTTP_PATCH 7 #define HTTP_CONNECT 8 -#define HTTP_TRACE 9 #ifndef HTTP_CONTENT_TYPES_H @@ -70,7 +69,11 @@ HttpResponseHeader* createHttpResponse(int statusCode,const char* contentType, void HttpResponseHeaderToS(HttpResponseHeader* rh, char* d, char* buffer, int bs); -void HttpRequestHeaderToS(HttpRequestHeader* rh, char* buffer); +void HttpRequestHeaderFromS(HttpRequestHeader* rh, char* buffer); + +int HttpCreate(); +int HttpGetReqest(char* buffer); +int HttpSendResponse(int statusCode, const char* type, char* data); // Freeing Objects void freeHttpRequest(HttpRequestHeader* request); diff --git a/source/main.c b/source/main.c index 63b0187..670e2f0 100644 --- a/source/main.c +++ b/source/main.c @@ -17,6 +17,46 @@ #include +void handleClient(int sock) { + while (1) { + int client_sock = accept(sock, NULL, NULL); + if (client_sock < 0) { + perror("accept"); + continue; + } + + FILE* file = fopen("./web/index.html", "r"); + if (file == NULL) { + perror("that file dose not exists"); + return; + } + + char* fileBuffer; + + fseek(file, 0, SEEK_END); + int size = ftell(file); + rewind(file); + printf("file size: %d\n", size); + + fileBuffer = (char*)malloc(size + 512); + printf("Sent '%s\n' to the client.\n", fileBuffer); + + int bytesRead = fread(fileBuffer, sizeof(char), size, file); + + char* response = (char*)malloc(512 + size); // Assuming a maximum length of 512 bytes + + HttpResponseHeader* header = createHttpResponse(200, "text/html", fileBuffer, response, 512 + size); + + fclose(file); + + printf("%s\n", response); + + + send(client_sock, response, strlen(response)+1, 0); + free(fileBuffer); + } +} + int main() { int sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { @@ -37,28 +77,10 @@ int main() { listen(sock, 3); printf("Server started. Listening on port 9090.\n"); - while (1) { - int client_sock = accept(sock, NULL, NULL); - if (client_sock < 0) { - perror("accept"); - continue; - } - char* response = (char*)malloc(512); // Assuming a maximum length of 512 bytes - - HttpResponseHeader* header = createHttpResponse(200, HTTP_CONTENT_TYPE_HTML, - "

This is a test to see what happends

", response, 512); - - - printf("%s\n", response); - - - printf("Sent 'Hello, World!' to the client.\n"); - - send(client_sock, response, strlen(response)+1, 0); - - } + handleClient(sock); return 0; } + diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..8bb9404 --- /dev/null +++ b/web/index.html @@ -0,0 +1,34 @@ + + + + My Simple Website + + + +

Welcome to my website!

+ + + + + +

This is some sample text.

+ +