aboutsummaryrefslogtreecommitdiff
path: root/launch-web.c
diff options
context:
space:
mode:
authoriceyrazor <iceyrazor@mailfence.com>2026-09-25 21:12:03 -0500
committericeyrazor <iceyrazor@mailfence.com>2026-09-25 21:12:03 -0500
commit7e287a8ca7164e871965339196511fdcf0248921 (patch)
treed69ba74fd8ec0981c681d89aadbcda8aeb75e5d5 /launch-web.c
init
Diffstat (limited to 'launch-web.c')
-rwxr-xr-xlaunch-web.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/launch-web.c b/launch-web.c
new file mode 100755
index 0000000..e53eb56
--- /dev/null
+++ b/launch-web.c
@@ -0,0 +1,101 @@
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#include <pthread.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <Server.c>
+#include <iceys-utils.h>
+
+void server_close(struct Server *server){
+ server->running=false;
+
+ sleep(1);
+
+ int shuterr=shutdown(server->socket,SHUT_RDWR);
+ int closeerr=close(server->socket);
+
+ printf("\nshutdown with %d : %d\n",shuterr,closeerr);
+ //free(server);
+}
+
+void *server_loop(void *threadarg){
+ struct Server *server;
+ server=(struct Server *) threadarg;
+
+ char buffer[30000]={0};
+ int addrlen= sizeof(server->address);
+
+ int new_socket;
+ char *meta_type="\r\ncontent-type: text/html\r\n\r\n";
+
+ printf("running on port: %d",server->port);
+
+ while (server->running){
+ char metadata[100]="";
+
+ printf("\n=== WAITING FOR CONNECTION ===\n\n");
+ new_socket = accept(server->socket, (struct sockaddr *)&server->address, (socklen_t *)&addrlen);
+
+ if(new_socket<0){ break; }
+
+ if(read(new_socket,buffer,29999)<0){ printf("\nREAD FAILED\n\n"); close(new_socket); break; }
+ buffer[29999]='\0';
+
+ printf("%s\n",buffer);
+
+ char response[30000] = {0};
+
+
+ char file_req_buf[1000]={0};
+ strcpy(file_req_buf,server->html_folder);
+ char file_req[1000]={0};
+ str_before_nth(buffer+5, file_req, ' ', 0);
+ strcat(file_req_buf,file_req);
+
+
+ printf("file req: %s====\n",file_req_buf);
+
+
+ if(strncmp(file_req, "", 1) == 0){
+ strcat(file_req_buf,"index.html");
+ }
+
+ char file_req_buf2[1000]={0};
+ strcpy(file_req_buf2,str_remove_all(file_req_buf,".."));
+ printf("file ret: %s====\n",file_req_buf);
+
+
+ if (access(file_req_buf, F_OK) == 0) {
+ char *status="HTTP/1.0 200 OK";
+ memcpy(metadata,status,strlen(status));
+ memcpy(metadata+strlen(metadata),meta_type,strlen(meta_type));
+ memcpy(response, metadata, strlen(metadata));
+ FILE* file=fopen(file_req_buf, "r");
+ fread(response + strlen(metadata), 30000 - strlen(metadata) - 1, 1, file);
+ fclose(file);
+ } else {
+ char *status="HTTP/1.0 404 Not Found";
+ memcpy(metadata,status,strlen(status));
+ memcpy(metadata+strlen(metadata),meta_type,strlen(meta_type));
+ memcpy(response, metadata, strlen(metadata));
+ char* error = "error 404 file not found";
+ memcpy(response + strlen(metadata), error, strlen(error));
+ }
+
+ printf("\n\n==response==\n%s\n",response);
+
+ write(new_socket, response, strlen(response));
+ close(new_socket);
+ }
+
+ pthread_exit(NULL);
+}
+
+pthread_t launch(struct Server *server){
+ //HTTP/1.0 200 OK
+
+ pthread_t id;
+ int thread_err=pthread_create(&id, NULL, server_loop, (void *) server);
+ return id;
+}