Daemon mode support in Unix platforms

This commit is contained in:
mysticbbs 2012-06-20 10:07:29 -04:00
parent cb9342698b
commit 96d35e9af6
1 changed files with 84 additions and 75 deletions

View File

@ -335,6 +335,64 @@ Begin
SwitchFocus; SwitchFocus;
End; End;
Function ServerStartup : Boolean;
Begin
Result := False;
ReadConfiguration;
TelnetServer := NIL;
FTPServer := NIL;
POP3Server := NIL;
NNTPServer := NIL;
NodeData := TNodeData.Create(bbsConfig.INetTNNodes);
If bbsConfig.InetTNUse Then Begin
TelnetServer := TServerManager.Create(bbsConfig, bbsConfig.InetTNPort, bbsConfig.INetTNNodes, NodeData, @CreateTelnet);
TelnetServer.Server.FTelnetServer := True;
TelnetServer.ClientMaxIPs := bbsConfig.InetTNDupes;
Result := True;
End;
If bbsConfig.InetSMTPUse Then Begin
SMTPServer := TServerManager.Create(bbsConfig, bbsConfig.INetSMTPPort, bbsConfig.inetSMTPMax, NodeData, @CreateSMTP);
SMTPServer.Server.FTelnetServer := False;
SMTPServer.ClientMaxIPs := bbsConfig.INetSMTPDupes;
Result := True;
End;
If bbsConfig.InetPOP3Use Then Begin
POP3Server := TServerManager.Create(bbsConfig, bbsConfig.INetPOP3Port, bbsConfig.inetPOP3Max, NodeData, @CreatePOP3);
POP3Server.Server.FTelnetServer := False;
POP3Server.ClientMaxIPs := bbsConfig.inetPOP3Dupes;
Result := True;
End;
If bbsConfig.InetFTPUse Then Begin
FTPServer := TServerManager.Create(bbsConfig, bbsConfig.InetFTPPort, bbsConfig.inetFTPMax, NodeData, @CreateFTP);
FTPServer.Server.FTelnetServer := False;
FTPServer.ClientMaxIPs := bbsConfig.inetFTPDupes;
Result := True;
End;
If bbsConfig.InetNNTPUse Then Begin
NNTPServer := TServerManager.Create(bbsConfig, bbsConfig.InetNNTPPort, bbsConfig.inetNNTPMax, NodeData, @CreateNNTP);
NNTPServer.Server.FTelnetServer := False;
NNTPServer.ClientMaxIPs := bbsConfig.inetNNTPDupes;
Result := True;
End;
End;
{$IFDEF UNIX} {$IFDEF UNIX}
Procedure Snoop; Procedure Snoop;
Begin Begin
@ -360,10 +418,13 @@ Begin
Term.Free; Term.Free;
Console.TextAttr := 7; Console.TextAttr := 7;
Console.SetWindow (1, 1, 80, 25, True); Console.SetWindow (1, 1, 80, 25, True);
FocusCurrent := FocusMax; FocusCurrent := FocusMax;
DrawStatusScreen; DrawStatusScreen;
SwitchFocus; SwitchFocus;
End; End;
End; End;
@ -372,8 +433,9 @@ Procedure ExecuteDaemon;
Var Var
PID : TPID; PID : TPID;
SID : TPID; SID : TPID;
offset:longint;
Begin Begin
WriteLn('- Executing Mystic Internet Server in daemon mode');
PID := fpFork; PID := fpFork;
If PID < 0 Then Halt(1); If PID < 0 Then Halt(1);
@ -385,10 +447,15 @@ Begin
Close (Input); Close (Input);
Close (Output); Close (Output);
//CLOSE STDERR //CLOSE STDERR?
If Not ServerStartup Then Begin
NodeData.Free;
Halt(1);
End;
Repeat Repeat
WaitMS(60000); WaitMS(60000); // Heartbeat
Until False; Until False;
End; End;
{$ENDIF} {$ENDIF}
@ -410,73 +477,19 @@ Begin
SetHeapTraceOutput('mis.mem'); SetHeapTraceOutput('mis.mem');
{$ENDIF} {$ENDIF}
ReadConfiguration; {$IFDEF UNIX}
If DaemonMode Then ExecuteDaemon;
{$ENDIF}
TelnetServer := NIL;
FTPServer := NIL;
POP3Server := NIL;
Started := False;
NodeData := TNodeData.Create(bbsConfig.INetTNNodes);
If Not DaemonMode Then Begin
Console := TOutput.Create(True); Console := TOutput.Create(True);
Keyboard := TInput.Create; Keyboard := TInput.Create;
Console.SetWindowTitle(WinTitle); Console.SetWindowTitle(WinTitle);
End;
If bbsConfig.InetTNUse Then Begin If Not ServerStartup Then Begin
TelnetServer := TServerManager.Create(bbsConfig, bbsConfig.InetTNPort, bbsConfig.INetTNNodes, NodeData, @CreateTelnet);
TelnetServer.Server.FTelnetServer := True;
TelnetServer.ClientMaxIPs := bbsConfig.InetTNDupes;
Started := True;
End;
If bbsConfig.InetSMTPUse Then Begin
SMTPServer := TServerManager.Create(bbsConfig, bbsConfig.INetSMTPPort, bbsConfig.inetSMTPMax, NodeData, @CreateSMTP);
SMTPServer.Server.FTelnetServer := False;
SMTPServer.ClientMaxIPs := bbsConfig.INetSMTPDupes;
Started := True;
End;
If bbsConfig.InetPOP3Use Then Begin
POP3Server := TServerManager.Create(bbsConfig, bbsConfig.INetPOP3Port, bbsConfig.inetPOP3Max, NodeData, @CreatePOP3);
POP3Server.Server.FTelnetServer := False;
POP3Server.ClientMaxIPs := bbsConfig.inetPOP3Dupes;
Started := True;
End;
If bbsConfig.InetFTPUse Then Begin
FTPServer := TServerManager.Create(bbsConfig, bbsConfig.InetFTPPort, bbsConfig.inetFTPMax, NodeData, @CreateFTP);
FTPServer.Server.FTelnetServer := False;
FTPServer.ClientMaxIPs := bbsConfig.inetFTPDupes;
Started := True;
End;
If bbsConfig.InetNNTPUse Then Begin
NNTPServer := TServerManager.Create(bbsConfig, bbsConfig.InetNNTPPort, bbsConfig.inetNNTPMax, NodeData, @CreateNNTP);
NNTPServer.Server.FTelnetServer := False;
NNTPServer.ClientMaxIPs := bbsConfig.inetNNTPDupes;
Started := True;
End;
If Not Started Then Begin
If Not DaemonMode Then Begin
Console.ClearScreen; Console.ClearScreen;
Console.WriteLine('ERROR: No servers are configured as active. Run MYSTIC -CFG to configure'); Console.WriteLine('ERROR: No servers are configured as active. Run MYSTIC -CFG to configure');
Console.WriteLine('Internet server options.'); Console.WriteLine('Internet server options.');
End;
NodeData.Free; NodeData.Free;
Keyboard.Free; Keyboard.Free;
@ -487,15 +500,11 @@ Begin
Count := 0; Count := 0;
If Not DaemonMode Then Begin
DrawStatusScreen; DrawStatusScreen;
FocusCurrent := FocusMax;
SwitchFocus;
End;
{$IFDEF UNIX} FocusCurrent := FocusMax;
If DaemonMode Then ExecuteDaemon;
{$ENDIF} SwitchFocus;
Repeat Repeat
If Keyboard.KeyWait(500) Then If Keyboard.KeyWait(500) Then