Updates
This commit is contained in:
parent
cd4983db0b
commit
cee65a7621
|
@ -166,7 +166,10 @@ Begin
|
|||
Case Form.Execute of
|
||||
'D' : MBase.NetAddr := Configuration_EchoMailAddress(False);
|
||||
'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;
|
||||
Until False;
|
||||
|
||||
|
|
|
@ -276,13 +276,14 @@ Begin
|
|||
|
||||
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.AddBol ('B', ' IP Blocking', 18, 12, 33, 12, 13, 3, @Config.inetIPBlocking, Topic + 'Enable IP blocking');
|
||||
Form.AddBol ('L', ' IP Logging', 19, 13, 33, 13, 12, 3, @Config.inetIPLogging, Topic + 'Enable IP logging');
|
||||
Form.AddStr ('I', ' Interface', 20, 12, 33, 12, 11, 23, 23, @Config.inetInterface, Topic + 'Network interface IP address');
|
||||
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;
|
||||
|
||||
|
|
|
@ -925,7 +925,6 @@ Var
|
|||
|
||||
Var
|
||||
Ch : Char;
|
||||
Added : Boolean;
|
||||
QWinSize : Byte;
|
||||
QWinDataPos : Byte;
|
||||
QWinData : Array[1..15] of String[79];
|
||||
|
@ -963,8 +962,6 @@ Var
|
|||
Var
|
||||
Temp : Integer;
|
||||
Begin
|
||||
Added := False;
|
||||
|
||||
Assign (InFile, Session.TempPath + 'msgtmp');
|
||||
{$I-} Reset(InFile); {$I+}
|
||||
|
||||
|
@ -1075,7 +1072,6 @@ Begin
|
|||
Case Ch of
|
||||
#27 : Break;
|
||||
#13 : If (LastLine < mysMaxMsgLines) and (Not NoMore) Then Begin
|
||||
Added := True;
|
||||
|
||||
If QuoteTopPage + QuoteCurLine = QuoteLines Then NoMore := True;
|
||||
|
||||
|
|
|
@ -2239,17 +2239,13 @@ Begin
|
|||
End;
|
||||
|
||||
Procedure TBBSIO.PurgeInputBuffer;
|
||||
{$IFDEF WINDOWS}
|
||||
Var
|
||||
Ch : Char;
|
||||
{$ENDIF}
|
||||
Begin
|
||||
{$IFDEF UNIX}
|
||||
While Input.KeyPressed Do Input.ReadKey;
|
||||
{$ENDIF}
|
||||
{$IFDEF WINDOWS}
|
||||
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}
|
||||
End;
|
||||
|
||||
|
|
|
@ -4091,34 +4091,35 @@ Begin
|
|||
End;
|
||||
|
||||
Function TMsgBase.WriteMSGDAT (Extended: Boolean) : LongInt;
|
||||
{ returns last message added to qwk packet }
|
||||
Var
|
||||
DataFile : File;
|
||||
NdxFile : File of QwkNdxHdr;
|
||||
NdxHdr : QwkNdxHdr;
|
||||
QwkHdr : QwkDATHdr;
|
||||
Temp : String;
|
||||
MsgAdded : Integer; {# of message added in packet}
|
||||
LastRead : LongInt;
|
||||
Header : String[128];
|
||||
Chunks : Word;
|
||||
BufStr : String[128];
|
||||
Blocks : Word;
|
||||
Index : LongInt;
|
||||
MsgAdded : Integer;
|
||||
LastRead : LongInt;
|
||||
QwkIndex : LongInt;
|
||||
TooBig : Boolean;
|
||||
|
||||
Procedure DoString (Str: String);
|
||||
Var
|
||||
Count : SmallInt;
|
||||
Begin
|
||||
For Count := 1 to Length(Temp) Do Begin
|
||||
BufStr := BufStr + Temp[Count];
|
||||
For Count := 1 to Length(Str) Do Begin
|
||||
BufStr := BufStr + Str[Count];
|
||||
|
||||
If BufStr[0] = #128 Then Begin
|
||||
BlockWrite (DataFile, BufStr[1], 128);
|
||||
|
||||
BufStr := '';
|
||||
End;
|
||||
End;
|
||||
End;
|
||||
|
||||
Var
|
||||
TempStr : String;
|
||||
Begin
|
||||
MsgAdded := 0;
|
||||
|
||||
|
@ -4132,13 +4133,11 @@ Begin
|
|||
|
||||
LastRead := MsgBase^.GetLastRead(Session.User.UserNum) + 1;
|
||||
|
||||
MsgBase^.SeekFirst(LastRead);
|
||||
MsgBase^.SeekFirst (LastRead);
|
||||
|
||||
While MsgBase^.SeekFound Do Begin
|
||||
If ((Config.qwkMaxBase > 0) and (MsgAdded = Config.qwkMaxBase)) or
|
||||
((Config.qwkMaxPacket > 0) and (TotalMsgs = Config.qwkMaxPacket)) Then Break;
|
||||
|
||||
FillChar (QwkHdr, 128, ' ');
|
||||
If ((Config.QwkMaxBase > 0) and (MsgAdded = Config.QwkMaxBase)) or
|
||||
((Config.QwkMaxPacket > 0) and (TotalMsgs = Config.QwkMaxPacket)) Then Break;
|
||||
|
||||
MsgBase^.MsgStartUp;
|
||||
|
||||
|
@ -4152,81 +4151,86 @@ Begin
|
|||
Inc (TotalMsgs);
|
||||
|
||||
LastRead := MsgBase^.GetMsgNum;
|
||||
|
||||
Temp := strPadR(strUpper(MsgBase^.GetFrom), 25, ' ');
|
||||
Move (Temp[1], QwkHdr.UPFrom, 25);
|
||||
Temp := strPadR(strUpper(MsgBase^.GetTo), 25, ' ');
|
||||
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 := ' ';
|
||||
Chunks := 0;
|
||||
BufStr := '';
|
||||
TooBig := False;
|
||||
QwkIndex := FileSize(DataFile) DIV 128 + 1;
|
||||
|
||||
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
|
||||
Assign (NdxFile, Session.TempPath + strPadL(strI2S(MBase.Index), 3, '0') + '.ndx');
|
||||
ReWrite (NdxFile);
|
||||
End;
|
||||
|
||||
Index := FileSize(DataFile) DIV 128 + 1;
|
||||
|
||||
long2msb (Index, NdxHdr.MsgPos);
|
||||
|
||||
Write (NdxFile, NdxHdr);
|
||||
|
||||
BlockWrite (DataFile, QwkHdr, 128);
|
||||
|
||||
BufStr := '';
|
||||
TooBig := False;
|
||||
LONG2MSB (QwkIndex, NdxHdr.MsgPos);
|
||||
Write (NdxFile, NdxHdr);
|
||||
BlockWrite (DataFile, Header[1], 128);
|
||||
|
||||
If Extended Then Begin
|
||||
If Length(MsgBase^.GetFrom) > 25 Then Begin
|
||||
DoString('From: ' + MsgBase^.GetFrom + #227);
|
||||
|
||||
TooBig := True;
|
||||
End;
|
||||
|
||||
If Length(MsgBase^.GetTo) > 25 Then Begin
|
||||
DoString('To: ' + MsgBase^.GetTo + #227);
|
||||
|
||||
TooBig := True;
|
||||
End;
|
||||
|
||||
If Length(MsgBase^.GetSubj) > 25 Then Begin
|
||||
DoString('Subject: ' + MsgBase^.GetSubj + #227);
|
||||
|
||||
TooBig := True;
|
||||
End;
|
||||
|
||||
If TooBig Then DoString(#227);
|
||||
End;
|
||||
|
||||
MsgBase^.MsgTxtStartUp;
|
||||
|
||||
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;
|
||||
|
||||
If BufStr <> '' Then Begin
|
||||
BufStr := strPadR(BufStr, 128, ' ');
|
||||
BufStr := strPadR (BufStr, 128, ' ');
|
||||
|
||||
BlockWrite (DataFile, BufStr[1], 128);
|
||||
End;
|
||||
|
||||
|
@ -4246,7 +4250,7 @@ Begin
|
|||
MsgBase^.CloseMsgBase;
|
||||
Dispose (MsgBase, Done);
|
||||
|
||||
Session.io.OutBS (Screen.CursorX, True);
|
||||
Session.io.OutBS (Screen.CursorX, True);
|
||||
Session.io.OutFullLn (Session.GetPrompt(232));
|
||||
|
||||
Result := LastRead;
|
||||
|
@ -4331,7 +4335,10 @@ Begin
|
|||
// Session.SystemLog('DEBUG: Archiving QWK packet');
|
||||
|
||||
If Session.LocalMode Then Begin
|
||||
FileErase (Config.QWKPath + Temp);
|
||||
|
||||
Session.FileBase.ExecuteArchive (Config.QWKPath + Temp, Session.User.ThisUser.Archive, Session.TempPath + '*', 1);
|
||||
|
||||
Session.io.OutFullLn (Session.GetPrompt(235));
|
||||
End Else Begin
|
||||
// Session.SystemLog('DEBUG: Arc QWK: Nonlocal mode');
|
||||
|
|
|
@ -76,7 +76,7 @@ Type
|
|||
DateRcvd : LongInt;
|
||||
DateArrived : LongInt;
|
||||
MsgNum : LongInt;
|
||||
Attr1 : LongInt;
|
||||
Attr1 : Cardinal;
|
||||
Attr2 : LongInt;
|
||||
TextOfs : LongInt;
|
||||
TextLen : LongInt;
|
||||
|
@ -238,7 +238,7 @@ Type
|
|||
Procedure MsgTxtStartUp; Virtual; {Do message text start up tasks}
|
||||
Function GetTxtPos : LongInt; Virtual; {Get indicator of msg 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 WriteIdx : Word;
|
||||
Procedure AddSubField (id: Word; Data: String);
|
||||
|
@ -371,7 +371,7 @@ Begin
|
|||
JM^.MsgTime := STime;
|
||||
End;
|
||||
|
||||
Procedure TMsgBaseJAM.SetAttr1 (Mask: LongInt; St: Boolean);
|
||||
Procedure TMsgBaseJAM.SetAttr1 (Mask: Cardinal; St: Boolean);
|
||||
Begin
|
||||
If St Then
|
||||
MsgHdr^.JamHdr.Attr1 := MsgHdr^.JamHdr.Attr1 Or Mask
|
||||
|
|
|
@ -45,7 +45,7 @@ Type
|
|||
End;
|
||||
|
||||
SqFrameHdrType = Record
|
||||
Id : LongInt; { Must equal SqHdrId }
|
||||
Id : Cardinal; { Must equal SqHdrId }
|
||||
NextFrame : LongInt; { Next msg frame }
|
||||
PrevFrame : LongInt; { Prior msg frame }
|
||||
FrameLength : LongInt; { Length of this frame not counting header }
|
||||
|
|
|
@ -96,7 +96,7 @@ Var
|
|||
cfg_ExecPath : String[160];
|
||||
cfg_ExecUser : String[35];
|
||||
cfg_ExecPW : String[20];
|
||||
cfg_TextString : Byte;
|
||||
// cfg_TextString : Byte;
|
||||
cfg_TextKeyword : Byte;
|
||||
cfg_TextComment : Byte;
|
||||
cfg_TextNormal : Byte;
|
||||
|
@ -136,11 +136,9 @@ Type
|
|||
CutTextRec = String[255];
|
||||
|
||||
Var
|
||||
CutPasted : Boolean = False;
|
||||
CutTextPos : Word = 0;
|
||||
CutText : Array[1..MaxCutText] of CutTextPTR;
|
||||
|
||||
Var
|
||||
CutPasted : Boolean = False;
|
||||
CutTextPos : Word = 0;
|
||||
CutText : Array[1..MaxCutText] of CutTextPTR;
|
||||
Console : TOutput;
|
||||
Input : TInput;
|
||||
StartDir : String;
|
||||
|
@ -1855,7 +1853,7 @@ Begin
|
|||
cfg_ExecPW := INI.ReadString('Execute', 'password', 'Guest');
|
||||
cfg_TextNormal := INI.ReadInteger('Colors', 'syn_normal', 30);
|
||||
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_TextComment := INI.ReadInteger('Colors', 'syn_comment', 23);
|
||||
cfg_TextHex := INI.ReadInteger('Colors', 'syn_hex', 28);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
Unit MIS_Client_FTP;
|
||||
|
||||
{$I M_OPS.PAS}
|
||||
|
||||
{.$DEFINE FTPDEBUG}
|
||||
|
||||
// does not send file/directory datestamps
|
||||
|
@ -281,7 +282,7 @@ Begin
|
|||
WaitSock.FTelnetServer := False;
|
||||
WaitSock.FTelnetClient := False;
|
||||
|
||||
WaitSock.WaitInit(DataPort);
|
||||
WaitSock.WaitInit(bbsConfig.inetInterface, DataPort);
|
||||
|
||||
DataSocket := WaitSock.WaitConnection;
|
||||
|
||||
|
@ -446,20 +447,23 @@ Begin
|
|||
|
||||
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) + ').');
|
||||
|
||||
IsPassive := True;
|
||||
|
||||
WaitSock := TIOSocket.Create;
|
||||
WaitSock := TIOSocket.Create;
|
||||
|
||||
WaitSock.FTelnetServer := False;
|
||||
WaitSock.FTelnetClient := False;
|
||||
|
||||
{$IFDEF FTPDEBUG} LOG('PASV Init'); {$ENDIF}
|
||||
|
||||
WaitSock.WaitInit(DataPort);
|
||||
WaitSock.WaitInit(bbsConfig.inetInterface, DataPort);
|
||||
|
||||
{$IFDEF FTPDEBUG} LOG('PASV Wait'); {$ENDIF}
|
||||
|
||||
|
@ -765,7 +769,7 @@ Begin
|
|||
|
||||
WaitSock := TIOSocket.Create;
|
||||
|
||||
WaitSock.WaitInit(DataPort);
|
||||
WaitSock.WaitInit(bbsConfig.inetInterface, DataPort);
|
||||
|
||||
DataSocket := WaitSock.WaitConnection;
|
||||
|
||||
|
@ -813,7 +817,10 @@ Begin
|
|||
Else
|
||||
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 = 'CWD' Then cmdCWD Else
|
||||
|
|
|
@ -17,7 +17,7 @@ Const
|
|||
Type
|
||||
TServerManager = 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)
|
||||
Critical : TRTLCriticalSection;
|
||||
|
@ -37,7 +37,7 @@ Type
|
|||
Port : LongInt;
|
||||
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;
|
||||
Procedure Execute; Override;
|
||||
Procedure Status (Str: String);
|
||||
|
@ -60,7 +60,7 @@ Uses
|
|||
m_Strings,
|
||||
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
|
||||
Count : Byte;
|
||||
Begin
|
||||
|
@ -82,7 +82,7 @@ Begin
|
|||
ClientList := TList.Create;
|
||||
TextPath := Config.DataPath;
|
||||
NodeInfo := ND;
|
||||
Config := Config;
|
||||
Config := Cfg;
|
||||
|
||||
For Count := 1 to ClientMax Do
|
||||
ClientList.Add(NIL);
|
||||
|
@ -201,7 +201,7 @@ Begin
|
|||
Repeat Until Server <> NIL; // Synchronize with server class
|
||||
Repeat Until ServerStatus <> NIL; // Syncronize with status class
|
||||
|
||||
Server.WaitInit(Port);
|
||||
Server.WaitInit(Config.inetInterface, Port);
|
||||
|
||||
If Terminated Then Exit;
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@
|
|||
PurgeMessageBases = false
|
||||
PostTextFiles = false
|
||||
PackMessageBases = false
|
||||
ImportEchoMail = true
|
||||
ImportEchoMail = false
|
||||
ExportEchoMail = false
|
||||
|
||||
; ==========================================================================
|
||||
|
|
|
@ -2,37 +2,6 @@ Unit MUTIL_Common;
|
|||
|
||||
{$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
|
||||
|
||||
Uses
|
||||
|
@ -339,7 +308,9 @@ Begin
|
|||
Inc (Count);
|
||||
End;
|
||||
|
||||
ShellDOS ('', Temp);
|
||||
Log (3, '!', 'Arc Result (' + strI2S(ShellDOS('', Temp)) + ') ' + Temp);
|
||||
|
||||
// ShellDOS ('', Temp);
|
||||
End;
|
||||
|
||||
Function GetMBaseByIndex (Num: LongInt; Var TempBase: RecMessageBase) : Boolean;
|
||||
|
@ -533,7 +504,10 @@ End;
|
|||
|
||||
Function GetFTNFlowName (Dest: RecEchoMailAddr) : String;
|
||||
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;
|
||||
|
||||
Function IsFTNPrimary (EchoNode: RecEchoMailNode) : Boolean;
|
||||
|
@ -558,6 +532,9 @@ Begin;
|
|||
Result := bbsConfig.OutboundPath
|
||||
Else
|
||||
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;
|
||||
|
||||
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 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;
|
||||
Var
|
||||
Zone : String;
|
||||
|
@ -622,10 +642,9 @@ Function GetNodeByRoute (Dest: RecEchoMailAddr; Var TempNode: RecEchoMailNode) :
|
|||
|
||||
Result := True;
|
||||
End;
|
||||
|
||||
*)
|
||||
Var
|
||||
Mask : String = '';
|
||||
IsNot : Boolean;
|
||||
OneRes : Boolean;
|
||||
|
||||
Procedure GetNextAddress;
|
||||
|
@ -694,6 +713,10 @@ Var
|
|||
Begin
|
||||
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
|
||||
Result := (bbsConfig.NetAddress[Count].Zone = Zone) And
|
||||
(bbsConfig.NetAddress[Count].Net = Net) And
|
||||
|
|
|
@ -122,8 +122,7 @@ Implementation
|
|||
|
||||
Constructor TPKTDupe.Create (Max: Cardinal);
|
||||
Var
|
||||
F : File;
|
||||
RS : Cardinal;
|
||||
F : File;
|
||||
Begin
|
||||
Inherited Create;
|
||||
|
||||
|
|
|
@ -54,7 +54,6 @@ End;
|
|||
Procedure BundleMessages;
|
||||
Var
|
||||
F : File;
|
||||
T : Text;
|
||||
PH : RecPKTHeader;
|
||||
DirInfo : SearchRec;
|
||||
NodeIndex : LongInt;
|
||||
|
@ -156,9 +155,10 @@ Var
|
|||
Begin
|
||||
// if msg originated from this echomail address then do not export
|
||||
|
||||
If (EchoNode.Address.Zone = MsgBase^.GetOrigAddr.Zone) and
|
||||
(EchoNode.Address.Net = MsgBase^.GetOrigAddr.Net) and
|
||||
(EchoNode.Address.Node = MsgBase^.GetOrigAddr.Node) Then Exit;
|
||||
If (EchoNode.Address.Zone = MsgBase^.GetOrigAddr.Zone) and
|
||||
(EchoNode.Address.Net = MsgBase^.GetOrigAddr.Net) and
|
||||
(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));
|
||||
|
||||
|
@ -257,7 +257,7 @@ Var
|
|||
If MBase.NetType = 3 Then
|
||||
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;
|
||||
|
||||
|
|
|
@ -68,7 +68,6 @@ Var
|
|||
TotalEcho : LongInt;
|
||||
TotalNet : LongInt;
|
||||
TotalDupes : LongInt;
|
||||
EchoNode : RecEchoMailNode;
|
||||
DupeIndex : LongInt;
|
||||
DupeMBase : RecMessageBase;
|
||||
CreateBases : Boolean;
|
||||
|
|
|
@ -63,7 +63,6 @@ Var
|
|||
UserTotal : Cardinal;
|
||||
Link : RecMsgLink;
|
||||
Count : Cardinal;
|
||||
Addr : RecEchoMailAddr;
|
||||
Begin
|
||||
FileMode := 66;
|
||||
BaseKills := 0;
|
||||
|
|
|
@ -325,7 +325,8 @@ Type
|
|||
//EmailValidationLevel
|
||||
//AllowEmailPWReset
|
||||
ForceNodeList : Boolean;
|
||||
Reserved : Array[1..811] of Char;
|
||||
inetInterface : String[23];
|
||||
Reserved : Array[1..787] of Char;
|
||||
End;
|
||||
|
||||
Const
|
||||
|
|
|
@ -34,12 +34,10 @@ FUTURE / IDEAS / WORK IN PROGRESS / NOTES
|
|||
- PGUP/DOWN moves bases in message base editor?
|
||||
- AreaFix
|
||||
- Echomail export saves last scanned pointers
|
||||
- Echomail export support for points
|
||||
- Echomail export support for netmail routing
|
||||
- FileFix / TIC
|
||||
- Add "Add Export To" to global msgbase editor. Also Del Export?
|
||||
! Use NetReply in RecMB also Reply to another base
|
||||
- cut/paste needs to be added back into the FS editor
|
||||
! Use NetReply in RecMB also Reply to another base?
|
||||
- QWK put/get per individual users via FTP
|
||||
- EXCLUDE from all files list. important.
|
||||
- Reply to echomail via netmail.
|
||||
|
|
|
@ -3308,4 +3308,17 @@
|
|||
+ Further optimized the on-the-fly ANSI optimization generated by Mystic. I
|
||||
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>
|
||||
|
|
Loading…
Reference in New Issue