From 74a092bd05b93623f700bba8b455d7bc1e1052f7 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Thu, 21 Oct 2004 03:29:23 +0000
Subject: [PATCH] Added recycle callback for dynamic re-loading of startup .ini
 file (sbbs.ini) on server recycles. Removed FormVisible options (don't work
 yet). Eliminated legacy registry settings (moved to sbbs.ini). Don't import
 the legacy registry settings if the SysAutoStart registry value doesn't exist
 (i.e. fresh install).

---
 src/sbbs3/ctrl/MainFormUnit.cpp | 153 +++++++++++---------------------
 1 file changed, 52 insertions(+), 101 deletions(-)

diff --git a/src/sbbs3/ctrl/MainFormUnit.cpp b/src/sbbs3/ctrl/MainFormUnit.cpp
index 75e619971b..1b7101cc9b 100644
--- a/src/sbbs3/ctrl/MainFormUnit.cpp
+++ b/src/sbbs3/ctrl/MainFormUnit.cpp
@@ -746,7 +746,47 @@ static void web_start(void)
     Application->ProcessMessages();
 }
 //---------------------------------------------------------------------------
+/* Server recycle callback (read relevant startup .ini file section)		*/
+static void recycle(void* cbdata)
+{
+    char            str[MAX_PATH*2];
+    FILE*           fp=NULL;
+	bbs_startup_t*  bbs=NULL;
+	ftp_startup_t*  ftp=NULL;
+	web_startup_t*  web=NULL;
+	mail_startup_t* mail=NULL;
+	services_startup_t* services=NULL;
+
+    SAFEPRINTF(str,"Reading %s",MainForm->ini_file);
+	if(cbdata==(void*)&MainForm->bbs_startup) {
+		bbs=&MainForm->bbs_startup;
+        bbs_lputs(cbdata,LOG_INFO,str);
+	} else if(cbdata==(void*)&MainForm->ftp_startup) {
+		ftp=&MainForm->ftp_startup;
+        ftp_lputs(cbdata,LOG_INFO,str);
+    } else if(cbdata==(void*)&MainForm->web_startup) {
+		web=&MainForm->web_startup;
+        web_lputs(cbdata,LOG_INFO,str);
+    } else if(cbdata==(void*)&MainForm->mail_startup) {
+		mail=&MainForm->mail_startup;
+        mail_lputs(cbdata,LOG_INFO,str);
+	} else if(cbdata==(void*)&MainForm->services_startup) {
+		services=&MainForm->services_startup;
+        service_lputs(cbdata,LOG_INFO,str);
+    }
 
+    fp=fopen(MainForm->ini_file,"r");
+    sbbs_read_ini(fp
+        ,&MainForm->global
+        ,NULL   ,bbs
+        ,NULL   ,ftp
+        ,NULL   ,web
+        ,NULL   ,mail
+        ,NULL   ,services
+        );
+    if(fp!=NULL)
+        fclose(fp);
+}
 //---------------------------------------------------------------------------
 __fastcall TMainForm::TMainForm(TComponent* Owner)
         : TForm(Owner)
@@ -789,6 +829,7 @@ __fastcall TMainForm::TMainForm(TComponent* Owner)
     bbs_startup.status=bbs_status;
     bbs_startup.clients=bbs_clients;
     bbs_startup.started=bbs_started;
+    bbs_startup.recycle=recycle;
     bbs_startup.terminated=bbs_terminated;
     bbs_startup.thread_up=thread_up;
     bbs_startup.client_on=client_on;
@@ -806,6 +847,7 @@ __fastcall TMainForm::TMainForm(TComponent* Owner)
     mail_startup.status=mail_status;
     mail_startup.clients=mail_clients;
     mail_startup.started=mail_started;
+    mail_startup.recycle=recycle;
     mail_startup.terminated=mail_terminated;
     mail_startup.options=MAIL_OPT_ALLOW_POP3;
     mail_startup.thread_up=thread_up;
@@ -826,6 +868,7 @@ __fastcall TMainForm::TMainForm(TComponent* Owner)
     ftp_startup.status=ftp_status;
     ftp_startup.clients=ftp_clients;
     ftp_startup.started=ftp_started;
+    ftp_startup.recycle=recycle;
     ftp_startup.terminated=ftp_terminated;
     ftp_startup.thread_up=thread_up;
     ftp_startup.client_on=client_on;
@@ -844,6 +887,7 @@ __fastcall TMainForm::TMainForm(TComponent* Owner)
     web_startup.status=web_status;
     web_startup.clients=web_clients;
     web_startup.started=web_started;
