/* ############################################################################# * # DesingedWorlds * * * AUTHER: PreacherDHM * DATE: MM/DD/YY * ############################################################################# */ #include "http.h" #include #include #include #include #include #include #include void handleClient(int sock) { while (1) { int client_sock = accept(sock, NULL, NULL); if (client_sock < 0) { perror("accept"); continue; } sleep(1); HttpRequestHeader rh; char packetBuilder[HTTP_RECIVE_PACKET_SIZE + 1] = ""; int sizeOfBuffer = HTTP_RECIVE_PACKET_SIZE; char* packetBuffer = malloc(HTTP_RECIVE_PACKET_SIZE); int sizeOfPacket = 0;//= read(client_sock, packetBuilder, HTTP_RECIVE_PACKET_SIZE - 1); while ((sizeOfPacket = recv(client_sock, packetBuilder, HTTP_RECIVE_PACKET_SIZE, 0)) > 0) { printf("size of packet: %d\n", sizeOfPacket); if(sizeOfPacket > HTTP_RECIVE_PACKET_SIZE) { char* tmp = packetBuffer; int tmpSize = sizeOfBuffer; sizeOfBuffer += sizeOfPacket; packetBuffer = malloc(sizeOfPacket); memcpy(packetBuilder, tmp, tmpSize); free(tmp); memcpy(&packetBuffer[tmpSize], packetBuilder, sizeOfPacket); if(sizeOfPacket < HTTP_RECIVE_PACKET_SIZE) { break; } continue; } memcpy(packetBuffer, packetBuilder, sizeOfPacket); if(sizeOfPacket < HTTP_RECIVE_PACKET_SIZE) { break; } } if(sizeOfPacket < 0) { exit(-1); } printf("size of packet: %d\n", sizeOfPacket); HttpRequestHeaderFromS(&rh, packetBuffer, sizeOfPacket); free(packetBuffer); 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() { char tmp[] = "testing this is a test"; HttpRequestHeaderFromS(NULL,tmp, 23); int sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror("socket"); return -1; } int opts = 1; setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &opts, sizeof(opts)); struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(HTTP_PORT); inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr); if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("bind"); return -1; } listen(sock, 3); printf("Server started. Listening on port 9090.\n"); handleClient(sock); return 0; }