/* SPDX-License-Identifier: MIT */ /* Copyright (c) 2026 Oleksandr Zhylin */ #ifndef MAIN_H #define MAIN_H #include #include #include #define LOCAL_PORT 1999 #define SERVER_PORT 2000 #define LISTEN_QLEN 32 #define INBUFSIZE 1024 #define DOWNLOADS_DIR "./Downloads" #define DIALOGUE_TITLE 64 #define DIALOGUE_TEXT 4096 #define INPUT_TEXT DIALOGUE_TITLE typedef struct params { unsigned short port; unsigned addr; char *uname; char *pass; char privileges; int32_t sd; uint32_t is_connected : 1; } params_t; enum state { /* TUI-based */ S_N_D, S_ASK_SEVER_IP, S_ASK_LOGIN_TYPE, S_ASK_LOGIN_USER, S_ASK_REGISTER, S_WAIT_SERVER, S_PRINT_SERVER_MESSAGE, S_FILE_LIST, S_WAIT_PASS, /* S_FILE_SELECT, */ S_FILE_DOWNLOAD, S_UPLOAD_PARAMS, S_UPLOAD_FILE, S_UPLOAD_FILE_SELECT, S_UPLOAD_REQUESTED, S_UPLOAD_SERVER_FINISHES, S_ASK_USER_BEFORE_LOGIN, S_ERR, S_NEXT_ACTION, S_WAIT_REGISTER_CONFIRMATION, /* Legacy */ WAIT_SERVER_INIT, WAIT_SERVER, WAIT_REGISTER, WAIT_REGISTER_CONFIRMATION, WAIT_CLIENT, }; typedef struct p_file { char *name; char *path; char *description; size_t size; size_t rest; int fd; } p_file_t; typedef struct fl_item { size_t size; char *name; char *description; char *owner; struct fl_item *next; } fl_item_t; typedef struct file_args { int file_d; fl_item_t f_selected; fl_item_t *l_start; fl_item_t *l_current; } file_args_t; typedef struct query_args { int32_t sd; int32_t buf_used; p_file_t *file; enum state state; char *buf; bool from_server; params_t *params; struct { char *text; uint64_t capacity; uint64_t size; } server_message; void *file_list_ui; /* TODO: find solution to insert actual type without void pointers */ void *progress_bar; void *active_dialogue; char *notification; } query_args_t; #endif