Updates
This commit is contained in:
parent
cd4983db0b
commit
cee65a7621
|
@ -166,7 +166,10 @@ Begin
|
||||||
Case Form.Execute of
|
Case Form.Execute of
|
||||||
'D' : MBase.NetAddr := Configuration_EchoMailAddress(False);
|
'D' : MBase.NetAddr := Configuration_EchoMailAddress(False);
|
||||||
'7' : Configuration_NodeExport (MBase);
|
'7' : Configuration_NodeExport (MBase);
|
||||||
#27 : Break;
|
#27 : If (MBase.NetType > 0) And (MBase.EchoTag = '') And (MBase.NetType <> 3) Then
|
||||||
|
ShowMsgBox(0, 'Echo base requires echotag')
|
||||||
|
Else
|
||||||
|
Break;
|
||||||
End;
|
End;
|
||||||
Until False;
|
Until False;
|
||||||
|
|
||||||
|
|
|
@ -276,13 +276,14 @@ Begin
|
||||||
|
|
||||||
Box.Header := ' Internet Servers ';
|
Box.Header := ' Internet Servers ';
|
||||||
|
|
||||||
Box.Open (16, 9, 64, 15);
|
Box.Open (16, 9, 64, 16);
|
||||||
|
|
||||||
VerticalLine (31, 11, 13);
|
VerticalLine (31, 11, 14);
|
||||||
|
|
||||||
Form.AddStr ('D', ' Domain', 23, 11, 33, 11, 8, 25, 25, @Config.inetDomain, Topic + 'Internet domain name');
|
Form.AddStr ('D', ' Domain', 23, 11, 33, 11, 8, 25, 25, @Config.inetDomain, Topic + 'Internet domain name');
|
||||||
Form.AddBol ('B', ' IP Blocking', 18, 12, 33, 12, 13, 3, @Config.inetIPBlocking, Topic + 'Enable IP blocking');
|
Form.AddStr ('I', ' Interface', 20, 12, 33, 12, 11, 23, 23, @Config.inetInterface, Topic + 'Network interface IP address');
|
||||||
Form.AddBol ('L', ' IP Logging', 19, 13, 33, 13, 12, 3, @Config.inetIPLogging, Topic + 'Enable IP logging');
|
Form.AddBol ('B', ' IP Blocking', 18, 13, 33, 13, 13, 3, @Config.inetIPBlocking, Topic + 'Enable IP blocking');
|
||||||
|
Form.AddBol ('L', ' IP Logging', 19, 14, 33, 14, 12, 3, @Config.inetIPLogging, Topic + 'Enable IP logging');
|
||||||
|
|
||||||
Form.Execute;
|
Form.Execute;
|
||||||
|
|
||||||
|
|
|
@ -925,7 +925,6 @@ Var
|
||||||
|
|
||||||
Var
|
Var
|
||||||
Ch : Char;
|
Ch : Char;
|
||||||
Added : Boolean;
|
|
||||||
QWinSize : Byte;
|
QWinSize : Byte;
|
||||||
QWinDataPos : Byte;
|
QWinDataPos : Byte;
|
||||||
QWinData : Array[1..15] of String[79];
|
QWinData : Array[1..15] of String[79];
|
||||||
|
@ -963,8 +962,6 @@ Var
|
||||||
Var
|
Var
|
||||||
Temp : Integer;
|
Temp : Integer;
|
||||||
Begin
|
Begin
|
||||||
Added := False;
|
|
||||||
|
|
||||||
Assign (InFile, Session.TempPath + 'msgtmp');
|
Assign (InFile, Session.TempPath + 'msgtmp');
|
||||||
{$I-} Reset(InFile); {$I+}
|
{$I-} Reset(InFile); {$I+}
|
||||||
|
|
||||||
|
@ -1075,7 +1072,6 @@ Begin
|
||||||
Case Ch of
|
Case Ch of
|
||||||
#27 : Break;
|
#27 : Break;
|
||||||
#13 : If (LastLine < mysMaxMsgLines) and (Not NoMore) Then Begin
|
#13 : If (LastLine < mysMaxMsgLines) and (Not NoMore) Then Begin
|
||||||
Added := True;
|
|
||||||
|
|
||||||
If QuoteTopPage + QuoteCurLine = QuoteLines Then NoMore := True;
|
If QuoteTopPage + QuoteCurLine = QuoteLines Then NoMore := True;
|
||||||
|
|
||||||
|
|
|
@ -2239,17 +2239,13 @@ Begin
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TBBSIO.PurgeInputBuffer;
|
Procedure TBBSIO.PurgeInputBuffer;
|
||||||
{$IFDEF WINDOWS}
|
|
||||||
Var
|
|
||||||
Ch : Char;
|
|
||||||
{$ENDIF}
|
|
||||||
Begin
|
Begin
|
||||||
{$IFDEF UNIX}
|
{$IFDEF UNIX}
|
||||||
While Input.KeyPressed Do Input.ReadKey;
|
While Input.KeyPressed Do Input.ReadKey;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
{$IFDEF WINDOWS}
|
{$IFDEF WINDOWS}
|
||||||
If Not TBBSCore(Core).LocalMode Then TBBSCore(Core).Client.PurgeInputData(100);
|
If Not TBBSCore(Core).LocalMode Then TBBSCore(Core).Client.PurgeInputData(100);
|
||||||
If TBBSCore(Core).LocalMode Then While Input.KeyPressed Do Ch := Input.ReadKey;
|
If TBBSCore(Core).LocalMode Then While Input.KeyPressed Do Input.ReadKey;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
|
|
@ -4091,34 +4091,35 @@ Begin
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TMsgBase.WriteMSGDAT (Extended: Boolean) : LongInt;
|
Function TMsgBase.WriteMSGDAT (Extended: Boolean) : LongInt;
|
||||||
{ returns last message added to qwk packet }
|
|
||||||
Var
|
Var
|
||||||
DataFile : File;
|
DataFile : File;
|
||||||
NdxFile : File of QwkNdxHdr;
|
NdxFile : File of QwkNdxHdr;
|
||||||
NdxHdr : QwkNdxHdr;
|
NdxHdr : QwkNdxHdr;
|
||||||
QwkHdr : QwkDATHdr;
|
Header : String[128];
|
||||||
Temp : String;
|
Chunks : Word;
|
||||||
MsgAdded : Integer; {# of message added in packet}
|
|
||||||
LastRead : LongInt;
|
|
||||||
BufStr : String[128];
|
BufStr : String[128];
|
||||||
Blocks : Word;
|
MsgAdded : Integer;
|
||||||
Index : LongInt;
|
LastRead : LongInt;
|
||||||
|
QwkIndex : LongInt;
|
||||||
TooBig : Boolean;
|
TooBig : Boolean;
|
||||||
|
|
||||||
Procedure DoString (Str: String);
|
Procedure DoString (Str: String);
|
||||||
Var
|
Var
|
||||||
Count : SmallInt;
|
Count : SmallInt;
|
||||||
Begin
|
Begin
|
||||||
For Count := 1 to Length(Temp) Do Begin
|
For Count := 1 to Length(Str) Do Begin
|
||||||
BufStr := BufStr + Temp[Count];
|
BufStr := BufStr + Str[Count];
|
||||||
|
|
||||||
If BufStr[0] = #128 Then Begin
|
If BufStr[0] = #128 Then Begin
|
||||||
BlockWrite (DataFile, BufStr[1], 128);
|
BlockWrite (DataFile, BufStr[1], 128);
|
||||||
|
|
||||||
BufStr := '';
|
BufStr := '';
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
Var
|
||||||
|
TempStr : String;
|
||||||
Begin
|
Begin
|
||||||
MsgAdded := 0;
|
MsgAdded := 0;
|
||||||
|
|
||||||
|
@ -4135,10 +4136,8 @@ Begin
|
||||||
MsgBase^.SeekFirst (LastRead);
|
MsgBase^.SeekFirst (LastRead);
|
||||||
|
|
||||||
While MsgBase^.SeekFound Do Begin
|
While MsgBase^.SeekFound Do Begin
|
||||||
If ((Config.qwkMaxBase > 0) and (MsgAdded = Config.qwkMaxBase)) or
|
If ((Config.QwkMaxBase > 0) and (MsgAdded = Config.QwkMaxBase)) or
|
||||||
((Config.qwkMaxPacket > 0) and (TotalMsgs = Config.qwkMaxPacket)) Then Break;
|
((Config.QwkMaxPacket > 0) and (TotalMsgs = Config.QwkMaxPacket)) Then Break;
|
||||||
|
|
||||||
FillChar (QwkHdr, 128, ' ');
|
|
||||||
|
|
||||||
MsgBase^.MsgStartUp;
|
MsgBase^.MsgStartUp;
|
||||||
|
|
||||||
|
@ -4152,81 +4151,86 @@ Begin
|
||||||
Inc (TotalMsgs);
|
Inc (TotalMsgs);
|
||||||
|
|
||||||
LastRead := MsgBase^.GetMsgNum;
|
LastRead := MsgBase^.GetMsgNum;
|
||||||
|
Chunks := 0;
|
||||||
Temp := strPadR(strUpper(MsgBase^.GetFrom), 25, ' ');
|
BufStr := '';
|
||||||
Move (Temp[1], QwkHdr.UPFrom, 25);
|
TooBig := False;
|
||||||
Temp := strPadR(strUpper(MsgBase^.GetTo), 25, ' ');
|
QwkIndex := FileSize(DataFile) DIV 128 + 1;
|
||||||
Move (Temp[1], QwkHdr.UPTo, 25);
|
|
||||||
Temp := strPadR(MsgBase^.GetSubj, 25, ' ');
|
|
||||||
Move (Temp[1], QwkHdr.Subject, 25);
|
|
||||||
Temp := MsgBase^.GetDate;
|
|
||||||
Move (Temp[1], QwkHdr.Date, 8);
|
|
||||||
Temp := MsgBase^.GetTime;
|
|
||||||
Move (Temp[1], QwkHdr.Time, 5);
|
|
||||||
Temp := strPadR(strI2S(MsgBase^.GetMsgNum), 7, ' ');
|
|
||||||
Move (Temp[1], QwkHdr.MSGNum, 7);
|
|
||||||
Temp := strPadR(strI2S(MsgBase^.GetRefer), 8, ' ');
|
|
||||||
Move (Temp[1], QwkHdr.ReferNum, 8);
|
|
||||||
|
|
||||||
QwkHdr.Active := #225;
|
|
||||||
QwkHdr.ConfNum := MBase.Index;
|
|
||||||
QwkHdr.Status := ' ';
|
|
||||||
|
|
||||||
MsgBase^.MsgTxtStartUp;
|
MsgBase^.MsgTxtStartUp;
|
||||||
|
|
||||||
Blocks := MsgBase^.GetTextLen DIV 128;
|
While Not MsgBase^.EOM Do Begin
|
||||||
|
TempStr := MsgBase^.GetString(79);
|
||||||
|
|
||||||
If MsgBase^.GetTextLen MOD 128 > 0 Then Inc(Blocks, 2) Else Inc(Blocks);
|
If TempStr[1] = #1 Then Continue;
|
||||||
|
|
||||||
Temp := strPadR(strI2S(Blocks), 6, ' ');
|
Inc (Chunks, Length(TempStr));
|
||||||
|
End;
|
||||||
|
|
||||||
Move (Temp[1], QwkHdr.NumChunk, 6);
|
If Chunks MOD 128 = 0 Then
|
||||||
|
Chunks := Chunks DIV 128 + 1
|
||||||
|
Else
|
||||||
|
Chunks := Chunks DIV 128 + 2;
|
||||||
|
|
||||||
|
Header :=
|
||||||
|
' ' +
|
||||||
|
strPadR(strI2S(MsgBase^.GetMsgNum), 7, ' ') +
|
||||||
|
MsgBase^.GetDate +
|
||||||
|
MsgBase^.GetTime +
|
||||||
|
strPadR(strUpper(MsgBase^.GetTo), 25, ' ') +
|
||||||
|
strPadR(strUpper(MsgBase^.GetFrom), 25, ' ') +
|
||||||
|
strPadR(strUpper(MsgBase^.GetSubj), 25, ' ') +
|
||||||
|
strPadR('', 12, ' ') +
|
||||||
|
strPadR(strI2S(MsgBase^.GetRefer), 8, ' ') +
|
||||||
|
strPadR(strI2S(Chunks), 6, ' ') +
|
||||||
|
#255 +
|
||||||
|
' ' +
|
||||||
|
' ' +
|
||||||
|
' ';
|
||||||
|
|
||||||
If MsgAdded = 1 Then Begin
|
If MsgAdded = 1 Then Begin
|
||||||
Assign (NdxFile, Session.TempPath + strPadL(strI2S(MBase.Index), 3, '0') + '.ndx');
|
Assign (NdxFile, Session.TempPath + strPadL(strI2S(MBase.Index), 3, '0') + '.ndx');
|
||||||
ReWrite (NdxFile);
|
ReWrite (NdxFile);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Index := FileSize(DataFile) DIV 128 + 1;
|
LONG2MSB (QwkIndex, NdxHdr.MsgPos);
|
||||||
|
|
||||||
long2msb (Index, NdxHdr.MsgPos);
|
|
||||||
|
|
||||||
Write (NdxFile, NdxHdr);
|
Write (NdxFile, NdxHdr);
|
||||||
|
BlockWrite (DataFile, Header[1], 128);
|
||||||
BlockWrite (DataFile, QwkHdr, 128);
|
|
||||||
|
|
||||||
BufStr := '';
|
|
||||||
TooBig := False;
|
|
||||||
|
|
||||||
If Extended Then Begin
|
If Extended Then Begin
|
||||||
If Length(MsgBase^.GetFrom) > 25 Then Begin
|
If Length(MsgBase^.GetFrom) > 25 Then Begin
|
||||||
DoString('From: ' + MsgBase^.GetFrom + #227);
|
DoString('From: ' + MsgBase^.GetFrom + #227);
|
||||||
|
|
||||||
TooBig := True;
|
TooBig := True;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
If Length(MsgBase^.GetTo) > 25 Then Begin
|
If Length(MsgBase^.GetTo) > 25 Then Begin
|
||||||
DoString('To: ' + MsgBase^.GetTo + #227);
|
DoString('To: ' + MsgBase^.GetTo + #227);
|
||||||
|
|
||||||
TooBig := True;
|
TooBig := True;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
If Length(MsgBase^.GetSubj) > 25 Then Begin
|
If Length(MsgBase^.GetSubj) > 25 Then Begin
|
||||||
DoString('Subject: ' + MsgBase^.GetSubj + #227);
|
DoString('Subject: ' + MsgBase^.GetSubj + #227);
|
||||||
|
|
||||||
TooBig := True;
|
TooBig := True;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
If TooBig Then DoString(#227);
|
If TooBig Then DoString(#227);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
MsgBase^.MsgTxtStartUp;
|
||||||
|
|
||||||
While Not MsgBase^.EOM Do Begin
|
While Not MsgBase^.EOM Do Begin
|
||||||
Temp := MsgBase^.GetString(79) + #227;
|
TempStr := MsgBase^.GetString(79) + #227;
|
||||||
|
|
||||||
If Temp[1] = #1 Then Continue;
|
If TempStr[1] = #1 Then Continue;
|
||||||
|
|
||||||
DoString(Temp);
|
DoString (TempStr);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
If BufStr <> '' Then Begin
|
If BufStr <> '' Then Begin
|
||||||
BufStr := strPadR (BufStr, 128, ' ');
|
BufStr := strPadR (BufStr, 128, ' ');
|
||||||
|
|
||||||
BlockWrite (DataFile, BufStr[1], 128);
|
BlockWrite (DataFile, BufStr[1], 128);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
@ -4331,7 +4335,10 @@ Begin
|
||||||
// Session.SystemLog('DEBUG: Archiving QWK packet');
|
// Session.SystemLog('DEBUG: Archiving QWK packet');
|
||||||
|
|
||||||
If Session.LocalMode Then Begin
|
If Session.LocalMode Then Begin
|
||||||
|
FileErase (Config.QWKPath + Temp);
|
||||||
|
|
||||||
Session.FileBase.ExecuteArchive (Config.QWKPath + Temp, Session.User.ThisUser.Archive, Session.TempPath + '*', 1);
|
Session.FileBase.ExecuteArchive (Config.QWKPath + Temp, Session.User.ThisUser.Archive, Session.TempPath + '*', 1);
|
||||||
|
|
||||||
Session.io.OutFullLn (Session.GetPrompt(235));
|
Session.io.OutFullLn (Session.GetPrompt(235));
|
||||||
End Else Begin
|
End Else Begin
|
||||||
// Session.SystemLog('DEBUG: Arc QWK: Nonlocal mode');
|
// Session.SystemLog('DEBUG: Arc QWK: Nonlocal mode');
|
||||||
|
|
|
@ -76,7 +76,7 @@ Type
|
||||||
DateRcvd : LongInt;
|
DateRcvd : LongInt;
|
||||||
DateArrived : LongInt;
|
DateArrived : LongInt;
|
||||||
MsgNum : LongInt;
|
MsgNum : LongInt;
|
||||||
Attr1 : LongInt;
|
Attr1 : Cardinal;
|
||||||
Attr2 : LongInt;
|
Attr2 : LongInt;
|
||||||
TextOfs : LongInt;
|
TextOfs : LongInt;
|
||||||
TextLen : LongInt;
|
TextLen : LongInt;
|
||||||
|
@ -238,7 +238,7 @@ Type
|
||||||
Procedure MsgTxtStartUp; Virtual; {Do message text start up tasks}
|
Procedure MsgTxtStartUp; Virtual; {Do message text start up tasks}
|
||||||
Function GetTxtPos : LongInt; Virtual; {Get indicator of msg text position}
|
Function GetTxtPos : LongInt; Virtual; {Get indicator of msg text position}
|
||||||
Procedure SetTxtPos (TP: LongInt); Virtual; {Set text position}
|
Procedure SetTxtPos (TP: LongInt); Virtual; {Set text position}
|
||||||
Procedure SetAttr1 (Mask: LongInt; St: Boolean); {Set attribute 1}
|
Procedure SetAttr1 (Mask: Cardinal; St: Boolean); {Set attribute 1}
|
||||||
Function ReadIdx : Word;
|
Function ReadIdx : Word;
|
||||||
Function WriteIdx : Word;
|
Function WriteIdx : Word;
|
||||||
Procedure AddSubField (id: Word; Data: String);
|
Procedure AddSubField (id: Word; Data: String);
|
||||||
|
@ -371,7 +371,7 @@ Begin
|
||||||
JM^.MsgTime := STime;
|
JM^.MsgTime := STime;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetAttr1 (Mask: LongInt; St: Boolean);
|
Procedure TMsgBaseJAM.SetAttr1 (Mask: Cardinal; St: Boolean);
|
||||||
Begin
|
Begin
|
||||||
If St Then
|
If St Then
|
||||||
MsgHdr^.JamHdr.Attr1 := MsgHdr^.JamHdr.Attr1 Or Mask
|
MsgHdr^.JamHdr.Attr1 := MsgHdr^.JamHdr.Attr1 Or Mask
|
||||||
|
|
|
@ -45,7 +45,7 @@ Type
|
||||||
End;
|
End;
|
||||||
|
|
||||||
SqFrameHdrType = Record
|
SqFrameHdrType = Record
|
||||||
Id : LongInt; { Must equal SqHdrId }
|
Id : Cardinal; { Must equal SqHdrId }
|
||||||
NextFrame : LongInt; { Next msg frame }
|
NextFrame : LongInt; { Next msg frame }
|
||||||
PrevFrame : LongInt; { Prior msg frame }
|
PrevFrame : LongInt; { Prior msg frame }
|
||||||
FrameLength : LongInt; { Length of this frame not counting header }
|
FrameLength : LongInt; { Length of this frame not counting header }
|
||||||
|
|
|
@ -96,7 +96,7 @@ Var
|
||||||
cfg_ExecPath : String[160];
|
cfg_ExecPath : String[160];
|
||||||
cfg_ExecUser : String[35];
|
cfg_ExecUser : String[35];
|
||||||
cfg_ExecPW : String[20];
|
cfg_ExecPW : String[20];
|
||||||
cfg_TextString : Byte;
|
// cfg_TextString : Byte;
|
||||||
cfg_TextKeyword : Byte;
|
cfg_TextKeyword : Byte;
|
||||||
cfg_TextComment : Byte;
|
cfg_TextComment : Byte;
|
||||||
cfg_TextNormal : Byte;
|
cfg_TextNormal : Byte;
|
||||||
|
@ -139,8 +139,6 @@ Var
|
||||||
CutPasted : Boolean = False;
|
CutPasted : Boolean = False;
|
||||||
CutTextPos : Word = 0;
|
CutTextPos : Word = 0;
|
||||||
CutText : Array[1..MaxCutText] of CutTextPTR;
|
CutText : Array[1..MaxCutText] of CutTextPTR;
|
||||||
|
|
||||||
Var
|
|
||||||
Console : TOutput;
|
Console : TOutput;
|
||||||
Input : TInput;
|
Input : TInput;
|
||||||
StartDir : String;
|
StartDir : String;
|
||||||
|
@ -1855,7 +1853,7 @@ Begin
|
||||||
cfg_ExecPW := INI.ReadString('Execute', 'password', 'Guest');
|
cfg_ExecPW := INI.ReadString('Execute', 'password', 'Guest');
|
||||||
cfg_TextNormal := INI.ReadInteger('Colors', 'syn_normal', 30);
|
cfg_TextNormal := INI.ReadInteger('Colors', 'syn_normal', 30);
|
||||||
cfg_TextKeyword := INI.ReadInteger('Colors', 'syn_keyword', 31);
|
cfg_TextKeyword := INI.ReadInteger('Colors', 'syn_keyword', 31);
|
||||||
cfg_TextString := INI.ReadInteger('Colors', 'syn_string', 27);
|
// cfg_TextString := INI.ReadInteger('Colors', 'syn_string', 27);
|
||||||
cfg_TextNumber := INI.ReadInteger('Colors', 'syn_number', 19);
|
cfg_TextNumber := INI.ReadInteger('Colors', 'syn_number', 19);
|
||||||
cfg_TextComment := INI.ReadInteger('Colors', 'syn_comment', 23);
|
cfg_TextComment := INI.ReadInteger('Colors', 'syn_comment', 23);
|
||||||
cfg_TextHex := INI.ReadInteger('Colors', 'syn_hex', 28);
|
cfg_TextHex := INI.ReadInteger('Colors', 'syn_hex', 28);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
Unit MIS_Client_FTP;
|
Unit MIS_Client_FTP;
|
||||||
|
|
||||||
{$I M_OPS.PAS}
|
{$I M_OPS.PAS}
|
||||||
|
|
||||||
{.$DEFINE FTPDEBUG}
|
{.$DEFINE FTPDEBUG}
|
||||||
|
|
||||||
// does not send file/directory datestamps
|
// does not send file/directory datestamps
|
||||||
|
@ -281,7 +282,7 @@ Begin
|
||||||
WaitSock.FTelnetServer := False;
|
WaitSock.FTelnetServer := False;
|
||||||
WaitSock.FTelnetClient := False;
|
WaitSock.FTelnetClient := False;
|
||||||
|
|
||||||
WaitSock.WaitInit(DataPort);
|
WaitSock.WaitInit(bbsConfig.inetInterface, DataPort);
|
||||||
|
|
||||||
DataSocket := WaitSock.WaitConnection;
|
DataSocket := WaitSock.WaitConnection;
|
||||||
|
|
||||||
|
@ -446,12 +447,15 @@ Begin
|
||||||
|
|
||||||
DataPort := Random(bbsConfig.inetFTPPortMax - bbsConfig.inetFTPPortMin) + bbsConfig.inetFTPPortMin;
|
DataPort := Random(bbsConfig.inetFTPPortMax - bbsConfig.inetFTPPortMin) + bbsConfig.inetFTPPortMin;
|
||||||
|
|
||||||
{$IFDEF FTPDEBUG} LOG('PASV on host ' + Client.HostIP + ' port ' + strI2S(DataPort)); {$ENDIF}
|
{$IFDEF FTPDEBUG}
|
||||||
|
LOG('PASV on host ' + Client.HostIP + ' port ' + strI2S(DataPort));
|
||||||
|
|
||||||
|
Server.Status(re_PassiveOK + '(' + strReplace(Client.HostIP, '.', ',') + ',' + strI2S(WordRec(DataPort).Hi) + ',' + strI2S(WordRec(DataPort).Lo) + ').');
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
Client.WriteLine(re_PassiveOK + '(' + strReplace(Client.HostIP, '.', ',') + ',' + strI2S(WordRec(DataPort).Hi) + ',' + strI2S(WordRec(DataPort).Lo) + ').');
|
Client.WriteLine(re_PassiveOK + '(' + strReplace(Client.HostIP, '.', ',') + ',' + strI2S(WordRec(DataPort).Hi) + ',' + strI2S(WordRec(DataPort).Lo) + ').');
|
||||||
|
|
||||||
IsPassive := True;
|
IsPassive := True;
|
||||||
|
|
||||||
WaitSock := TIOSocket.Create;
|
WaitSock := TIOSocket.Create;
|
||||||
|
|
||||||
WaitSock.FTelnetServer := False;
|
WaitSock.FTelnetServer := False;
|
||||||
|
@ -459,7 +463,7 @@ Begin
|
||||||
|
|
||||||
{$IFDEF FTPDEBUG} LOG('PASV Init'); {$ENDIF}
|
{$IFDEF FTPDEBUG} LOG('PASV Init'); {$ENDIF}
|
||||||
|
|
||||||
WaitSock.WaitInit(DataPort);
|
WaitSock.WaitInit(bbsConfig.inetInterface, DataPort);
|
||||||
|
|
||||||
{$IFDEF FTPDEBUG} LOG('PASV Wait'); {$ENDIF}
|
{$IFDEF FTPDEBUG} LOG('PASV Wait'); {$ENDIF}
|
||||||
|
|
||||||
|
@ -765,7 +769,7 @@ Begin
|
||||||
|
|
||||||
WaitSock := TIOSocket.Create;
|
WaitSock := TIOSocket.Create;
|
||||||
|
|
||||||
WaitSock.WaitInit(DataPort);
|
WaitSock.WaitInit(bbsConfig.inetInterface, DataPort);
|
||||||
|
|
||||||
DataSocket := WaitSock.WaitConnection;
|
DataSocket := WaitSock.WaitConnection;
|
||||||
|
|
||||||
|
@ -813,7 +817,10 @@ Begin
|
||||||
Else
|
Else
|
||||||
Data := '';
|
Data := '';
|
||||||
|
|
||||||
{$IFDEF FTPDEBUG} LOG('Cmd: ' + Cmd + ' Data: ' + Data); {$ENDIF}
|
{$IFDEF FTPDEBUG}
|
||||||
|
LOG('Cmd: ' + Cmd + ' Data: ' + Data);
|
||||||
|
Server.Status ('Cmd: ' + Cmd + ' Data: ' + Data);
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
If Cmd = 'CDUP' Then cmdCDUP Else
|
If Cmd = 'CDUP' Then cmdCDUP Else
|
||||||
If Cmd = 'CWD' Then cmdCWD Else
|
If Cmd = 'CWD' Then cmdCWD Else
|
||||||
|
|
|
@ -17,7 +17,7 @@ Const
|
||||||
Type
|
Type
|
||||||
TServerManager = Class;
|
TServerManager = Class;
|
||||||
TServerClient = Class;
|
TServerClient = Class;
|
||||||
TServerCreateProc = Function (Manager: TServerManager; Config: RecConfig; ND: TNodeData; Client: TIOSocket): TServerClient;
|
TServerCreateProc = Function (Manager: TServerManager; Cfg: RecConfig; ND: TNodeData; Client: TIOSocket): TServerClient;
|
||||||
|
|
||||||
TServerManager = Class(TThread)
|
TServerManager = Class(TThread)
|
||||||
Critical : TRTLCriticalSection;
|
Critical : TRTLCriticalSection;
|
||||||
|
@ -37,7 +37,7 @@ Type
|
||||||
Port : LongInt;
|
Port : LongInt;
|
||||||
TextPath : String[80];
|
TextPath : String[80];
|
||||||
|
|
||||||
Constructor Create (Config: RecConfig; PortNum: Word; CliMax: Word; ND: TNodeData; CreateProc: TServerCreateProc);
|
Constructor Create (Cfg: RecConfig; PortNum: Word; CliMax: Word; ND: TNodeData; CreateProc: TServerCreateProc);
|
||||||
Destructor Destroy; Override;
|
Destructor Destroy; Override;
|
||||||
Procedure Execute; Override;
|
Procedure Execute; Override;
|
||||||
Procedure Status (Str: String);
|
Procedure Status (Str: String);
|
||||||
|
@ -60,7 +60,7 @@ Uses
|
||||||
m_Strings,
|
m_Strings,
|
||||||
m_DateTime;
|
m_DateTime;
|
||||||
|
|
||||||
Constructor TServerManager.Create (Config: RecConfig; PortNum: Word; CliMax: Word; ND: TNodeData; CreateProc: TServerCreateProc);
|
Constructor TServerManager.Create (Cfg: RecConfig; PortNum: Word; CliMax: Word; ND: TNodeData; CreateProc: TServerCreateProc);
|
||||||
Var
|
Var
|
||||||
Count : Byte;
|
Count : Byte;
|
||||||
Begin
|
Begin
|
||||||
|
@ -82,7 +82,7 @@ Begin
|
||||||
ClientList := TList.Create;
|
ClientList := TList.Create;
|
||||||
TextPath := Config.DataPath;
|
TextPath := Config.DataPath;
|
||||||
NodeInfo := ND;
|
NodeInfo := ND;
|
||||||
Config := Config;
|
Config := Cfg;
|
||||||
|
|
||||||
For Count := 1 to ClientMax Do
|
For Count := 1 to ClientMax Do
|
||||||
ClientList.Add(NIL);
|
ClientList.Add(NIL);
|
||||||
|
@ -201,7 +201,7 @@ Begin
|
||||||
Repeat Until Server <> NIL; // Synchronize with server class
|
Repeat Until Server <> NIL; // Synchronize with server class
|
||||||
Repeat Until ServerStatus <> NIL; // Syncronize with status class
|
Repeat Until ServerStatus <> NIL; // Syncronize with status class
|
||||||
|
|
||||||
Server.WaitInit(Port);
|
Server.WaitInit(Config.inetInterface, Port);
|
||||||
|
|
||||||
If Terminated Then Exit;
|
If Terminated Then Exit;
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@
|
||||||
PurgeMessageBases = false
|
PurgeMessageBases = false
|
||||||
PostTextFiles = false
|
PostTextFiles = false
|
||||||
PackMessageBases = false
|
PackMessageBases = false
|
||||||
ImportEchoMail = true
|
ImportEchoMail = false
|
||||||
ExportEchoMail = false
|
ExportEchoMail = false
|
||||||
|
|
||||||
; ==========================================================================
|
; ==========================================================================
|
||||||
|
|
|
@ -2,37 +2,6 @@ Unit MUTIL_Common;
|
||||||
|
|
||||||
{$I M_OPS.PAS}
|
{$I M_OPS.PAS}
|
||||||
|
|
||||||
(*
|
|
||||||
add domain into this? how would this be used in routing? where is routing
|
|
||||||
configuration going?
|
|
||||||
|
|
||||||
Function IsAddressMatch (Str: String; Addr: RecEchoMailAddr) : Boolean;
|
|
||||||
Var
|
|
||||||
Zone : String;
|
|
||||||
Net : String;
|
|
||||||
Node : String;
|
|
||||||
A : Byte;
|
|
||||||
B : Byte;
|
|
||||||
Begin
|
|
||||||
Result := False;
|
|
||||||
|
|
||||||
A := Pos(':', Str);
|
|
||||||
B := Pos('/', Str);
|
|
||||||
|
|
||||||
If (A = 0) or (B <= A) Then Exit;
|
|
||||||
|
|
||||||
Zone := Copy(Str, 1, A - 1);
|
|
||||||
Net := Copy(Str, A + 1, B - 1 - A);
|
|
||||||
Node := Copy(Str, B + 1, 255);
|
|
||||||
|
|
||||||
If (Zone <> '*') and (Addr.Zone <> strS2I(Zone)) Then Exit;
|
|
||||||
If (Net <> '*') and (Addr.Net <> strS2I(Net)) Then Exit;
|
|
||||||
If (Node <> '*') and (Addr.Node <> strS2I(Node)) Then Exit;
|
|
||||||
|
|
||||||
Result := True;
|
|
||||||
End;
|
|
||||||
*)
|
|
||||||
|
|
||||||
Interface
|
Interface
|
||||||
|
|
||||||
Uses
|
Uses
|
||||||
|
@ -339,7 +308,9 @@ Begin
|
||||||
Inc (Count);
|
Inc (Count);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
ShellDOS ('', Temp);
|
Log (3, '!', 'Arc Result (' + strI2S(ShellDOS('', Temp)) + ') ' + Temp);
|
||||||
|
|
||||||
|
// ShellDOS ('', Temp);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function GetMBaseByIndex (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
Function GetMBaseByIndex (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
||||||
|
@ -533,7 +504,10 @@ End;
|
||||||
|
|
||||||
Function GetFTNFlowName (Dest: RecEchoMailAddr) : String;
|
Function GetFTNFlowName (Dest: RecEchoMailAddr) : String;
|
||||||
Begin
|
Begin
|
||||||
Result := strI2H((Dest.Net SHL 16) OR Dest.Node, 8);
|
If Dest.Point = 0 Then
|
||||||
|
Result := strI2H((Dest.Net SHL 16) OR Dest.Node, 8)
|
||||||
|
Else
|
||||||
|
Result := strI2H(Dest.Point, 8);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function IsFTNPrimary (EchoNode: RecEchoMailNode) : Boolean;
|
Function IsFTNPrimary (EchoNode: RecEchoMailNode) : Boolean;
|
||||||
|
@ -558,6 +532,9 @@ Begin;
|
||||||
Result := bbsConfig.OutboundPath
|
Result := bbsConfig.OutboundPath
|
||||||
Else
|
Else
|
||||||
Result := DirLast(bbsConfig.OutboundPath) + strLower(EchoNode.Domain + '.' + strPadL(strI2H(EchoNode.Address.Zone, 3), 3, '0')) + PathChar;
|
Result := DirLast(bbsConfig.OutboundPath) + strLower(EchoNode.Domain + '.' + strPadL(strI2H(EchoNode.Address.Zone, 3), 3, '0')) + PathChar;
|
||||||
|
|
||||||
|
If EchoNode.Address.Point <> 0 Then
|
||||||
|
Result := Result + strI2H((EchoNode.Address.Net SHL 16) OR EchoNode.Address.Node, 8) + '.pnt' + PathChar;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function GetNodeByIndex (Num: LongInt; Var TempNode: RecEchoMailNode) : Boolean;
|
Function GetNodeByIndex (Num: LongInt; Var TempNode: RecEchoMailNode) : Boolean;
|
||||||
|
@ -587,6 +564,49 @@ Function GetNodeByRoute (Dest: RecEchoMailAddr; Var TempNode: RecEchoMailNode) :
|
||||||
|
|
||||||
Function IsMatch (Str: String) : Boolean;
|
Function IsMatch (Str: String) : Boolean;
|
||||||
|
|
||||||
|
Function IsOneMatch (Mask: String) : Boolean;
|
||||||
|
Var
|
||||||
|
Zone : String;
|
||||||
|
Net : String;
|
||||||
|
Node : String;
|
||||||
|
Point : String;
|
||||||
|
A : Byte;
|
||||||
|
B : Byte;
|
||||||
|
C : Byte;
|
||||||
|
Begin
|
||||||
|
Result := False;
|
||||||
|
Zone := '';
|
||||||
|
Net := '';
|
||||||
|
Node := '';
|
||||||
|
Point := '';
|
||||||
|
A := Pos(':', Mask);
|
||||||
|
B := Pos('/', Mask);
|
||||||
|
C := Pos('.', Mask);
|
||||||
|
|
||||||
|
If A <> 0 Then Begin
|
||||||
|
Zone := Copy(Mask, 1, A - 1);
|
||||||
|
|
||||||
|
If B = 0 Then B := 255;
|
||||||
|
If C = 0 Then C := 255;
|
||||||
|
|
||||||
|
Net := Copy(Mask, A + 1, B - 1 - A);
|
||||||
|
Node := Copy(Mask, B + 1, C - 1 - B);
|
||||||
|
Point := Copy(Mask, C + 1, 255);
|
||||||
|
End;
|
||||||
|
|
||||||
|
If Zone = '' Then Zone := '*';
|
||||||
|
If Net = '' Then Net := '*';
|
||||||
|
If Node = '' Then Node := '*';
|
||||||
|
If Point = '' Then Point := '*';
|
||||||
|
|
||||||
|
If (Zone <> '*') and (Dest.Zone <> strS2I(Zone)) Then Exit;
|
||||||
|
If (Net <> '*') and (Dest.Net <> strS2I(Net)) Then Exit;
|
||||||
|
If (Node <> '*') and (Dest.Node <> strS2I(Node)) Then Exit;
|
||||||
|
If (Point <> '*') and (Dest.Point <> strS2I(Point)) Then Exit;
|
||||||
|
|
||||||
|
Result := True;
|
||||||
|
End;
|
||||||
|
(*
|
||||||
Function IsOneMatch (Mask: String) : Boolean;
|
Function IsOneMatch (Mask: String) : Boolean;
|
||||||
Var
|
Var
|
||||||
Zone : String;
|
Zone : String;
|
||||||
|
@ -622,10 +642,9 @@ Function GetNodeByRoute (Dest: RecEchoMailAddr; Var TempNode: RecEchoMailNode) :
|
||||||
|
|
||||||
Result := True;
|
Result := True;
|
||||||
End;
|
End;
|
||||||
|
*)
|
||||||
Var
|
Var
|
||||||
Mask : String = '';
|
Mask : String = '';
|
||||||
IsNot : Boolean;
|
|
||||||
OneRes : Boolean;
|
OneRes : Boolean;
|
||||||
|
|
||||||
Procedure GetNextAddress;
|
Procedure GetNextAddress;
|
||||||
|
@ -694,6 +713,10 @@ Var
|
||||||
Begin
|
Begin
|
||||||
Result := False;
|
Result := False;
|
||||||
|
|
||||||
|
// this doesn't check points because a point is not in the PKT header so
|
||||||
|
// we cannot compare it against the point aspect. maybe PKT 2.2 fixes
|
||||||
|
// this? research it someday
|
||||||
|
|
||||||
For Count := 1 to 30 Do Begin
|
For Count := 1 to 30 Do Begin
|
||||||
Result := (bbsConfig.NetAddress[Count].Zone = Zone) And
|
Result := (bbsConfig.NetAddress[Count].Zone = Zone) And
|
||||||
(bbsConfig.NetAddress[Count].Net = Net) And
|
(bbsConfig.NetAddress[Count].Net = Net) And
|
||||||
|
|
|
@ -123,7 +123,6 @@ Implementation
|
||||||
Constructor TPKTDupe.Create (Max: Cardinal);
|
Constructor TPKTDupe.Create (Max: Cardinal);
|
||||||
Var
|
Var
|
||||||
F : File;
|
F : File;
|
||||||
RS : Cardinal;
|
|
||||||
Begin
|
Begin
|
||||||
Inherited Create;
|
Inherited Create;
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,6 @@ End;
|
||||||
Procedure BundleMessages;
|
Procedure BundleMessages;
|
||||||
Var
|
Var
|
||||||
F : File;
|
F : File;
|
||||||
T : Text;
|
|
||||||
PH : RecPKTHeader;
|
PH : RecPKTHeader;
|
||||||
DirInfo : SearchRec;
|
DirInfo : SearchRec;
|
||||||
NodeIndex : LongInt;
|
NodeIndex : LongInt;
|
||||||
|
@ -158,7 +157,8 @@ Var
|
||||||
|
|
||||||
If (EchoNode.Address.Zone = MsgBase^.GetOrigAddr.Zone) and
|
If (EchoNode.Address.Zone = MsgBase^.GetOrigAddr.Zone) and
|
||||||
(EchoNode.Address.Net = MsgBase^.GetOrigAddr.Net) and
|
(EchoNode.Address.Net = MsgBase^.GetOrigAddr.Net) and
|
||||||
(EchoNode.Address.Node = MsgBase^.GetOrigAddr.Node) Then Exit;
|
(EchoNode.Address.Node = MsgBase^.GetOrigAddr.Node) and
|
||||||
|
(EchoNode.Address.Point = MsgBase^.GetOrigAddr.Point) Then Exit;
|
||||||
|
|
||||||
Log (2, '+', ' Export #' + strI2S(MsgBase^.GetMsgNum) + ' to ' + strAddr2Str(EchoNode.Address));
|
Log (2, '+', ' Export #' + strI2S(MsgBase^.GetMsgNum) + ' to ' + strAddr2Str(EchoNode.Address));
|
||||||
|
|
||||||
|
@ -257,7 +257,7 @@ Var
|
||||||
If MBase.NetType = 3 Then
|
If MBase.NetType = 3 Then
|
||||||
WriteStr (#1 + 'INTL ' + strAddr2Str(EchoNode.Address) + ' ' + strAddr2Str(MsgBase^.GetOrigAddr), #13);
|
WriteStr (#1 + 'INTL ' + strAddr2Str(EchoNode.Address) + ' ' + strAddr2Str(MsgBase^.GetOrigAddr), #13);
|
||||||
|
|
||||||
WriteStr (#1 + 'TID: Mystic BBS ' + mysVersion, #13);
|
WriteStr (#1 + 'TID: ' + mysSoftwareID + ' ' + mysVersion, #13);
|
||||||
|
|
||||||
MsgBase^.MsgTxtStartUp;
|
MsgBase^.MsgTxtStartUp;
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,6 @@ Var
|
||||||
TotalEcho : LongInt;
|
TotalEcho : LongInt;
|
||||||
TotalNet : LongInt;
|
TotalNet : LongInt;
|
||||||
TotalDupes : LongInt;
|
TotalDupes : LongInt;
|
||||||
EchoNode : RecEchoMailNode;
|
|
||||||
DupeIndex : LongInt;
|
DupeIndex : LongInt;
|
||||||
DupeMBase : RecMessageBase;
|
DupeMBase : RecMessageBase;
|
||||||
CreateBases : Boolean;
|
CreateBases : Boolean;
|
||||||
|
|
|
@ -63,7 +63,6 @@ Var
|
||||||
UserTotal : Cardinal;
|
UserTotal : Cardinal;
|
||||||
Link : RecMsgLink;
|
Link : RecMsgLink;
|
||||||
Count : Cardinal;
|
Count : Cardinal;
|
||||||
Addr : RecEchoMailAddr;
|
|
||||||
Begin
|
Begin
|
||||||
FileMode := 66;
|
FileMode := 66;
|
||||||
BaseKills := 0;
|
BaseKills := 0;
|
||||||
|
|
|
@ -325,7 +325,8 @@ Type
|
||||||
//EmailValidationLevel
|
//EmailValidationLevel
|
||||||
//AllowEmailPWReset
|
//AllowEmailPWReset
|
||||||
ForceNodeList : Boolean;
|
ForceNodeList : Boolean;
|
||||||
Reserved : Array[1..811] of Char;
|
inetInterface : String[23];
|
||||||
|
Reserved : Array[1..787] of Char;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Const
|
Const
|
||||||
|
|
|
@ -34,12 +34,10 @@ FUTURE / IDEAS / WORK IN PROGRESS / NOTES
|
||||||
- PGUP/DOWN moves bases in message base editor?
|
- PGUP/DOWN moves bases in message base editor?
|
||||||
- AreaFix
|
- AreaFix
|
||||||
- Echomail export saves last scanned pointers
|
- Echomail export saves last scanned pointers
|
||||||
- Echomail export support for points
|
|
||||||
- Echomail export support for netmail routing
|
- Echomail export support for netmail routing
|
||||||
- FileFix / TIC
|
- FileFix / TIC
|
||||||
- Add "Add Export To" to global msgbase editor. Also Del Export?
|
- Add "Add Export To" to global msgbase editor. Also Del Export?
|
||||||
! Use NetReply in RecMB also Reply to another base
|
! Use NetReply in RecMB also Reply to another base?
|
||||||
- cut/paste needs to be added back into the FS editor
|
|
||||||
- QWK put/get per individual users via FTP
|
- QWK put/get per individual users via FTP
|
||||||
- EXCLUDE from all files list. important.
|
- EXCLUDE from all files list. important.
|
||||||
- Reply to echomail via netmail.
|
- Reply to echomail via netmail.
|
||||||
|
|
|
@ -3308,4 +3308,17 @@
|
||||||
+ Further optimized the on-the-fly ANSI optimization generated by Mystic. I
|
+ Further optimized the on-the-fly ANSI optimization generated by Mystic. I
|
||||||
think its probably not possible to make it more efficient now.
|
think its probably not possible to make it more efficient now.
|
||||||
|
|
||||||
|
+ MUTIL now properly exports echomail and netmail for BSO-style point nodes.
|
||||||
|
|
||||||
|
+ FIDOPOLL now supports sending/receiving echomail from point systems.
|
||||||
|
|
||||||
|
! Fixed a bug in the QWK download system that could cause some networked
|
||||||
|
message bases to get corrupted.
|
||||||
|
|
||||||
|
+ Mystic now allows the network interface to be defined for its MIS servers.
|
||||||
|
If you want it to work the same as before, you MUST set the "Interface"
|
||||||
|
value in "System Configuration -> Internet Options" to "0.0.0.0" without
|
||||||
|
the quotes.
|
||||||
|
|
||||||
|
|
||||||
<ALPHA 33 RELEASED>
|
<ALPHA 33 RELEASED>
|
||||||
|
|
Loading…
Reference in New Issue