diff --git a/src/sbbs3/ctrl/FtpCfgDlgUnit.cpp b/src/sbbs3/ctrl/FtpCfgDlgUnit.cpp index 62ff5fcafca87440ac876d1a685d44f6fae1e90f..57610c4e42ed7df0bf9c71c1d53b5ceb10b9fc05 100644 --- a/src/sbbs3/ctrl/FtpCfgDlgUnit.cpp +++ b/src/sbbs3/ctrl/FtpCfgDlgUnit.cpp @@ -72,9 +72,9 @@ void __fastcall TFtpCfgDlg::FormShow(TObject *Sender) MaxConConEdit->Text = AnsiString((int)MainForm->ftp_startup.max_concurrent_connections); IndexFileNameEdit->Text=AnsiString(MainForm->ftp_startup.index_file_name); - AnswerSoundEdit->Text=AnsiString(MainForm->ftp_startup.answer_sound); - HangupSoundEdit->Text=AnsiString(MainForm->ftp_startup.hangup_sound); - HackAttemptSoundEdit->Text=AnsiString(MainForm->ftp_startup.hack_sound); + AnswerSoundEdit->Text=AnsiString(MainForm->ftp_startup.sound.answer); + HangupSoundEdit->Text=AnsiString(MainForm->ftp_startup.sound.hangup); + HackAttemptSoundEdit->Text=AnsiString(MainForm->ftp_startup.sound.hack); CmdLogCheckBox->Checked=MainForm->ftp_startup.options&FTP_OPT_DEBUG_RX; DebugTxCheckBox->Checked=MainForm->ftp_startup.options&FTP_OPT_DEBUG_TX; DebugDataCheckBox->Checked=MainForm->ftp_startup.options&FTP_OPT_DEBUG_DATA; @@ -135,11 +135,11 @@ void __fastcall TFtpCfgDlg::OKBtnClick(TObject *Sender) SAFECOPY(MainForm->ftp_startup.index_file_name ,IndexFileNameEdit->Text.c_str()); - SAFECOPY(MainForm->ftp_startup.answer_sound + SAFECOPY(MainForm->ftp_startup.sound.answer ,AnswerSoundEdit->Text.c_str()); - SAFECOPY(MainForm->ftp_startup.hangup_sound + SAFECOPY(MainForm->ftp_startup.sound.hangup ,HangupSoundEdit->Text.c_str()); - SAFECOPY(MainForm->ftp_startup.hack_sound + SAFECOPY(MainForm->ftp_startup.sound.hack ,HackAttemptSoundEdit->Text.c_str()); if(DebugTxCheckBox->Checked==true) diff --git a/src/sbbs3/ctrl/ServicesCfgDlgUnit.cpp b/src/sbbs3/ctrl/ServicesCfgDlgUnit.cpp index a146979cc52d73f517a072253241716e624d9e19..f12a7b76f42072a13a429d8f658052fcaea5ce84 100644 --- a/src/sbbs3/ctrl/ServicesCfgDlgUnit.cpp +++ b/src/sbbs3/ctrl/ServicesCfgDlgUnit.cpp @@ -32,8 +32,8 @@ void __fastcall TServicesCfgDlg::FormShow(TObject *Sender) } AutoStartCheckBox->Checked=MainForm->ServicesAutoStart; - AnswerSoundEdit->Text=AnsiString(MainForm->services_startup.answer_sound); - HangupSoundEdit->Text=AnsiString(MainForm->services_startup.hangup_sound); + AnswerSoundEdit->Text=AnsiString(MainForm->services_startup.sound.answer); + HangupSoundEdit->Text=AnsiString(MainForm->services_startup.sound.hangup); HostnameCheckBox->Checked =!(MainForm->services_startup.options&BBS_OPT_NO_HOST_LOOKUP); @@ -82,9 +82,9 @@ void __fastcall TServicesCfgDlg::OKButtonClick(TObject *Sender) MainForm->ServicesAutoStart=AutoStartCheckBox->Checked; - SAFECOPY(MainForm->services_startup.answer_sound + SAFECOPY(MainForm->services_startup.sound.answer ,AnswerSoundEdit->Text.c_str()); - SAFECOPY(MainForm->services_startup.hangup_sound + SAFECOPY(MainForm->services_startup.sound.hangup ,HangupSoundEdit->Text.c_str()); if(HostnameCheckBox->Checked==false) diff --git a/src/sbbs3/ctrl/TelnetCfgDlgUnit.cpp b/src/sbbs3/ctrl/TelnetCfgDlgUnit.cpp index 60e9ab7ff82f5896cd480ac2f6c23697e6c03ebc..8c230c360efdb25cdbb091b91d944e89ab97cb2a 100644 --- a/src/sbbs3/ctrl/TelnetCfgDlgUnit.cpp +++ b/src/sbbs3/ctrl/TelnetCfgDlgUnit.cpp @@ -88,8 +88,8 @@ void __fastcall TTelnetCfgDlg::FormShow(TObject *Sender) else MaxConConEdit->Text=AnsiString((int)MainForm->bbs_startup.max_concurrent_connections); AutoStartCheckBox->Checked=MainForm->SysAutoStart; - AnswerSoundEdit->Text=AnsiString(MainForm->bbs_startup.answer_sound); - HangupSoundEdit->Text=AnsiString(MainForm->bbs_startup.hangup_sound); + AnswerSoundEdit->Text=AnsiString(MainForm->bbs_startup.sound.answer); + HangupSoundEdit->Text=AnsiString(MainForm->bbs_startup.sound.hangup); CmdLogCheckBox->Checked=MainForm->bbs_startup.options&BBS_OPT_DEBUG_TELNET; TelnetGaCheckBox->Checked =!(MainForm->bbs_startup.options&BBS_OPT_NO_TELNET_GA); @@ -137,9 +137,9 @@ void __fastcall TTelnetCfgDlg::OKBtnClick(TObject *Sender) MainForm->bbs_startup.max_concurrent_connections=MaxConConEdit->Text.ToIntDef(0); MainForm->SysAutoStart=AutoStartCheckBox->Checked; - SAFECOPY(MainForm->bbs_startup.answer_sound + SAFECOPY(MainForm->bbs_startup.sound.answer ,AnswerSoundEdit->Text.c_str()); - SAFECOPY(MainForm->bbs_startup.hangup_sound + SAFECOPY(MainForm->bbs_startup.sound.hangup ,HangupSoundEdit->Text.c_str()); if(TelnetGaCheckBox->Checked==false) MainForm->bbs_startup.options|=BBS_OPT_NO_TELNET_GA; diff --git a/src/sbbs3/ctrl/WebCfgDlgUnit.cpp b/src/sbbs3/ctrl/WebCfgDlgUnit.cpp index b6dc232e1f80913ce782f263fd8d1729f13b732e..cad6925513e3d35af8e1d2b4b4d32b2935f8a75e 100644 --- a/src/sbbs3/ctrl/WebCfgDlgUnit.cpp +++ b/src/sbbs3/ctrl/WebCfgDlgUnit.cpp @@ -104,9 +104,9 @@ void __fastcall TWebCfgDlg::FormShow(TObject *Sender) CGICheckBox->Checked=!(MainForm->web_startup.options&WEB_OPT_NO_CGI); - AnswerSoundEdit->Text=AnsiString(MainForm->web_startup.answer_sound); - HangupSoundEdit->Text=AnsiString(MainForm->web_startup.hangup_sound); - HackAttemptSoundEdit->Text=AnsiString(MainForm->web_startup.hack_sound); + AnswerSoundEdit->Text=AnsiString(MainForm->web_startup.sound.answer); + HangupSoundEdit->Text=AnsiString(MainForm->web_startup.sound.hangup); + HackAttemptSoundEdit->Text=AnsiString(MainForm->web_startup.sound.hack); DebugTxCheckBox->Checked=MainForm->web_startup.options&WEB_OPT_DEBUG_TX; DebugRxCheckBox->Checked=MainForm->web_startup.options&WEB_OPT_DEBUG_RX; @@ -173,11 +173,11 @@ void __fastcall TWebCfgDlg::OKBtnClick(TObject *Sender) else MainForm->web_startup.options&=~WEB_OPT_NO_CGI; - SAFECOPY(MainForm->web_startup.answer_sound + SAFECOPY(MainForm->web_startup.sound.answer ,AnswerSoundEdit->Text.c_str()); - SAFECOPY(MainForm->web_startup.hangup_sound + SAFECOPY(MainForm->web_startup.sound.hangup ,HangupSoundEdit->Text.c_str()); - SAFECOPY(MainForm->web_startup.hack_sound + SAFECOPY(MainForm->web_startup.sound.hack ,HackAttemptSoundEdit->Text.c_str()); if(DebugTxCheckBox->Checked==true) diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c index 72a579685f2e092d335c9b01799a04db1b45524b..68324b09665a76c31caeaaa26bffd31563848d11 100644 --- a/src/sbbs3/ftpsrvr.c +++ b/src/sbbs3/ftpsrvr.c @@ -1724,8 +1724,8 @@ void ftp_printfile(SOCKET sock, CRYPT_SESSION sess, const char* name, unsigned c static BOOL ftp_hacklog(char* prot, char* user, char* text, char* host, union xp_sockaddr* addr) { #ifdef _WIN32 - if(startup->hack_sound[0] && !(startup->options&FTP_OPT_MUTE)) - PlaySound(startup->hack_sound, NULL, SND_ASYNC|SND_FILENAME); + if(startup->sound.hack[0] && !(startup->options&FTP_OPT_MUTE)) + PlaySound(startup->sound.hack, NULL, SND_ASYNC|SND_FILENAME); #endif return hacklog(&scfg, prot, user, text, host, addr); @@ -2198,8 +2198,8 @@ static void ctrl_thread(void* arg) free(arg); #ifdef _WIN32 - if(startup->answer_sound[0] && !(startup->options&FTP_OPT_MUTE)) - PlaySound(startup->answer_sound, NULL, SND_ASYNC|SND_FILENAME); + if(startup->sound.answer[0] && !(startup->options&FTP_OPT_MUTE)) + PlaySound(startup->sound.answer, NULL, SND_ASYNC|SND_FILENAME); #endif transfer_inprogress = FALSE; @@ -2565,6 +2565,10 @@ static void ctrl_thread(void* arg) user.logontime=(time32_t)logintime; putuserdat(&scfg, &user); +#ifdef _WIN32 + if(startup->sound.login[0] && !(startup->options&FTP_OPT_MUTE)) + PlaySound(startup->sound.login, NULL, SND_ASYNC|SND_FILENAME); +#endif continue; } if (!strnicmp(cmd, "AUTH ", 5)) { @@ -4802,11 +4806,16 @@ static void ctrl_thread(void* arg) if(!logoutuserdat(&scfg, &user, time(NULL), logintime)) lprintf(LOG_ERR,"%04d <%s> !ERROR in logoutuserdat", sock, user.alias); lprintf(LOG_INFO,"%04d <%s> logged off", sock, user.alias); +#ifdef _WIN32 + if(startup->sound.logout[0] && !(startup->options&FTP_OPT_MUTE)) + PlaySound(startup->sound.logout, NULL, SND_ASYNC|SND_FILENAME); +#endif + } #ifdef _WIN32 - if(startup->hangup_sound[0] && !(startup->options&FTP_OPT_MUTE)) - PlaySound(startup->hangup_sound, NULL, SND_ASYNC|SND_FILENAME); + if(startup->sound.hangup[0] && !(startup->options&FTP_OPT_MUTE)) + PlaySound(startup->sound.hangup, NULL, SND_ASYNC|SND_FILENAME); #endif /* status(STATUS_WFC); server thread should control status display */ diff --git a/src/sbbs3/ftpsrvr.h b/src/sbbs3/ftpsrvr.h index cd98196ad1f48057033d447106d309ed7c7e0b46..f02bd49d0870bdd7b64c1f25d5d3c956153e1d00 100644 --- a/src/sbbs3/ftpsrvr.h +++ b/src/sbbs3/ftpsrvr.h @@ -63,13 +63,10 @@ typedef struct { BOOL (*setuid)(BOOL force); /* Paths */ - char ctrl_dir[128]; + char ctrl_dir[INI_MAX_VALUE_LEN]; char index_file_name[64]; - char temp_dir[128]; - char answer_sound[128]; - char hangup_sound[128]; - char hack_sound[128]; - char ini_fname[128]; + char temp_dir[INI_MAX_VALUE_LEN]; + char ini_fname[INI_MAX_VALUE_LEN]; /* Misc */ char host_name[128]; @@ -79,6 +76,8 @@ typedef struct { uint bind_retry_count; /* Number of times to retry bind() calls */ uint bind_retry_delay; /* Time to wait between each bind() retry */ + struct startup_sound_settings sound; + /* Login Attempt parameters */ struct login_attempt_settings login_attempt; link_list_t* login_attempt_list; diff --git a/src/sbbs3/login.cpp b/src/sbbs3/login.cpp index 7432b23b30cd2b59b555f41f62c5108429263e75..094684302fcd62be033a0080e1b48927b30b4fac 100644 --- a/src/sbbs3/login.cpp +++ b/src/sbbs3/login.cpp @@ -146,6 +146,11 @@ int sbbs_t::login(char *username, char *pw_prompt, const char* user_pw, const ch } } +#ifdef _WIN32 + if(startup->sound.login[0] && !(startup->options&BBS_OPT_MUTE)) + PlaySound(startup->sound.login, NULL, SND_ASYNC|SND_FILENAME); +#endif + return(LOGIC_TRUE); } @@ -167,6 +172,10 @@ void sbbs_t::badlogin(char* user, char* passwd, const char* protocol, xp_sockadd if(user!=NULL && startup->login_attempt.hack_threshold && count>=startup->login_attempt.hack_threshold) { getnameinfo(&addr->addr, addr_len, host_name, sizeof(host_name), NULL, 0, NI_NAMEREQD); ::hacklog(&cfg, reason, user, passwd, host_name, addr); +#ifdef _WIN32 + if(startup->sound.hack[0] && !(startup->options&BBS_OPT_MUTE)) + PlaySound(startup->sound.hack, NULL, SND_ASYNC|SND_FILENAME); +#endif } if(startup->login_attempt.filter_threshold && count>=startup->login_attempt.filter_threshold) { char ipaddr[INET6_ADDRSTRLEN]; diff --git a/src/sbbs3/logout.cpp b/src/sbbs3/logout.cpp index 01861f09099f272c9d8007385ec29f12cb9ead72..d2df4e4d2242003b4945d74460bfd9676009bb85 100644 --- a/src/sbbs3/logout.cpp +++ b/src/sbbs3/logout.cpp @@ -148,6 +148,11 @@ void sbbs_t::logout() sys_status&=~SS_USERON; answertime=now; // In case we're re-logging on +#ifdef _WIN32 + if(startup->sound.logout[0] && !(startup->options&BBS_OPT_MUTE)) + PlaySound(startup->sound.logout, NULL, SND_ASYNC|SND_FILENAME); +#endif + lprintf(LOG_DEBUG, "logout completed"); } diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index 06cc3cc36ac7a8ada1a639e993a529e7b2c2562e..1134be59bff87c178f8bf1f37ec0027322446ae5 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -955,8 +955,13 @@ static void badlogin(SOCKET sock, CRYPT_SESSION sess, const char* prot, const ch if(addr!=NULL) { SAFEPRINTF(reason,"%s LOGIN", prot); count=loginFailure(startup->login_attempt_list, addr, prot, user, passwd); - if(startup->login_attempt.hack_threshold && count>=startup->login_attempt.hack_threshold) + if(startup->login_attempt.hack_threshold && count>=startup->login_attempt.hack_threshold) { hacklog(&scfg, reason, user, passwd, host, addr); +#ifdef _WIN32 + if(startup->sound.hack[0] && !(startup->options&MAIL_OPT_MUTE)) + PlaySound(startup->sound.hack, NULL, SND_ASYNC|SND_FILENAME); +#endif + } inet_addrtop(addr, ip, sizeof(ip)); if(startup->login_attempt.filter_threshold && count>=startup->login_attempt.filter_threshold) { SAFEPRINTF(reason, "- TOO MANY CONSECUTIVE FAILED LOGIN ATTEMPTS (%lu)", count); @@ -1338,7 +1343,10 @@ static void pop3_thread(void* arg) lprintf(LOG_INFO,"%04d %s [%s] %s logged-in %s", socket, client.protocol, host_ip, user.alias, apop ? "via APOP":""); SAFEPRINTF2(str,"%s: %s", client.protocol, user.alias); status(str); - +#ifdef _WIN32 + if(startup->sound.login[0] && !(startup->options&MAIL_OPT_MUTE)) + PlaySound(startup->sound.login, NULL, SND_ASYNC|SND_FILENAME); +#endif SAFEPRINTF(smb.file,"%smail",scfg.data_dir); if(smb_islocked(&smb)) { lprintf(LOG_WARNING,"%04d %s <%s> !MAIL BASE LOCKED: %s",socket, client.protocol, user.alias, smb.last_error); @@ -1706,6 +1714,10 @@ static void pop3_thread(void* arg) sockprintf(socket,client.protocol,session,"-ERR UNSUPPORTED COMMAND: %s",buf); } if(user.number) { +#ifdef _WIN32 + if(startup->sound.logout[0] && !(startup->options&MAIL_OPT_MUTE)) + PlaySound(startup->sound.logout, NULL, SND_ASYNC|SND_FILENAME); +#endif if(!logoutuserdat(&scfg,&user,time(NULL),client.time)) lprintf(LOG_ERR,"%04d %s <%s> !ERROR in logoutuserdat", socket, client.protocol, user.alias); } @@ -4205,6 +4217,10 @@ static void smtp_thread(void* arg) ,socket,client.protocol, client_id, relay_user.alias, auth_login ? "LOGIN" : "PLAIN"); SAFEPRINTF(client_id, "<%s>", relay_user.alias); sockprintf(socket,client.protocol,session,auth_ok); +#ifdef _WIN32 + if(startup->sound.login[0] && !(startup->options&MAIL_OPT_MUTE)) + PlaySound(startup->sound.login, NULL, SND_ASYNC|SND_FILENAME); +#endif continue; } if(!stricmp(buf,"AUTH CRAM-MD5")) { @@ -4299,6 +4315,10 @@ static void smtp_thread(void* arg) ,socket, client.protocol, client_id, relay_user.alias); SAFEPRINTF(client_id, "<%s>", relay_user.alias); sockprintf(socket,client.protocol,session,auth_ok); +#ifdef _WIN32 + if(startup->sound.login[0] && !(startup->options&MAIL_OPT_MUTE)) + PlaySound(startup->sound.login, NULL, SND_ASYNC|SND_FILENAME); +#endif continue; } if(!strnicmp(buf,"AUTH",4)) { @@ -5015,6 +5035,13 @@ static void smtp_thread(void* arg) } free(mailproc_to_match); +#ifdef _WIN32 + if(relay_user.number) { + if(startup->sound.logout[0] && !(startup->options&MAIL_OPT_MUTE)) + PlaySound(startup->sound.logout, NULL, SND_ASYNC|SND_FILENAME); + } +#endif + /* Must be last */ mail_close_socket(&socket, &session); } diff --git a/src/sbbs3/mailsrvr.h b/src/sbbs3/mailsrvr.h index 2dac0e8a8d302d6d1b1aceea6e2dd2b2ce6cacd4..11327d965d85db902f3aca1f99234bde9117d039 100644 --- a/src/sbbs3/mailsrvr.h +++ b/src/sbbs3/mailsrvr.h @@ -75,20 +75,20 @@ typedef struct { BOOL (*setuid)(BOOL force); /* Paths */ - char ctrl_dir[128]; - char temp_dir[128]; - char ini_fname[128]; + char ctrl_dir[INI_MAX_VALUE_LEN]; + char temp_dir[INI_MAX_VALUE_LEN]; + char ini_fname[INI_MAX_VALUE_LEN]; /* Strings */ char dns_server[128]; char default_user[128]; char dnsbl_tag[32]; // Tag to add to blacklisted subject char dnsbl_hdr[32]; // Header field to add to msg header - char inbound_sound[128]; - char outbound_sound[128]; - char pop3_sound[128]; - char newmail_notice[256]; - char forward_notice[256]; + char inbound_sound[INI_MAX_VALUE_LEN]; + char outbound_sound[INI_MAX_VALUE_LEN]; + char pop3_sound[INI_MAX_VALUE_LEN]; + char newmail_notice[INI_MAX_VALUE_LEN]; + char forward_notice[INI_MAX_VALUE_LEN]; /* Misc */ char host_name[128]; @@ -107,6 +107,8 @@ typedef struct { /* JavaScript operating parameters */ js_startup_t js; + struct startup_sound_settings sound; + /* Login Attempt parameters */ struct login_attempt_settings login_attempt; link_list_t* login_attempt_list; diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index e5b6d9874a145bc7e34bbadadbb7d95fe17561dd..3e9c2ca292d40e0f17709f7dd4cae8d262dccf3d 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -4386,8 +4386,8 @@ void node_thread(void* arg) } #ifdef _WIN32 - if(startup->hangup_sound[0] && !(startup->options&BBS_OPT_MUTE)) - PlaySound(startup->hangup_sound, NULL, SND_ASYNC|SND_FILENAME); + if(startup->sound.hangup[0] && !(startup->options&BBS_OPT_MUTE)) + PlaySound(startup->sound.hangup, NULL, SND_ASYNC|SND_FILENAME); #endif sbbs->hangup(); /* closes sockets, calls client_off, and shuts down the output_thread */ @@ -5337,8 +5337,8 @@ NO_SSH: } #ifdef _WIN32 - if(startup->answer_sound[0] && !(startup->options&BBS_OPT_MUTE)) - PlaySound(startup->answer_sound, NULL, SND_ASYNC|SND_FILENAME); + if(startup->sound.answer[0] && !(startup->options&BBS_OPT_MUTE)) + PlaySound(startup->sound.answer, NULL, SND_ASYNC|SND_FILENAME); #endif /* Purge (flush) any pending input or output data */ diff --git a/src/sbbs3/sbbs_ini.c b/src/sbbs3/sbbs_ini.c index ba01198d0b74766139525edde7bafbb53f515bc6..a66c4b3e524743dff1b4eef9be39373aa9941fa4 100644 --- a/src/sbbs3/sbbs_ini.c +++ b/src/sbbs3/sbbs_ini.c @@ -46,6 +46,8 @@ static const char* strBindRetryCount="BindRetryCount"; static const char* strBindRetryDelay="BindRetryDelay"; static const char* strAnswerSound="AnswerSound"; static const char* strHangupSound="HangupSound"; +static const char* strLoginSound="LoginSound"; +static const char* strLogoutSound="LogoutSound"; static const char* strHackAttemptSound="HackAttemptSound"; static const char* strLoginAttemptDelay="LoginAttemptDelay"; static const char* strLoginAttemptThrottle="LoginAttemptThrottle"; @@ -87,6 +89,16 @@ void sbbs_get_ini_fname(char* ini_file, char* ctrl_dir, char* pHostName) #endif } +static BOOL iniSetStringWithGlobalDefault(str_list_t* lp, const char* section, const char* key + ,const char* value, const char* global_value, ini_style_t* style) +{ + if(strcmp(value, global_value) == 0) { + iniRemoveKey(lp, section, key); + return iniKeyExists(*lp, section, key) == FALSE; + } + return iniSetString(lp, section, key, value, style) != NULL; +} + static void sbbs_fix_js_settings(js_startup_t* js) { /* Some sanity checking here */ @@ -169,6 +181,48 @@ BOOL sbbs_set_js_settings( return(!failure); } +void sbbs_get_sound_settings(str_list_t list, const char* section, struct startup_sound_settings* sound + ,struct startup_sound_settings* defaults) +{ + char value[INI_MAX_VALUE_LEN]; + char* p; + + if((p = iniGetString(list, section, strAnswerSound, defaults->answer, value)) != NULL && *p != '\0') + SAFECOPY(sound->answer, value); + + if((p = iniGetString(list, section, strLoginSound, defaults->login, value)) != NULL && *p != '\0') + SAFECOPY(sound->login, value); + + if((p = iniGetString(list, section, strLogoutSound, defaults->logout, value)) != NULL && *p != '\0') + SAFECOPY(sound->logout, value); + + if((p = iniGetString(list, section, strHangupSound, defaults->hangup, value)) != NULL && *p != '\0') + SAFECOPY(sound->hangup, value); + + if((p = iniGetString(list, section, strHackAttemptSound, defaults->hack, value)) != NULL && *p != '\0') + SAFECOPY(sound->hack, value); +} + +BOOL sbbs_set_sound_settings( + str_list_t* lp + ,const char* section + ,struct startup_sound_settings* sound + ,struct startup_sound_settings* defaults + ,ini_style_t* style) +{ + if(!iniSetStringWithGlobalDefault(lp ,section, strAnswerSound, sound->answer, defaults->answer, style)) + return FALSE; + if(!iniSetStringWithGlobalDefault(lp, section, strLoginSound, sound->login, defaults->login, style)) + return FALSE; + if(!iniSetStringWithGlobalDefault(lp, section, strLogoutSound, sound->logout, defaults->logout, style)) + return FALSE; + if(!iniSetStringWithGlobalDefault(lp, section, strHangupSound, sound->hangup, defaults->logout, style)) + return FALSE; + if(!iniSetStringWithGlobalDefault(lp, section, strHackAttemptSound, sound->hack, defaults->hack, style)) + return FALSE; + return TRUE; +} + static struct login_attempt_settings get_login_attempt_settings(str_list_t list, const char* section, global_startup_t* global) { struct login_attempt_settings settings; @@ -233,8 +287,8 @@ static void get_ini_globals(str_list_t list, global_startup_t* global) global->js.options = JAVASCRIPT_OPTIONS; SAFECOPY(global->js.load_path, JAVASCRIPT_LOAD_PATH); - /* Read .ini values here */ sbbs_get_js_settings(list, section, &global->js, &global->js); + sbbs_get_sound_settings(list, section, &global->sound, &global->sound); } @@ -388,10 +442,7 @@ void sbbs_read_ini( ,iniGetString(list,section,"DOSemuPath",default_dosemu_path,value)); #endif - SAFECOPY(bbs->answer_sound - ,iniGetString(list,section,strAnswerSound,nulstr,value)); - SAFECOPY(bbs->hangup_sound - ,iniGetString(list,section,strHangupSound,nulstr,value)); + sbbs_get_sound_settings(list, section, &bbs->sound, &global->sound); bbs->log_level =iniGetLogLevel(list,section,strLogLevel,global->log_level); @@ -452,12 +503,7 @@ void sbbs_read_ini( SAFECOPY(ftp->index_file_name ,iniGetString(list,section,"IndexFileName","00index",value)); - SAFECOPY(ftp->answer_sound - ,iniGetString(list,section,strAnswerSound,nulstr,value)); - SAFECOPY(ftp->hangup_sound - ,iniGetString(list,section,strHangupSound,nulstr,value)); - SAFECOPY(ftp->hack_sound - ,iniGetString(list,section,strHackAttemptSound,nulstr,value)); + sbbs_get_sound_settings(list, section, &ftp->sound, &global->sound); SAFECOPY(ftp->temp_dir ,iniGetString(list,section,strTempDirectory,global->temp_dir,value)); @@ -555,6 +601,7 @@ void sbbs_read_ini( ,iniGetString(list,section,"InboundSound",nulstr,value)); SAFECOPY(mail->outbound_sound ,iniGetString(list,section,"OutboundSound",nulstr,value)); + sbbs_get_sound_settings(list, section, &mail->sound, &global->sound); SAFECOPY(mail->newmail_notice ,iniGetString(list,section,"NewMailNotice","%.0s\1n\1mNew e-mail from \1h%s \1n<\1h%s\1n>\r\n", value)); @@ -607,10 +654,7 @@ void sbbs_read_ini( SAFECOPY(services->services_ini ,iniGetString(list, section, strIniFileName, "services.ini", value)); - SAFECOPY(services->answer_sound - ,iniGetString(list,section,strAnswerSound,nulstr,value)); - SAFECOPY(services->hangup_sound - ,iniGetString(list,section,strHangupSound,nulstr,value)); + sbbs_get_sound_settings(list, section, &services->sound, &global->sound); services->log_level =iniGetLogLevel(list,section,strLogLevel,global->log_level); @@ -683,12 +727,7 @@ void sbbs_read_ini( web->max_cgi_inactivity =iniGetShortInt(list,section,"MaxCgiInactivity",WEB_DEFAULT_MAX_CGI_INACTIVITY); /* seconds */ - SAFECOPY(web->answer_sound - ,iniGetString(list,section,strAnswerSound,nulstr,value)); - SAFECOPY(web->hangup_sound - ,iniGetString(list,section,strHangupSound,nulstr,value)); - SAFECOPY(web->hack_sound - ,iniGetString(list,section,strHackAttemptSound,nulstr,value)); + sbbs_get_sound_settings(list, section, &web->sound, &global->sound); web->log_level =iniGetLogLevel(list,section,strLogLevel,global->log_level); @@ -734,7 +773,7 @@ BOOL sbbs_write_ini( memset(&style, 0, sizeof(style)); style.key_prefix = "\t"; - style.section_separator = ""; +style.section_separator = ""; style.value_separator = " = "; style.bit_separator = " | "; @@ -859,9 +898,8 @@ BOOL sbbs_write_ini( break; #endif #endif - if(!iniSetString(lp,section,strAnswerSound,bbs->answer_sound,&style)) - break; - if(!iniSetString(lp,section,strHangupSound,bbs->hangup_sound,&style)) + + if(!sbbs_set_sound_settings(lp, section, &bbs->sound, &global->sound, &style)) break; if(!iniSetBitField(lp,section,strOptions,bbs_options,bbs->options,&style)) @@ -948,11 +986,7 @@ BOOL sbbs_write_ini( if(!iniSetString(lp,section,"IndexFileName",ftp->index_file_name,&style)) break; - if(!iniSetString(lp,section,strAnswerSound,ftp->answer_sound,&style)) - break; - if(!iniSetString(lp,section,strHangupSound,ftp->hangup_sound,&style)) - break; - if(!iniSetString(lp,section,strHackAttemptSound,ftp->hack_sound,&style)) + if(!sbbs_set_sound_settings(lp, section, &ftp->sound, &global->sound, &style)) break; if(!iniSetBitField(lp,section,strOptions,ftp_options,ftp->options,&style)) @@ -1069,6 +1103,10 @@ BOOL sbbs_write_ini( break; if(!iniSetString(lp,section,"OutboundSound",mail->outbound_sound,&style)) break; + + if(!sbbs_set_sound_settings(lp, section, &mail->sound, &global->sound, &style)) + break; + #if 0 if(!iniSetStringLiteral(lp,section,"NewMailNotice",mail->newmail_notice,&style)) break; @@ -1140,9 +1178,7 @@ BOOL sbbs_write_ini( else if(!iniSetString(lp,section,strTempDirectory,services->temp_dir,&style)) break; - if(!iniSetString(lp,section,strAnswerSound,services->answer_sound,&style)) - break; - if(!iniSetString(lp,section,strHangupSound,services->hangup_sound,&style)) + if(!sbbs_set_sound_settings(lp, section, &services->sound, &global->sound, &style)) break; if(!iniSetString(lp, section, strIniFileName, services->services_ini, &style)) @@ -1240,11 +1276,7 @@ BOOL sbbs_write_ini( if(!iniSetShortInt(lp,section,"MaxCgiInactivity",web->max_cgi_inactivity,&style)) break; - if(!iniSetString(lp,section,strAnswerSound,web->answer_sound,&style)) - break; - if(!iniSetString(lp,section,strHangupSound,web->hangup_sound,&style)) - break; - if(!iniSetString(lp,section,strHackAttemptSound,web->hack_sound,&style)) + if(!sbbs_set_sound_settings(lp, section, &web->sound, &global->sound, &style)) break; if(!iniSetBitField(lp,section,strOptions,web_options,web->options,&style)) diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c index 9b27f70719f72bc58749b3fcd995face3834ed31..30b5aa81dda88914d274b39168ba563ba62f2596 100644 --- a/src/sbbs3/services.c +++ b/src/sbbs3/services.c @@ -323,8 +323,13 @@ static void badlogin(SOCKET sock, char* prot, char* user, char* passwd, char* ho SAFEPRINTF(reason,"%s LOGIN", prot); count=loginFailure(startup->login_attempt_list, addr, prot, user, passwd); - if(startup->login_attempt.hack_threshold && count>=startup->login_attempt.hack_threshold) + if(startup->login_attempt.hack_threshold && count>=startup->login_attempt.hack_threshold) { hacklog(&scfg, reason, user, passwd, host, addr); +#ifdef _WIN32 + if(startup->sound.hack[0] && !(startup->options&BBS_OPT_MUTE)) + PlaySound(startup->sound.hack, NULL, SND_ASYNC|SND_FILENAME); +#endif + } if(startup->login_attempt.filter_threshold && count>=startup->login_attempt.filter_threshold) { inet_addrtop(addr, addr_ip, sizeof(addr_ip)); SAFEPRINTF(reason, "- TOO MANY CONSECUTIVE FAILED LOGIN ATTEMPTS (%lu)", count); @@ -454,6 +459,12 @@ js_login(JSContext *cx, uintN argc, jsval *arglist) JS_SET_RVAL(cx, arglist,BOOLEAN_TO_JSVAL(JS_TRUE)); +#ifdef _WIN32 + if(startup->sound.login[0] && !(startup->options&BBS_OPT_MUTE) + && !(service->options&BBS_OPT_MUTE)) + PlaySound(startup->sound.login, NULL, SND_ASYNC|SND_FILENAME); +#endif + return(JS_TRUE); } @@ -1176,6 +1187,12 @@ static void js_service_thread(void* arg) lprintf(LOG_INFO,"%04d %s Logging out %s" ,socket, service->protocol, service_client.user.alias); logoutuserdat(&scfg,&service_client.user,time(NULL),service_client.logintime); + +#ifdef _WIN32 + if(startup->sound.logout[0] && !(startup->options&BBS_OPT_MUTE) + && !(service->options&BBS_OPT_MUTE)) + PlaySound(startup->sound.logout, NULL, SND_ASYNC|SND_FILENAME); +#endif } FREE_AND_NULL(service_client.subscan); @@ -1183,9 +1200,9 @@ static void js_service_thread(void* arg) update_clients(); #ifdef _WIN32 - if(startup->hangup_sound[0] && !(startup->options&BBS_OPT_MUTE) + if(startup->sound.hangup[0] && !(startup->options&BBS_OPT_MUTE) && !(service->options&BBS_OPT_MUTE)) - PlaySound(startup->hangup_sound, NULL, SND_ASYNC|SND_FILENAME); + PlaySound(startup->sound.hangup, NULL, SND_ASYNC|SND_FILENAME); #endif thread_down(); @@ -1505,9 +1522,9 @@ static void native_service_thread(void* arg) update_clients(); #ifdef _WIN32 - if(startup->hangup_sound[0] && !(startup->options&BBS_OPT_MUTE) + if(startup->sound.hangup[0] && !(startup->options&BBS_OPT_MUTE) && !(service->options&BBS_OPT_MUTE)) - PlaySound(startup->hangup_sound, NULL, SND_ASYNC|SND_FILENAME); + PlaySound(startup->sound.hangup, NULL, SND_ASYNC|SND_FILENAME); #endif thread_down(); @@ -2275,9 +2292,9 @@ void services_thread(void* arg) } #ifdef _WIN32 - if(startup->answer_sound[0] && !(startup->options&BBS_OPT_MUTE) + if(startup->sound.answer[0] && !(startup->options&BBS_OPT_MUTE) && !(service[i].options&BBS_OPT_MUTE)) - PlaySound(startup->answer_sound, NULL, SND_ASYNC|SND_FILENAME); + PlaySound(startup->sound.answer, NULL, SND_ASYNC|SND_FILENAME); #endif if((client=malloc(sizeof(service_client_t)))==NULL) { diff --git a/src/sbbs3/services.h b/src/sbbs3/services.h index c26b0607fe8d87537fe1ab7e17501a4ad524b43f..62bd3680874c7bf5e473e8bb4ba41a48c8e4e7e6 100644 --- a/src/sbbs3/services.h +++ b/src/sbbs3/services.h @@ -48,11 +48,9 @@ typedef struct { BOOL (*setuid)(BOOL force); /* Paths */ - char ctrl_dir[128]; - char temp_dir[128]; - char answer_sound[128]; - char hangup_sound[128]; - char ini_fname[128]; // sbbs.ini path/filename + char ctrl_dir[INI_MAX_VALUE_LEN]; + char temp_dir[INI_MAX_VALUE_LEN]; + char ini_fname[INI_MAX_VALUE_LEN]; // sbbs.ini path/filename char services_ini[128]; // services.ini filename /* Misc */ @@ -63,6 +61,8 @@ typedef struct { uint bind_retry_count; /* Number of times to retry bind() calls */ uint bind_retry_delay; /* Time to wait between each bind() retry */ + struct startup_sound_settings sound; + /* JavaScript operating parameters */ js_startup_t js; diff --git a/src/sbbs3/startup.h b/src/sbbs3/startup.h index 165bc8cbd7ba4c35f7bea72cae71134a03cc0603..a4365ce55ab57be737b2421acb6d284798a0a171 100644 --- a/src/sbbs3/startup.h +++ b/src/sbbs3/startup.h @@ -52,6 +52,14 @@ struct login_attempt_settings { ulong filter_threshold; }; +struct startup_sound_settings { + char answer[INI_MAX_VALUE_LEN]; + char login[INI_MAX_VALUE_LEN]; + char logout[INI_MAX_VALUE_LEN]; + char hangup[INI_MAX_VALUE_LEN]; + char hack[INI_MAX_VALUE_LEN]; +}; + typedef struct { char ctrl_dir[INI_MAX_VALUE_LEN]; @@ -66,6 +74,7 @@ typedef struct { uint bind_retry_count; /* Number of times to retry bind() calls */ uint bind_retry_delay; /* Time to wait between each bind() retry */ struct login_attempt_settings login_attempt; + struct startup_sound_settings sound; } global_startup_t; @@ -112,13 +121,11 @@ typedef struct { BOOL (*setuid)(BOOL force); /* Paths */ - char ctrl_dir[128]; - char dosemu_path[128]; - char dosemuconf_path[128]; - char temp_dir[128]; - char answer_sound[128]; - char hangup_sound[128]; - char ini_fname[128]; + char ctrl_dir[INI_MAX_VALUE_LEN]; + char dosemu_path[INI_MAX_VALUE_LEN]; + char dosemuconf_path[INI_MAX_VALUE_LEN]; + char temp_dir[INI_MAX_VALUE_LEN]; + char ini_fname[INI_MAX_VALUE_LEN]; /* Miscellaneous */ BOOL usedosemu; @@ -134,6 +141,7 @@ typedef struct { /* JavaScript operating parameters */ js_startup_t js; + struct startup_sound_settings sound; struct login_attempt_settings login_attempt; link_list_t* login_attempt_list; uint max_concurrent_connections; diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c index 5fbe1a92387885dfc94e4bb365e85c6e647a3dbc..1674fed09d3d9f2c66fd8611cd4beadb72b3c795 100644 --- a/src/sbbs3/websrvr.c +++ b/src/sbbs3/websrvr.c @@ -1617,6 +1617,11 @@ void http_logoff(http_session_t* session, SOCKET socket, int line) lprintf(LOG_ERR,"%04d !ERROR in logoutuserdat", socket); memset(&session->user,0,sizeof(session->user)); session->last_user_num=session->user.number; + +#ifdef _WIN32 + if(startup->sound.logout[0] && !(startup->options&BBS_OPT_MUTE)) + PlaySound(startup->sound.logout, NULL, SND_ASYNC|SND_FILENAME); +#endif } BOOL http_checkuser(http_session_t * session) @@ -1842,8 +1847,8 @@ static void badlogin(SOCKET sock, const char* prot, const char* user, const char if(startup->login_attempt.hack_threshold && count>=startup->login_attempt.hack_threshold) { hacklog(&scfg, reason, user, passwd, host, addr); #ifdef _WIN32 - if(startup->hack_sound[0] && !(startup->options&BBS_OPT_MUTE)) - PlaySound(startup->hack_sound, NULL, SND_ASYNC|SND_FILENAME); + if(startup->sound.hack[0] && !(startup->options&BBS_OPT_MUTE)) + PlaySound(startup->sound.hack, NULL, SND_ASYNC|SND_FILENAME); #endif } if(startup->login_attempt.filter_threshold && count>=startup->login_attempt.filter_threshold) { @@ -2010,8 +2015,8 @@ static BOOL check_ars(http_session_t * session) ,session->socket,session->req.auth.username,session->req.ars); #ifdef _WIN32 - if(startup->hack_sound[0] && !(startup->options&BBS_OPT_MUTE)) - PlaySound(startup->hack_sound, NULL, SND_ASYNC|SND_FILENAME); + if(startup->sound.hack[0] && !(startup->options&BBS_OPT_MUTE)) + PlaySound(startup->sound.hack, NULL, SND_ASYNC|SND_FILENAME); #endif return(FALSE); @@ -5441,6 +5446,11 @@ js_login(JSContext *cx, uintN argc, jsval *arglist) JS_SET_RVAL(cx, arglist,BOOLEAN_TO_JSVAL(JS_TRUE)); +#ifdef _WIN32 + if(startup->sound.login[0] && !(startup->options&BBS_OPT_MUTE)) + PlaySound(startup->sound.login, NULL, SND_ASYNC|SND_FILENAME); +#endif + return(JS_TRUE); } @@ -6373,8 +6383,8 @@ void http_session_thread(void* arg) lprintf(LOG_DEBUG,"%04d !!! DANGER WILL ROBINSON, DANGER !!!", session.socket); #ifdef _WIN32 - if(startup->answer_sound[0] && !(startup->options&BBS_OPT_MUTE)) - PlaySound(startup->answer_sound, NULL, SND_ASYNC|SND_FILENAME); + if(startup->sound.answer[0] && !(startup->options&BBS_OPT_MUTE)) + PlaySound(startup->sound.answer, NULL, SND_ASYNC|SND_FILENAME); #endif session.finished=FALSE; @@ -6611,8 +6621,8 @@ void http_session_thread(void* arg) } #ifdef _WIN32 - if(startup->hangup_sound[0] && !(startup->options&BBS_OPT_MUTE)) - PlaySound(startup->hangup_sound, NULL, SND_ASYNC|SND_FILENAME); + if(startup->sound.hangup[0] && !(startup->options&BBS_OPT_MUTE)) + PlaySound(startup->sound.hangup, NULL, SND_ASYNC|SND_FILENAME); #endif close_session_socket(&session); diff --git a/src/sbbs3/websrvr.h b/src/sbbs3/websrvr.h index 70dd1861acccbf835181c43fd5a5b8c51fd98dca..ea2b63e017612d0e10e2a96bf471a1943a1c133d 100644 --- a/src/sbbs3/websrvr.h +++ b/src/sbbs3/websrvr.h @@ -58,19 +58,16 @@ typedef struct { BOOL (*setuid)(BOOL); /* Paths */ - char ssjs_ext[16]; /* Server-Side JavaScript file extension */ - char** cgi_ext; /* CGI Extensions */ - char cgi_dir[128]; /* relative to root_dir (all files executable) */ - char ctrl_dir[128]; - char root_dir[128]; /* HTML root directory */ - char error_dir[128]; /* relative to root_dir */ - char temp_dir[128]; - char** index_file_name; /* Index filenames */ - char logfile_base[128]; /* Logfile base name (date is appended) */ - char answer_sound[128]; - char hangup_sound[128]; - char hack_sound[128]; - char ini_fname[128]; + char ssjs_ext[16]; /* Server-Side JavaScript file extension */ + char** cgi_ext; /* CGI Extensions */ + char cgi_dir[INI_MAX_VALUE_LEN]; /* relative to root_dir (all files executable) */ + char ctrl_dir[INI_MAX_VALUE_LEN]; + char root_dir[INI_MAX_VALUE_LEN]; /* HTML root directory */ + char error_dir[INI_MAX_VALUE_LEN]; /* relative to root_dir */ + char temp_dir[INI_MAX_VALUE_LEN]; + char** index_file_name; /* Index filenames */ + char logfile_base[INI_MAX_VALUE_LEN]; /* Logfile base name (date is appended) */ + char ini_fname[INI_MAX_VALUE_LEN]; /* Misc */ char host_name[128]; @@ -84,6 +81,8 @@ typedef struct { char default_auth_list[128]; uint16_t outbuf_drain_timeout; + struct startup_sound_settings sound; + /* JavaScript operating parameters */ js_startup_t js; diff --git a/src/sbbs3/xtrn_sec.cpp b/src/sbbs3/xtrn_sec.cpp index b36266b572920e2c331ff7878e49aaa8999c43f1..92f66027238a60cad69f7de374bdfed2acd13e41 100644 --- a/src/sbbs3/xtrn_sec.cpp +++ b/src/sbbs3/xtrn_sec.cpp @@ -799,7 +799,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl ,-1 /* Display on/off */ ,0 /* Printer on/off */ ,sys_status&SS_SYSPAGE ? -1:0 /* Page Bell on/off */ - ,startup->answer_sound[0] ? -1:0 /* Caller Alarm on/off */ + ,startup->sound.answer[0] ? -1:0 /* Caller Alarm on/off */ ,' ' /* Sysop next flag */ ,0 /* Error corrected */ ,(term & NO_EXASCII) ? '7' /* Graphics mode */