/* * Copyright (c) 2021 joshua stein * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef __DB_H__ #define __DB_H__ #include #define DB_CUR_VERS 22 #define SUBTEXT_CREATOR 'SUBT' #define DB_TYPE 'STDB' #define DB_TRUE 0x100 #define DB_FALSE 0x000 #define DB_CONFIG_RTYPE 'CONF' #define DB_USER_RTYPE 'USER' #define DB_BOARD_RTYPE 'BORD' #define DB_FOLDER_RTYPE 'FOLD' #define DB_VERS_RTYPE 'VERS' #define DB_MOTD_RTYPE 'MOTD' #define DB_USERNAME_LENGTH 16 #define SL_TYPE 'STSL' #define SL_LOG_RTYPE 'SLOG' #define SL_TALLY_RTYPE 'STLY' #define BOARD_FILENAME_EXT "brd" #define BOARD_THREAD_RTYPE 'BDTH' #define BOARD_POST_RTYPE 'BDPS' #define BOARD_FTN_POST_RTYPE 'BDFP' #define BOARD_FTN_MSGID_CACHE_RTYPE 'BDMC' #define BOARD_SORTED_ID_MAP_RTYPE 'BDDX' #define FOLDER_FILENAME_EXT "fld" #define FOLDER_FILE_RTYPE 'FILE' #define MAIL_SPOOL_TYPE 'STMS' #define MAIL_SPOOL_MESSAGE_RTYPE 'PMSG' #define FTN_SPOOL_PACKET_TYPE 'FNSP' #include "subtext.h" #include "bile.h" #include "board.h" #include "folder.h" #include "ipdb.h" #include "settings.h" struct config { char name[32]; char phone_number[32]; char location[64]; char hostname[32]; short telnet_port; short modem_port; char modem_init[96]; short max_idle_minutes; char timezone[8]; short open_signup; short max_login_seconds; short blanker_idle_seconds; short blanker_runtime_seconds; unsigned long trusted_proxy_ip; unsigned long modem_speed; unsigned short trusted_proxy_udp_port; short session_log_prune_days; char modem_parity[4]; char ftn_node_addr[32]; char ftn_hub_addr[32]; char ftn_hub_pkt_password[9]; char binkp_hostname[64]; unsigned short binkp_port; char binkp_password[32]; unsigned long binkp_interval_seconds; short binkp_delete_done; short timezone_utcoff; char ftn_network[16]; short mail_prune_days; unsigned long ftn_max_tossed_message_size; short max_sysop_idle_minutes; char ipdb_path[255]; short modem_rings; unsigned long syslog_ip; }; extern struct struct_field config_fields[]; extern size_t nconfig_fields; enum { DB_VIEW_MENU = 0, DB_VIEW_SHORTMENU, DB_VIEW_ISSUE, DB_VIEW_SIGNUP, DB_VIEW_PAGE_SYSOP, DB_VIEW_NO_FREE_NODES, DB_VIEW_SIGNOFF, DB_VIEW_MENU_OPTIONS, DB_VIEW_COUNT }; struct db { struct bile *bile; short fh; struct config config; struct username_cache *username_cache; short nusers; struct bile *sessions_bile; struct board *boards; short nboards; struct folder *folders; short nfolders; struct bile *mail_bile; struct ipdb_file *ipdb; char *views[DB_VIEW_COUNT]; }; struct db * db_open(Str255 file, short vrefnum, bool ignore_last); struct db * db_create(void); void db_close(struct db *tdb); void db_config_save(struct db *tdb); void db_cache_boards(struct db *tdb); struct bile * db_board_create(struct db *tdb, struct board *board, bool delete_first); void db_board_delete(struct db *tdb, struct board *board); void db_cache_folders(struct db *tdb); struct bile * db_folder_create(struct db *tdb, struct folder *folder, bool delete_first); void db_folder_delete(struct db *tdb, struct folder *folder); void db_cache_views(struct db *tdb); void db_view_write(struct db *tdb, short id, char *str, size_t size); #endif