diff options
Diffstat (limited to 'launch-web.c')
| -rwxr-xr-x | launch-web.c | 101 |
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; +} |
