From 753aba9e6372b5dcfb0d0ac2431808fddbd631a5 Mon Sep 17 00:00:00 2001 From: Francesco Cozzuto Date: Sun, 9 Nov 2025 17:39:53 +0100 Subject: [PATCH] Progress --- src/client.c | 12 ++++++------ src/system.c | 48 +++++++++--------------------------------------- src/system.h | 3 --- src/tcp.c | 4 ++++ 4 files changed, 19 insertions(+), 48 deletions(-) diff --git a/src/client.c b/src/client.c index 2722f52..1cd02de 100644 --- a/src/client.c +++ b/src/client.c @@ -1192,7 +1192,7 @@ static void process_event_for_write(TinyDFS *tdfs, tdfs->operations[opidx].num_hashes = num_hashes; // TODO: overflow tdfs->operations[opidx].hashes = sys_malloc(num_hashes * sizeof(SHA256)); if (tdfs->operations[opidx].hashes == NULL) { - // TODO + assert(0); // TODO } tdfs->operations[opidx].uploads = NULL; @@ -1531,31 +1531,31 @@ static void process_event_for_write(TinyDFS *tdfs, // version if (!binary_read(&reader, NULL, sizeof(uint16_t))) { - // TODO + assert(0); // TODO return; } uint16_t type; if (!binary_read(&reader, &type, sizeof(uint16_t))) { - // TODO + assert(0); // TODO return; } // length if (!binary_read(&reader, NULL, sizeof(uint32_t))) { - // TODO + assert(0); // TODO return; } SHA256 hash; if (!binary_read(&reader, &hash, sizeof(hash))) { - // TODO + assert(0); // TODO return; } // Check that there is nothing else to read if (binary_read(&reader, NULL, 1)) { - // TODO + assert(0); // TODO return; } diff --git a/src/system.c b/src/system.c index 48d91e9..a40ddf2 100644 --- a/src/system.c +++ b/src/system.c @@ -354,7 +354,7 @@ int spawn_simulated_process(char *args) current_process = NULL; if (num_polled < 0) { - // TODO + assert(0); // TODO } if (timeout < 0) { @@ -453,7 +453,7 @@ static void accept_queue_init(AcceptQueue *accept_queue, int size) accept_queue->size = size; accept_queue->items = malloc(size * sizeof(DescriptorHandle)); if (accept_queue->items == NULL) { - // TODO + assert(0); // TODO } } @@ -512,7 +512,7 @@ static void data_queue_init(DataQueue *queue, int size) queue->size = size; queue->data = malloc(size * sizeof(char)); if (queue->data == NULL) { - // TODO + assert(0); // TODO } } @@ -597,7 +597,7 @@ void update_simulation(void) switch (desc->type) { case DESC_FILE: - // TODO: error + assert(0); // TODO: error break; case DESC_SOCKET: @@ -633,7 +633,7 @@ void update_simulation(void) break; case CONNECTION_FAILED: - // TODO + assert(0); // TODO break; } break; @@ -1024,35 +1024,6 @@ int mock_getsockopt(SOCKET fd, int level, int optname, void *optval, socklen_t * return -1; } -int mock_setsockopt(SOCKET fd, int level, int optname, void *optval, socklen_t optlen) -{ - if (fd == INVALID_SOCKET || (int)fd < 0 || (int)fd >= MAX_DESCRIPTORS) { - SET_SOCKET_ERROR(SOCKET_ERROR_BADF); // Bad file descriptor - return -1; - } - - int idx = (int) fd; - Descriptor *desc = ¤t_process->desc[idx]; - if (desc->type == DESC_EMPTY) { - SET_SOCKET_ERROR(SOCKET_ERROR_BADF); - return -1; - } - - // Only support SOL_SOCKET level for now - if (level != SOL_SOCKET) { - SET_SOCKET_ERROR(SOCKET_ERROR_PROTOOPT); // Protocol not available - return -1; - } - - // Most socket options are ignored in simulation - // Just validate the call but don't actually apply settings - (void)optval; - (void)optlen; - (void)optname; - - return 0; // Success (no-op) -} - int mock_recv(SOCKET fd, void *dst, int len, int flags) { if (fd == INVALID_SOCKET || (int)fd < 0 || (int)fd >= MAX_DESCRIPTORS) { @@ -1194,7 +1165,7 @@ static void close_desc(Descriptor *desc) switch (desc->type) { case DESC_EMPTY: - // TODO + assert(0); // TODO break; case DESC_FILE: @@ -1214,7 +1185,6 @@ static void close_desc(Descriptor *desc) break; case DESC_CONNECTION_SOCKET: - data_queue_free(&desc->output_data); switch (desc->connection_state) { case CONNECTION_DELAYED: @@ -1232,7 +1202,7 @@ static void close_desc(Descriptor *desc) break; case CONNECTION_ESTABLISHED: - // TODO + data_queue_free(&desc->output_data); break; case CONNECTION_FAILED: @@ -1251,7 +1221,7 @@ static void close_desc(Descriptor *desc) int mock_closesocket(SOCKET fd) { if (fd == INVALID_SOCKET) { - // TODO + // TODO: set error return -1; } int idx = (int) fd; @@ -1260,7 +1230,7 @@ int mock_closesocket(SOCKET fd) if (desc->type != DESC_SOCKET && desc->type != DESC_LISTEN_SOCKET && desc->type != DESC_CONNECTION_SOCKET) { - // TODO + // TODO: set error return -1; } diff --git a/src/system.h b/src/system.h index c2bc896..de22ea2 100644 --- a/src/system.h +++ b/src/system.h @@ -50,7 +50,6 @@ int mock_bind(SOCKET fd, void *addr, size_t addr_len); int mock_listen(SOCKET fd, int backlog); SOCKET mock_accept(SOCKET fd, void *addr, socklen_t *addr_len); int mock_getsockopt(SOCKET fd, int level, int optname, void *optval, socklen_t *optlen); -int mock_setsockopt(SOCKET fd, int level, int optname, void *optval, socklen_t optlen); int mock_recv(SOCKET fd, void *dst, int len, int flags); int mock_send(SOCKET fd, void *src, int len, int flags); int mock_connect(SOCKET fd, void *addr, size_t addr_len); @@ -94,7 +93,6 @@ int mock_mkdir(char *path, mode_t mode); #define sys_listen mock_listen #define sys_accept mock_accept #define sys_getsockopt mock_getsockopt -#define sys_setsockopt mock_setsockopt #define sys_recv mock_recv #define sys_send mock_send #define sys_connect mock_connect @@ -141,7 +139,6 @@ int mock_mkdir(char *path, mode_t mode); #define sys_listen listen #define sys_accept accept #define sys_getsockopt getsockopt -#define sys_setsockopt setsockopt #define sys_recv recv #define sys_send send #define sys_connect connect diff --git a/src/tcp.c b/src/tcp.c index 8ec8ca9..38a0f2d 100644 --- a/src/tcp.c +++ b/src/tcp.c @@ -330,6 +330,10 @@ int tcp_connect(TCP *tcp, Address addr, int tag, ByteQueue **output) connecting = true; } + // Check that this tag wasn't already used + for (int i = 0; i < tcp->num_conns; i++) + assert(tcp->conns[i].tag != tag); + conn_init(&tcp->conns[conn_idx], fd, connecting); tcp->conns[conn_idx].tag = tag;