diff --git a/server b/server index f64d85a..35a6a6b 100755 Binary files a/server and b/server differ diff --git a/src/server.c b/src/server.c index cd254c3..a4d17e2 100644 --- a/src/server.c +++ b/src/server.c @@ -10,8 +10,8 @@ #include "server.h" -int send_response(int fd, char *header, char *content_type, void *body, int content_length) { - const int max_response_size = 65536; +int send_response(int fd, const char *header, char *content_type, void *body, int content_length) { + const int max_response_size = MAX_RESPONSE_SIZE; char response[max_response_size]; time_t current = time(NULL); @@ -28,14 +28,7 @@ int send_response(int fd, char *header, char *content_type, void *body, int cont "\n", header, SERVER_VERSION, date_time, content_length, content_type); - printf("%s\n", (char *)body); - - //printf("%p\n", (char *)response); - //printf("%p\n", &header_length); - //printf("%p\n", (void *)(response + header_length)); - memcpy(response + header_length, body, content_length); - printf("%s\n", response); - + memcpy(response + header_length, body, content_length); int write_res = write(fd, response, header_length + content_length); if (write_res < 0) { @@ -48,10 +41,6 @@ int send_response(int fd, char *header, char *content_type, void *body, int cont int main() { char buffer[BUFFER_SIZE]; -// char resp[] = "HTTP/1.0 200 OK\r\n" -// "Server: webserver-c\r\n" -// "Content-type: text/html\r\n\r\n" -// "hello, world\r\n"; // create a socket int sockfd = socket(AF_INET, SOCK_STREAM, 0); @@ -59,7 +48,7 @@ int main() { perror("webserver (socket)"); return 1; } - printf("socket created successfully\n"); + printf("[Winnie-HTTP]: Socket created successfully\n"); // create the address to bind the socket to struct sockaddr_in host_addr; @@ -78,33 +67,33 @@ int main() { perror("webserver (bind)"); return 1; } - printf("socket successfully bound to address\n"); + printf("[Winnie-HTTP]: Socket successfully bound to address\n"); // listen to incoming connections if (listen(sockfd, SOMAXCONN) != 0) { perror("webserver (listen)"); return 1; } - printf("server listening for connections\n"); + printf("[Winnie-HTTP]: server listening for connections\n"); for (;;) { // accept incoming connections - int newsockfd = accept(sockfd, (struct sockaddr *) &host_addr, (socklen_t *) &host_addrlen); - if (newsockfd < 0) { + int client_sock_fd = accept(sockfd, (struct sockaddr *) &host_addr, (socklen_t *) &host_addrlen); + if (client_sock_fd < 0) { perror("webserver (accept)"); continue; } - printf("connection accepted\n"); + printf("[Winnie-HTTP]: connection accepted\n"); // get client address - int sockn = getsockname(newsockfd, (struct sockaddr *) &client_addr, (socklen_t *) &client_addrlen); + int sockn = getsockname(client_sock_fd, (struct sockaddr *) &client_addr, (socklen_t *) &client_addrlen); if(sockn < 0) { perror("webserver (getsockname)"); continue; } // read from the socket - int valread = read(newsockfd, buffer, BUFFER_SIZE); + int valread = read(client_sock_fd, buffer, BUFFER_SIZE); if (valread < 0) { perror("webserver (read)"); continue; @@ -114,56 +103,16 @@ int main() { char method[BUFFER_SIZE], uri[BUFFER_SIZE], version[BUFFER_SIZE]; sscanf(buffer, "%s %s %s", method, uri, version); printf("[%s:%u] %s %s %s\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), method, version, uri); - - // check if request is GET request + if (strncmp("GET", method, 7) != 0) { -// const char resp[] = "HTTP/1.0 400 Bad Request\r\n" -// "Server: webserver-c\r\n" -// "Content-Type: text/html\r\n\r\n"; - - char resp[100]; - int resp_size = snprintf(resp, 100, - "%s\r\n" - "Server: %s\r\n" - "Content-Type: %s\r\n" - "\r\n", - BAD_REQUEST_HEAD, SERVER_VERSION, "text/html"); - - int valwrite = write(newsockfd, resp, resp_size); - if (valwrite < 0) { - perror("webserver (write)"); - continue; - } + send_response(client_sock_fd, BAD_REQUEST_HEAD, "text/html", NULL, 0); } else { - // char resp[100]; - // int resp_size = snprintf(resp, 100, - // "%s\r\n" - // "Server: %s\r\n" - // "Content-Type: %s\r\n" - // "\r\n", - // OK_HEAD, SERVER_VERSION, "text/html"); - // - // int valwrite = write(newsockfd, resp, resp_size); - // printf("%s\n", OK_HEAD); - // if (valwrite < 0) { - // perror("webserver (write)"); - // continue; - // } - char body[100]; int body_size = snprintf(body, 100, "%s\r\n", "hello what up bruh"); - printf("%d\n", body_size); - send_response(newsockfd, "HTTP/1.1 200 OK", "text/html", body, (body_size+1)); + send_response(client_sock_fd, OK_HEAD, "text/html", body, (body_size + 1)); } - // write to the socket - // int valwrite = write(newsockfd, resp, strlen(resp)); - // if (valwrite < 0) { - // perror("webserver (write)"); - // continue; - // } - - close(newsockfd); + close(client_sock_fd); } return 0; diff --git a/src/server.h b/src/server.h index 7e9951b..5ef675f 100644 --- a/src/server.h +++ b/src/server.h @@ -1,5 +1,6 @@ #define PORT 8080 #define BUFFER_SIZE 1024 +#define MAX_RESPONSE_SIZE 65536 static const char SERVER_VERSION[] = "winnie-http-server";