-- FTPPrivateDefs.mesa, Edited by: HGM July 31, 1980 12:07 AM -- Copyright Xerox Corporation 1979, 1980 DIRECTORY FTPDefs, Ascii USING [CR]; FTPPrivateDefs: DEFINITIONS -- share list SHARES FTPDefs = BEGIN OPEN FTPDefs; -- **********************! System Generation Parameters !*********************** -- maximum string length (in characters) maxStringLength: CARDINAL = 128; maxDateLength: CARDINAL = 22; -- dd-mmm-yy hh:mm:ss zzz -- default buffer size (in pages) defaultBufferSize: CARDINAL = 4; -- timeout intervals (in seconds) responseFromServerSeconds: CARDINAL = LAST[CARDINAL]; responseFromUserSeconds: CARDINAL = 180; -- trace characters outgoingTraceIndicator: CHARACTER = '>; incomingTraceIndicator: CHARACTER = '<; traceByteLeftDelimiter: CHARACTER = '{; traceByteRightDelimiter: CHARACTER = '}; -- miscellaneous characters insigniaSeparator: CHARACTER = Ascii.CR; majorMinorSeparator: CHARACTER = '.; spooledPropertyTerminator: CHARACTER = '); -- **********************! Protocol Parameters !*********************** -- protocol version numbers ftpVersion: Byte = 1; mtpVersion: Byte = 1; -- well known socket numbers ftpSocket: CARDINAL = 3; mtpSocket: CARDINAL = 7; -- mark byte commands markMinimum: Byte = 1B; markRetrieve: Byte = 1B; markStore: Byte = 2B; markYes: Byte = 3B; markNo: Byte = 4B; markHereIsFile: Byte = 5B; markEndOfCommand: Byte = 6B; markComment: Byte = 7B; markIAmVersion: Byte = 10B; markNewStore: Byte = 11B; markDirectory: Byte = 12B; markHereIsPropertyList: Byte = 13B; markYouAreUser: Byte = 14B; markAbort: Byte = 15B; markDelete: Byte = 16B; markRename: Byte = 17B; markStoreMail: Byte = 20B; markRetrieveMail: Byte = 21B; markFlushMailbox: Byte = 22B; markMailboxException: Byte = 23B; markMaximum: Byte = 23B; -- no reply codes codeMinimum: Byte = 1B; codeCommandUndefined: Byte = 1B; codeMissingUserName: Byte = 2B; codeCommandIllegal: Byte = 3B; codeMalformedPropertyList: Byte = 10B; codeIllegalServerFilename: Byte = 11B; codeIllegalDirectory: Byte = 12B; codeIllegalNameBody: Byte = 13B; codeIllegalVersion: Byte = 14B; codeIllegalType: Byte = 15B; codeIllegalByteSize: Byte = 16B; codeIllegalEndOfLineConvention: Byte = 17B; codeIllegalUserName: Byte = 20B; codeBadUserPassword: Byte = 21B; codeBadUserAccount: Byte = 22B; codeIllegalConnectName: Byte = 23B; codeBadConnectPassword: Byte = 24B; codeIllegalCreationDate: Byte = 25B; codeIllegalWriteDate: Byte = 26B; codeIllegalReadDate: Byte = 27B; codeIllegalAuthor: Byte = 30B; codeIllegalDevice: Byte = 31B; codeNoValidMailbox: Byte = 40B; codeIllegalMailbox: Byte = 41B; codeFileNotFound: Byte = 100B; codeRequestedAccessDenied: Byte = 101B; codeTransferParametersInconsistent: Byte = 102B; codeFileDataError: Byte = 103B; codeStorageExhausted: Byte = 104B; codeDontSendFile: Byte = 105B; codeStoreNotCompleted: Byte = 106B; codeUnidentifiedTransientError: Byte = 107B; codeUnidentifiedPermanentError: Byte = 110B; codeFileBusy: Byte = 111B; codeFileAlreadyExists: Byte = 112B; codeMaximum: Byte = 112B; -- mailbox exception codes excpMinimum: Byte = 0B; excpUnspecifiedFailure: Byte = 0B; excpCannotLocateMailbox: Byte = 1B; excpNoForwardingProvided: Byte = 2B; excpTransientError: Byte = 3B; excpPermanentError: Byte = 4B; excpMaximum: Byte = 4B; -- property list delimiters propertyListLeftDelimiter: CHARACTER = '(; propertyListRightDelimiter: CHARACTER = '); propertyLeftDelimiter: CHARACTER = '(; propertyNameValueSeparator: CHARACTER = ' ; propertyRightDelimiter: CHARACTER = '); propertyEscape: CHARACTER = ''; -- dump file block types blockDate: Byte = 373B; blockEnd: Byte = 374B; blockError: Byte = 375B; blockData: Byte = 376B; blockName: Byte = 377B; -- miscellaneous minimumDumpBlockSize: CARDINAL = 2; maximumDumpBlockSize: CARDINAL = 256; mailboxExceptionIndexTerminator: CHARACTER = ' ; -- **********************! Internal State !*********************** -- system state information FTPSystem: TYPE = POINTER TO FTPSystemObject; FTPSystemObject: TYPE = RECORD [ propertyNames: ARRAY Property OF STRING, userFilesLoaded, userMailLoaded, serverFilesLoaded, serverMailLoaded, accessoriesLoaded: BOOLEAN, bufferSize: CARDINAL, catchUnidentifiedErrors: BOOLEAN]; -- server state information FTPServer: TYPE = POINTER TO FTPServerObject; FTPServerObject: TYPE = RECORD [ ftplistener: FTPListener, serverQueueElementObject: ElementObject, purpose: Purpose, fileSystem: FileSystem, mailSystem: MailSystem, forwardingProvided, enqueued: BOOLEAN, ftper: FTPer, propertyList: PropertyList]; -- dump state information DumpState: TYPE = POINTER TO DumpStateObject; DumpStateObject: TYPE = RECORD [ bufferAddress: POINTER, bufferLength: CARDINAL, ftper: FTPer, blockType: Byte]; -- checksum state information ChecksumState: TYPE = POINTER TO ChecksumStateObject; ChecksumStateObject: TYPE = RECORD [ checksum: CARDINAL, anyExcessByte: BOOLEAN, excessByte: Byte]; -- event state information Event: TYPE = POINTER TO EventObject; EventObject: TYPE = MONITORED RECORD [ fact: BOOLEAN, hint: CONDITION]; -- word Word: TYPE = POINTER TO WordObject; WordObject: TYPE = MACHINE DEPENDENT RECORD [lhByte, rhByte: Byte]; -- **********************! User Procedures !*********************** -- common VerifyPurposeAndState: PROCEDURE [ftpuser: FTPUser, expectedPurpose: Purpose, expectedState: UserState]; -- files UserFilesLoaded: PROCEDURE; FinishMultiFileOperation: PROCEDURE [ftpuser: FTPUser]; -- dump SendHeaderBlock: PROCEDURE [dumpState: DumpState, fileName, creation : STRING]; DumpBlock: PROCEDURE [ dumpState: DumpState, source: POINTER, byteCount: CARDINAL]; LoadBlock: PROCEDURE [ dumpState: DumpState, destination: POINTER, maxWordCount: CARDINAL] RETURNS [actualByteCount: CARDINAL]; -- mail UserMailLoaded: PROCEDURE; -- **********************! Server Procedures !*********************** -- files ServerFilesLoaded: PROCEDURE; PTFDirectory: PROCEDURE [ftpserver: FTPServer]; PTFStore: PROCEDURE [ftpserver: FTPServer, mark: Byte]; PTFRetrieve, PTFDelete, PTFRename: PROCEDURE [ftpserver: FTPServer]; -- mail ServerMailLoaded: PROCEDURE; PTFStoreMail, PTFRetrieveMail: PROCEDURE [ftpserver: FTPServer]; -- **********************! Utilities !*********************** -- system foothold procedure LocateFtpSystemObject: PROCEDURE RETURNS [POINTER TO FTPSystem]; -- transmission primitives CreateFTPer: PROCEDURE [communicationPrimitives: CommunicationPrimitives, communicationSystem: CommunicationSystem] RETURNS [ftper: FTPer]; DestroyFTPer: PROCEDURE [ftper: FTPer]; SendBlock: PROCEDURE [ftper: FTPer, source: POINTER, byteCount: CARDINAL]; ReceiveBlock: PROCEDURE [ ftper: FTPer, destination: POINTER, maxWordCount: CARDINAL] RETURNS [actualByteCount: CARDINAL]; SendBytes, ReceiveBytes: PROCEDURE [ftper: FTPer, bytePointer: BytePointer]; SendWord: PROCEDURE [ftper: FTPer, word: WORD]; ReceiveWord: PROCEDURE [ftper: FTPer] RETURNS [word: WORD]; SendByte: PROCEDURE [ftper: FTPer, byte: Byte]; ReceiveByte: PROCEDURE [ftper: FTPer] RETURNS [byte: Byte]; -- byte primitives TransferBytes: PROCEDURE [srcBytePointer, dstBytePointer: BytePointer]; AdvanceBytePointer: PROCEDURE [bytePointer: BytePointer, byteCount: CARDINAL]; -- queue primitives InitializeQueue: PROCEDURE [queue: Queue, identifiersCoincide: IdentifiersCoincide]; FinalizeQueue: PROCEDURE [queue: Queue]; EnQueue: PROCEDURE [queue: Queue, element: Element, identifier: UNSPECIFIED] RETURNS [enqueuedElement: Element]; DeQueue: PROCEDURE [queue: Queue, element: Element]; LockQueue: PROCEDURE [queue: Queue, element: Element, exclusive: BOOLEAN]; UnlockQueue: PROCEDURE [queue: Queue, element: Element]; EnumerateQueue: PROCEDURE [ queue: Queue, processElement: PROCEDURE [Element] RETURNS [BOOLEAN]] RETURNS [element: Element]; -- parallel processing primitives ForkTransferPair: PROCEDURE [ fileSystem: FileSystem, readFile: PROCEDURE [FileSystem, FileHandle, PROCEDURE [UNSPECIFIED, POINTER, CARDINAL], UNSPECIFIED], srcFileHandle: FileHandle, writeFile: PROCEDURE [FileSystem, FileHandle, PROCEDURE [UNSPECIFIED, POINTER, CARDINAL] RETURNS [CARDINAL], UNSPECIFIED], dstFileHandle: FileHandle]; ForkProcessPair: PROCEDURE [ process: PROCEDURE [UNSPECIFIED], parameter1, parameter2: UNSPECIFIED]; -- error primitives Abort: PROCEDURE [ftpError: FtpError]; AbortWithExplanation: PROCEDURE [ftpError: FtpError, message: STRING]; -- **********************! Protocol Procedures !*********************** -- command/response shorthands PutGetVersion: PROCEDURE [ftper: FTPer, version: Byte]; GetAnswerAndEOC: PROCEDURE [ftper: FTPer] RETURNS [answer: BOOLEAN]; GetYesAndEOC: PROCEDURE [ftper: FTPer]; GetSpecificCommand: PROCEDURE [ftper: FTPer, specificMark: Byte]; PutCommandAndEOC: PROCEDURE [ftper: FTPer, mark, code: Byte]; GetCommandAndEOC: PROCEDURE [ftper: FTPer] RETURNS [mark, code: Byte]; PutEOC, GetEOC: PROCEDURE [ftper: FTPer]; -- command/response primitives PutCommand: PROCEDURE [ftper: FTPer, mark, code: Byte]; GetCommand: PROCEDURE [ftper: FTPer] RETURNS [mark, code: Byte]; PutPropertyList, GetPropertyList: PROCEDURE [ftper: FTPer, propertyList: PropertyList]; PutString: PROCEDURE [ftper: FTPer, string: STRING]; GetString: PROCEDURE [ftper: FTPer, string: STRING, terminator: UNSPECIFIED]; -- property list primitives CreatePropertyList: PROCEDURE RETURNS [propertyList: PropertyList]; DestroyPropertyList: PROCEDURE [propertyList: PropertyList]; CopyPropertyList: PROCEDURE [srcPropertyList, dstPropertyList: PropertyList]; ResetPropertyList: PROCEDURE [propertyList: PropertyList]; WriteProperty: PROCEDURE [ propertyList: PropertyList, property: Property, value: STRING]; EncodeBooleanProperty: PROCEDURE [boolean: BOOLEAN, property: STRING]; DecodeBooleanProperty: PROCEDURE [property: STRING] RETURNS [boolean: BOOLEAN]; -- filename primitives WriteFilename: PROCEDURE [file: STRING, propertyList: PropertyList, filePrimitives: FilePrimitives, fileSystem: FileSystem, userPropertyList: PropertyList]; ReadFilename: PROCEDURE [file: STRING, propertyList: PropertyList, filePrimitives: FilePrimitives, fileSystem: FileSystem]; WriteVirtualFilename: PROCEDURE [virtualFilename: VirtualFilename, propertyList: PropertyList, skipNullComponents: BOOLEAN]; ReadVirtualFilename: PROCEDURE [ virtualFilename: VirtualFilename, propertyList: PropertyList]; -- file attribute primitives ExamineCredentials: PROCEDURE [ propertyList: PropertyList, filePrimitives: FilePrimitives, fileSystem: FileSystem]; WriteFileInfo, ReadFileInfo: PROCEDURE [propertyList: PropertyList, fileInfo: FileInfo]; EncodeFileType: PROCEDURE [propertyList: PropertyList, fileType: FileType]; DecodeFileType: PROCEDURE [propertyList: PropertyList] RETURNS [fileType: FileType]; -- error primitives SignalToCode: PROCEDURE [ftpError: FtpError] RETURNS [code: Byte]; CodeToSignal: PROCEDURE [code: Byte] RETURNS [ftpError: FtpError]; RecipientErrorToExceptionCode: PROCEDURE [recipientError: RecipientError] RETURNS [exceptionCode: Byte]; ExceptionCodeToRecipientError: PROCEDURE [exceptionCode: Byte] RETURNS [recipientError: RecipientError]; -- event primitives PrepareEvent, PostEvent, AwaitEvent: PROCEDURE [event: Event]; -- **********************! Tracing !*********************** TraceOut: PUBLIC PROCEDURE [ftper: FTPer, mark: Byte]; TraceIn: PUBLIC PROCEDURE [ftper: FTPer]; TraceString: PUBLIC PROCEDURE [ftper: FTPer, string: STRING]; TraceCharacter: PROCEDURE [ftper: FTPer, character: CHARACTER]; -- **********************! Accessories !*********************** AccessoriesLoaded: PROCEDURE; VerbalizeFtpError: PROCEDURE [ftpError: FtpError, message: STRING]; VerbalizeRecipientError: PROCEDURE [recipientError: RecipientError, message: STRING]; -- **********************! Environment !*********************** bytesPerWord: CARDINAL = 2; wordsPerPage: CARDINAL = 256; -- **********************! Runtime Procedures !*********************** ReadCredentials: PROCEDURE [user, password: STRING]; ReadClock: PROCEDURE RETURNS [clock: INTEGER]; EnableDisplay, DisableDisplay: PROCEDURE; ConfirmProcedure: PROCEDURE [procedure: PROCEDURE] RETURNS [present: BOOLEAN]; CallProcedure: PROCEDURE [procedure: PROCEDURE RETURNS [UNSPECIFIED]] RETURNS [present: BOOLEAN, result: UNSPECIFIED]; HaltConfiguration: PROCEDURE; END. -- of FTPPrivateDefs