+    web_startup.recycle=recycle;
     web_startup.terminated=web_terminated;
     web_startup.thread_up=thread_up;
     web_startup.client_on=client_on;
@@ -857,6 +901,7 @@ __fastcall TMainForm::TMainForm(TComponent* Owner)
     services_startup.status=services_status;
     services_startup.clients=services_clients;
     services_startup.started=services_started;
+    services_startup.recycle=recycle;    
     services_startup.terminated=services_terminated;
     services_startup.thread_up=thread_up;
     services_startup.client_on=client_on;
@@ -1545,6 +1590,7 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender)
     int		FtpFormPage=PAGE_LOWERRIGHT;
     int		WebFormPage=PAGE_LOWERRIGHT;
     int     ServicesFormPage=PAGE_LOWERRIGHT;
+#if 0   /* not yet working */
     bool	TelnetFormVisible=true;
     bool	EventsFormVisible=true;
     bool	ServicesFormVisible=true;
@@ -1554,7 +1600,7 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender)
     bool 	MailFormVisible=true;
     bool	FtpFormVisible=true;
     bool	WebFormVisible=true;
-
+#endif
 
     AnsiString	Str;
 
@@ -1604,7 +1650,7 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender)
         if(Registry->ValueExists("WebFormFloating"))
             WebFormFloating=Registry->ReadBool("WebFormFloating");
     }
-
+#if 0
     if(Registry->ValueExists("TelnetFormVisible"))
         TelnetFormVisible=Registry->ReadBool("TelnetFormVisible");
     if(Registry->ValueExists("EventsFormVisible"))
@@ -1623,7 +1669,7 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender)
         FtpFormVisible=Registry->ReadBool("FtpFormVisible");
     if(Registry->ValueExists("WebFormVisible"))
         WebFormVisible=Registry->ReadBool("WebFormVisible");
-
+#endif
     if(Registry->ValueExists("TelnetFormPage"))
     	TelnetFormPage=Registry->ReadInteger("TelnetFormPage");
     if(Registry->ValueExists("EventsFormPage"))
@@ -1784,8 +1830,8 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender)
     	FtpLogFile=true;
 
     FILE* fp;
