This commit is contained in:
mysticbbs 2013-05-06 20:07:39 -04:00
parent cd4983db0b
commit cee65a7621
19 changed files with 178 additions and 138 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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');

View File

@ -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

View File

@ -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 }

View File

@ -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);

View File

@ -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

View File

@ -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;

View File

@ -71,7 +71,7 @@
PurgeMessageBases = false
PostTextFiles = false
PackMessageBases = false
ImportEchoMail = true
ImportEchoMail = false
ExportEchoMail = false
; ==========================================================================

View File

@ -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

View File

@ -122,8 +122,7 @@ Implementation
Constructor TPKTDupe.Create (Max: Cardinal);
Var
F : File;
RS : Cardinal;
F : File;
Begin
Inherited Create;

View File

@ -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;

View File

@ -68,7 +68,6 @@ Var
TotalEcho : LongInt;
TotalNet : LongInt;
TotalDupes : LongInt;
EchoNode : RecEchoMailNode;
DupeIndex : LongInt;
DupeMBase : RecMessageBase;
CreateBases : Boolean;

View File

@ -63,7 +63,6 @@ Var
UserTotal : Cardinal;
Link : RecMsgLink;
Count : Cardinal;
Addr : RecEchoMailAddr;
Begin
FileMode := 66;
BaseKills := 0;

View File

@ -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

View File

@ -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.

View File

@ -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>