--- lbbs/src/common.c 2025/05/06 13:28:38 1.16 +++ lbbs/src/common.c 2025/10/22 16:12:50 1.40 @@ -15,145 +15,53 @@ ***************************************************************************/ #include "common.h" -#include "log.h" -#include "menu.h" -#include -#include -#include -#include -// Version information -char app_version[256] = "LBBS-devel version 1.0"; +// File loader +const char *data_files_load_startup[] = { + DATA_WELCOME, + DATA_REGISTER, + DATA_GOODBYE, + DATA_LICENSE, + DATA_COPYRIGHT, + DATA_VERSION, + DATA_LOGIN_ERROR, + DATA_ACTIVE_BOARD, + DATA_READ_HELP, + DATA_EDITOR_HELP, + VAR_BBS_TOP}; + +const int data_files_load_startup_count = sizeof(data_files_load_startup) / sizeof(const char *); // Global declaration for sockets -int socket_server; +int socket_server[2]; int socket_client; -char hostaddr_server[50]; -char hostaddr_client[50]; -int port_server; +char hostaddr_client[IP_ADDR_LEN]; int port_client; +// SSHv2 +int SSH_v2 = 0; +ssh_bind sshbind; +ssh_session SSH_session; +ssh_channel SSH_channel; + // Global declaration for system -int SYS_exit; -int SYS_child_process_count; +volatile int SYS_server_exit = 0; +volatile int SYS_child_process_count = 0; +volatile int SYS_child_exit = 0; +volatile int SYS_conf_reload = 0; // Common function -const char *str_space(char *string, int length) -{ - int i; - for (i = 0; i < length; i++) - { - string[i] = ' '; - } - string[length] = '\0'; - return string; -} - -const char *get_time_str(char *s, size_t len) -{ - time_t curtime = time(NULL); - struct tm *loctime; - loctime = localtime(&curtime); - - size_t j = strftime(s, len, "%Y年%m月%d日%H:%M:%S ", loctime); - - if (j == 0) - { - return NULL; - } - - switch (loctime->tm_wday) - { - case 0: - strncat(s, "星期天", len - j); - break; - case 1: - strncat(s, "星期一", len - j); - break; - case 2: - strncat(s, "星期二", len - j); - break; - case 3: - strncat(s, "星期三", len - j); - break; - case 4: - strncat(s, "星期四", len - j); - break; - case 5: - strncat(s, "星期五", len - j); - break; - case 6: - strncat(s, "星期六", len - j); - break; - } - - return s; -} - -void reload_bbs_menu(int i) -{ - if (reload_menu(&bbs_menu) < 0) - { - log_error("Reload menu failed\n"); - } - else - { - log_std("Reload menu successfully\n"); - } -} - -void system_exit(int i) +void sig_hup_handler(int i) { - SYS_exit = 1; + SYS_conf_reload = 1; } -void child_exit(int i) +void sig_term_handler(int i) { - int pid; - - pid = wait(0); - - if (pid > 0) - { - SYS_child_process_count--; - log_std("Child process (%d) exited\n", pid); - } + SYS_server_exit = 1; } -const char * ip_mask(char * s, int level, char mask) +void sig_chld_handler(int i) { - char * p = s; - - if (level <= 0) - { - return s; - } - if (level > 4) - { - level = 4; - } - - for (int i = 0; i < 4 - level; i++) - { - p = strchr(p, '.'); - if (p == NULL) - { - return s; - } - p++; - } - - for (int i = 0; i < level; i++) - { - *p = mask; - p++; - if (i < level - 1) - { - *p = '.'; - p++; - } - } - *p = '\0'; - - return s; + SYS_child_exit = 1; }