From f3fc474eca94ac3e11200f17c94ada375e51ede6 Mon Sep 17 00:00:00 2001 From: alexvoste Date: Thu, 7 May 2026 01:22:24 +0300 Subject: [PATCH] push --- .gdb_history | 8 +++++++ main.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++ main.nasm | 9 ++++++++ server/server.c | 38 +++++++++++++++++++++++++++++++++ server/server.h | 9 ++++++++ 5 files changed, 120 insertions(+) create mode 100644 .gdb_history create mode 100644 main.c create mode 100644 main.nasm create mode 100644 server/server.c create mode 100644 server/server.h diff --git a/.gdb_history b/.gdb_history new file mode 100644 index 0000000..4cc7444 --- /dev/null +++ b/.gdb_history @@ -0,0 +1,8 @@ +ls +help +running +help app +help all +tdump +tdump ./main +exit diff --git a/main.c b/main.c new file mode 100644 index 0000000..c1b94e4 --- /dev/null +++ b/main.c @@ -0,0 +1,56 @@ +#include "server/server.h" +#include +#include +#include +#include +#include + +int main(void) { + int server_socket, client_socket; + struct sockaddr_in server_addr, client_addr; + socklen_t addr_len = sizeof(client_addr); + + // Create socket + server_socket = socket(AF_INET, SOCK_STREAM, 0); + if (server_socket == -1) { + perror("Socket creation failed"); + exit(EXIT_FAILURE); + } + + // Set up server address + memset(&server_addr, 0, sizeof(server_addr)); + server_addr.sin_family = AF_INET; + server_addr.sin_addr.s_addr = INADDR_ANY; + server_addr.sin_port = htons(PORT); + + // Bind socket + if (bind(server_socket, (struct sockaddr *)&server_addr, + sizeof(server_addr)) < 0) { + perror("Bind failed"); + exit(EXIT_FAILURE); + } + + // Listen for connections + if (listen(server_socket, 10) < 0) { + perror("Listen failed"); + exit(EXIT_FAILURE); + } + + printf("Server listening on port %d\n", PORT); + + // Accept and handle clients + while (1) { + client_socket = + accept(server_socket, (struct sockaddr *)&client_addr, &addr_len); + if (client_socket < 0) { + perror("Accept failed"); + continue; + } + printf("Accepted connection from %s:%d\n", inet_ntoa(client_addr.sin_addr), + ntohs(client_addr.sin_port)); + handle_client(client_socket); + } + + close(server_socket); + return 0; +} diff --git a/main.nasm b/main.nasm new file mode 100644 index 0000000..55e3ae7 --- /dev/null +++ b/main.nasm @@ -0,0 +1,9 @@ +global .text + +_start + mov eax, 70 + + jp carry_set +carry_set + mov bx, 66 + syscall diff --git a/server/server.c b/server/server.c new file mode 100644 index 0000000..5eda8ab --- /dev/null +++ b/server/server.c @@ -0,0 +1,38 @@ +#include "server.h" +#include +#include +#include +#include +#include + +void handle_client(int client_socket, const char *uri) { + char buffer[1024]; + char path[256] = "./public"; + + if (strcmp(uri, "/") == 0) { + strcat(path, "/index.html"); + } else { + strcat(path, uri); + } + + FILE *f = fopen(path, "rb"); + + if (f == NULL) { + char *response = "HTTP/1.1 404 Not Found\r\OK\r\nContent-Length: 0\r\n\r\n"; + send(client_socket, response, strlen(response), 0); + return; + } + + struct stat st; + stat(path, &st); + long file_size = st.st_size; + + recv(client_socket, buffer, 1024, 0); + + char *response = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nHello " + "from server 8080 localhost!"; + send(client_socket, response, strlen(response), 0); + + // Close the socket + close(client_socket); +} diff --git a/server/server.h b/server/server.h new file mode 100644 index 0000000..246359e --- /dev/null +++ b/server/server.h @@ -0,0 +1,9 @@ +#pragma once + +#define PORT 8080 + +#define INDEX \ + "/" \ + "index.html" + +void handle_client(int client_socket);