-- FTPTrace.mesa - last edit: -- MAS May 19, 1980 6:09 PM -- HGM July 31, 1980 5:28 PM -- Copyright Xerox Corporation 1979, 1980 DIRECTORY FTPDefs, FTPPrivateDefs, String USING [AppendChar, AppendDecimal]; FTPTrace: PROGRAM IMPORTS String EXPORTS FTPDefs, FTPPrivateDefs SHARES FTPDefs = BEGIN OPEN FTPDefs, FTPPrivateDefs; FTPEnableTrace: PUBLIC PROCEDURE [ ftpuser: FTPUser, writeString: PROCEDURE [STRING]] = BEGIN OPEN ftpuser; -- enable tracing of both ftp and mtp protocol exchanges ftper.tracing ← mtper.tracing ← TRUE; ftper.directionOfLastTrace ← mtper.directionOfLastTrace ← in; -- note client's writeString procedure ftper.writeString ← mtper.writeString ← writeString; END; FTPDisableTrace: PUBLIC PROCEDURE [ftpuser: FTPUser] = BEGIN OPEN ftpuser; -- disable tracing of both ftp and mtp protocol exchanges ftper.tracing ← mtper.tracing ← FALSE; END; TraceOut: PUBLIC PROCEDURE [ftper: FTPer, mark: Byte] = BEGIN OPEN ftper; IF directionOfLastTrace = in THEN BEGIN TraceCharacter[ftper, outgoingTraceIndicator]; directionOfLastTrace ← out; END; TraceCharacter[ftper, LOOPHOLE[mark]]; END; TraceIn: PUBLIC PROCEDURE [ftper: FTPer] = BEGIN OPEN ftper; IF directionOfLastTrace = out THEN BEGIN TraceCharacter[ftper, incomingTraceIndicator]; directionOfLastTrace ← in; END; END; TraceString: PUBLIC PROCEDURE [ftper: FTPer, string: STRING] = BEGIN OPEN ftper; -- Note: Assumes tracing enabled. -- local constants traceString: STRING = [maxStringLength]; -- local variables i: CARDINAL; -- construct trace string FOR i IN [0..string.length) DO VerbalizeCharacter[traceString, string[i]]; ENDLOOP; -- output trace string writeString[traceString]; END; TraceCharacter: PUBLIC PROCEDURE [ftper: FTPer, character: CHARACTER] = BEGIN OPEN ftper; -- Note: Assumes tracing enabled. -- local constants traceString: STRING = [maxStringLength]; -- construct trace string VerbalizeCharacter[traceString, character]; -- output trace string writeString[traceString]; END; VerbalizeCharacter: PROCEDURE [string: STRING, character: CHARACTER] = BEGIN -- Note: Outputs decimal value of nonprinting characters. -- verbalize character SELECT character FROM IN [' ..'←], IN ['a..'~] => String.AppendChar[string, character]; ENDCASE => BEGIN String.AppendChar[string, traceByteLeftDelimiter]; String.AppendDecimal[string, LOOPHOLE[character, CARDINAL]]; String.AppendChar[string, traceByteRightDelimiter]; END; END; END. -- of FTPTrace