Listen on user-specified addresses
[mgsmtp.git] / Common.pas
index 76926728bcbeddd3042f36a2bca0ff8be1e73b50..fadccc59f8b17f0ca294d84740c7af03e946d546 100644 (file)
@@ -1,5 +1,5 @@
 {
-   Copyright (C) 2010-2015 MegaBrutal
+   Copyright (C) 2010-2018 MegaBrutal
 
    This unit is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
@@ -73,10 +73,10 @@ type
       {FTimeCorrection: integer;}
       FTimeOffset: integer;
       FTimeOffsetStr: string;
-      FListenPorts: TStrings;
+      FListenAddresses: TStrings;
    public
       function GetVersionStr: string;
-      property ListenPorts: TStrings read FListenPorts;
+      property ListenAddresses: TStrings read FListenAddresses;
       property Databytes: longint read FDatabytes;
       {property TimeCorrection: integer read FTimeCorrection;}
       property TimeOffset: integer read FTimeOffset;
@@ -465,14 +465,25 @@ begin
 end;
 
 constructor TMainServerConfig.Create(Config: TINIFile);
+var i: integer; rawaddresslist: string; portlist: TStringList;
 begin
    inherited Create(Config.ReadString('Server', 'Name', ''), Config, 'Server');
-   FListenPorts:= TStringList.Create;
-   FListenPorts.Delimiter:= ',';
-   FListenPorts.DelimitedText:= Config.ReadString('Server', 'ListenPort', '25');
+   FListenAddresses:= TStringList.Create;
+   FListenAddresses.Delimiter:= ',';
+
+   rawaddresslist:= Config.ReadString('Server', 'ListenAddress', '');
+   if rawaddresslist <> '' then
+      FListenAddresses.DelimitedText:= rawaddresslist
+   else begin
+      portlist:= TStringList.Create;
+      portlist.Delimiter:= ',';
+      portlist.DelimitedText:= Config.ReadString('Server', 'ListenPort', '25');
+      for i:= 0 to portlist.Count - 1 do
+         FListenAddresses.Add('0.0.0.0:' + portlist.Strings[i]);
+      portlist.Free;
+   end;
 
    FDatabytes:=      Config.ReadInteger('Server', 'Databytes', 1024 * 1024 * 1024);
-   {FTimeCorrection:= Config.ReadInteger('Server', 'TimeCorrection', 0);}
    FTimeOffset:=     Config.ReadInteger('Server', 'TimeOffset', Config.ReadInteger('Server', 'TimeCorrection', 0) * 100);
    FTimeOffsetStr:=  MakeTimeOffsetStr(FTimeOffset);