-    if(Registry->ValueExists("Imported")
-        && Registry->ReadBool("Imported")
+    if((!Registry->ValueExists("SysAutoStart")
+        || (Registry->ValueExists("Imported") && Registry->ReadBool("Imported")))
         && ini_file[0]) {
         if((fp=fopen(ini_file,"r"))==NULL) {
             char err[MAX_PATH*2];
@@ -2327,105 +2373,10 @@ void __fastcall TMainForm::SaveRegistrySettings(TObject* Sender)
     Registry->WriteString("ConfigCommand",ConfigCommand);
     Registry->WriteString("Password",Password);
     Registry->WriteBool("MinimizeToSysTray",MinimizeToSysTray);
-    Registry->WriteBool("UseFileAssociations",UseFileAssociations);    
+    Registry->WriteBool("UseFileAssociations",UseFileAssociations);
     Registry->WriteInteger("NodeDisplayInterval",NodeForm->Timer->Interval/1000);
     Registry->WriteInteger("ClientDisplayInterval",ClientForm->Timer->Interval/1000);
 
-#if 0   /* Moved to sbbs.ini */
-    Registry->WriteString("Hostname",global.host_name);
-    Registry->WriteString("CtrlDirectory",global.ctrl_dir);
-    Registry->WriteString("TempDirectory",global.temp_dir);
-
-    /* JavaScript Operating Parameters */
-    Registry->WriteInteger("JS_MaxBytes",global.js.max_bytes);
-    Registry->WriteInteger("JS_ContextStack",global.js.cx_stack);
-    Registry->WriteInteger("JS_BranchLimit",global.js.branch_limit);
-    Registry->WriteInteger("JS_GcInterval",global.js.gc_interval);
-    Registry->WriteInteger("JS_YieldInterval",global.js.yield_interval);
-
-    Registry->WriteInteger("SemFileCheckFrequency",global.sem_chk_freq);
-
-    Registry->WriteInteger("SysAutoStart",SysAutoStart);
-    Registry->WriteInteger("MailAutoStart",MailAutoStart);
-    Registry->WriteInteger("FtpAutoStart",FtpAutoStart);
-    Registry->WriteInteger("WebAutoStart",WebAutoStart);    
-    Registry->WriteInteger("ServicesAutoStart",ServicesAutoStart);
-    Registry->WriteInteger("MailLogFile",MailLogFile);
-    Registry->WriteInteger("FtpLogFile",FtpLogFile);
-
-    Registry->WriteInteger("TelnetInterface",bbs_startup.telnet_interface);
-    Registry->WriteInteger("RLoginInterface",bbs_startup.rlogin_interface);
-
-	Registry->WriteInteger("TelnetPort",bbs_startup.telnet_port);
-	Registry->WriteInteger("RLoginPort",bbs_startup.rlogin_port);
-    Registry->WriteInteger("FirstNode",bbs_startup.first_node);
-    Registry->WriteInteger("LastNode",bbs_startup.last_node);
-
-    Registry->WriteInteger("ExternalYield",bbs_startup.xtrn_polls_before_yield);
-    Registry->WriteString("AnswerSound",AnsiString(bbs_startup.answer_sound));
-    Registry->WriteString("HangupSound",AnsiString(bbs_startup.hangup_sound));
-
-    Registry->WriteInteger("StartupOptions",bbs_startup.options);
-
-    Registry->WriteInteger("MailMaxClients",mail_startup.max_clients);
-    Registry->WriteInteger("MailMaxInactivity",mail_startup.max_inactivity);
-    Registry->WriteInteger("MailInterface",mail_startup.interface_addr);
-    Registry->WriteInteger("MailMaxDeliveryAttempts"
-        ,mail_startup.max_delivery_attempts);
-    Registry->WriteInteger("MailRescanFrequency"
-        ,mail_startup.rescan_frequency);
-    Registry->WriteInteger("MailMaxRecipients"
-        ,mail_startup.max_recipients);
-    Registry->WriteInteger("MailMaxMsgSize"
-        ,mail_startup.max_msg_size);
-    Registry->WriteInteger("MailLinesPerYield"
-        ,mail_startup.lines_per_yield);
-
-    Registry->WriteInteger("MailSMTPPort",mail_startup.smtp_port);
-    Registry->WriteInteger("MailPOP3Port",mail_startup.pop3_port);
-
-    Registry->WriteString("MailDefaultUser",mail_startup.default_user);
-	Registry->WriteString("MailDNSBlacklistHeader",mail_startup.dnsbl_hdr);
-	Registry->WriteString("MailDNSBlacklistSubject",mail_startup.dnsbl_tag);
-
-    Registry->WriteString("MailRelayServer",mail_startup.relay_server);
-    Registry->WriteInteger("MailRelayPort",mail_startup.relay_port);
-    Registry->WriteString("MailDNSServer",mail_startup.dns_server);
-
-    Registry->WriteString("MailInboundSound",AnsiString(mail_startup.inbound_sound));
-    Registry->WriteString("MailOutboundSound",AnsiString(mail_startup.outbound_sound));
-    Registry->WriteInteger("MailOptions",mail_startup.options);
-
-    Registry->WriteString("MailPOP3Sound",AnsiString(mail_startup.pop3_sound));
-
-	Registry->WriteInteger("FtpPort",ftp_startup.port);
-    Registry->WriteInteger("FtpMaxClients",ftp_startup.max_clients);
-    Registry->WriteInteger("FtpMaxInactivity",ftp_startup.max_inactivity);
-    Registry->WriteInteger("FtpQwkTimeout",ftp_startup.qwk_timeout);
-    Registry->WriteInteger("FtpInterface",ftp_startup.interface_addr);
-    Registry->WriteString("FtpAnswerSound",AnsiString(ftp_startup.answer_sound));
-    Registry->WriteString("FtpHangupSound",AnsiString(ftp_startup.hangup_sound));
-    Registry->WriteString("FtpHackAttemptSound",AnsiString(ftp_startup.hack_sound));
-
-    Registry->WriteString("FtpIndexFileName"
-    	,AnsiString(ftp_startup.index_file_name));
-    Registry->WriteString("FtpHtmlIndexFile"
-    	,AnsiString(ftp_startup.html_index_file));
-    Registry->WriteString("FtpHtmlIndexScript"
-    	,AnsiString(ftp_startup.html_index_script));
-
-    Registry->WriteInteger("FtpOptions",ftp_startup.options);
-
-    Registry->WriteInteger("ServicesInterface",services_startup.interface_addr);
-
-    Registry->WriteString("ServicesAnswerSound"
-        ,AnsiString(services_startup.answer_sound));
-    Registry->WriteString("ServicesHangupSound"
-        ,AnsiString(services_startup.hangup_sound));
-
-    Registry->WriteInteger("ServicesOptions",services_startup.options);
-#endif  /* End of options moved to sbbs.ini */
-
 	Registry->WriteInteger( "SpyTerminalWidth"
                             ,SpyTerminalWidth);
 	Registry->WriteInteger( "SpyTerminalHeight"
-- 
GitLab