-- Transport Mechanism: User: Private DEFS for mail retrieval -- [Juniper]User>RetrieveXDefs.mesa -- Andrew Birrell September 1, 1982 3:16 pm DIRECTORY BodyDefs USING[ ItemHeader, Password, RName, Timestamp ], PupDefs USING[ PupAddress ], PupTypes USING[ Pair ], RetrieveDefs USING[ MBXState, ServerState, ServerType ], Stream USING[ Handle ]; RetrieveXDefs: DEFINITIONS = BEGIN -- The client's mailboxes are represented by a chain: -- MBXData: TYPE = RECORD[ next: MBXPtr, type: RetrieveDefs.ServerType, state: RetrieveDefs.ServerState, addrState: { unknown, known, bad }, replyWanted: BOOLEAN, addr: PupDefs.PupAddress, name: BodyDefs.RName ]; MBXPtr: TYPE = POINTER TO MBXData; noMBX: MBXPtr = NIL; -- The overall state of mail is represented by a HandleObject -- Handle: TYPE = POINTER TO HandleObject; HandleObject: TYPE = MONITORED RECORD[ -- list of the user's mailboxes -- MBXChain: MBXPtr, mbxKnown: BOOLEAN, -- whether user's mailbox sites are known -- notEmptyMBXCount: CARDINAL, unknownMBXCount: CARDINAL, -- user's registry type -- registry: RetrieveDefs.ServerType, -- Current state of mail reading: -- state: -- position in legal call sequences -- { -- GV states -- beforeMBX, beforeTOCr, beforeBody, inBody, beforeTOCw, afterMessage, afterMBX, -- MTP states -- end, beginning, message, lastItem, block, lastBlock, lastMessage }, spareByte: BOOLEAN, -- GV padding, or MTP odd-byte mess -- spareByteValue: CHARACTER, -- for MTP odd-byte mess -- header: BodyDefs.ItemHeader, -- header of current item -- currentMBX: MBXPtr, -- mailbox being read -- messages: CARDINAL, -- number of messages in the mailbox -- currentStr: Stream.Handle, -- stream to mailbox being read -- ftpUser: UNSPECIFIED, -- actually, FTPDefs.FTPUser except in Cedar -- -- State of mailbox polling: -- mbxState: RetrieveDefs.MBXState, polling: BOOLEAN, pollWanted: BOOLEAN, newPollWanted:BOOLEAN, pollReplying: BOOLEAN, mbxStateChange: CONDITION, pollCond: CONDITION, pollID: PupTypes.Pair, sendPoll: PROCESS, pollStarted: LONG CARDINAL, -- real time when poll last started -- -- Global information supplied by the client: -- interval: CARDINAL, -- polling interval, in seconds -- changes: PROCEDURE[RetrieveDefs.MBXState], userName: BodyDefs.RName, userPwd: STRING, userKey: BodyDefs.Password ]; -- Interface to mailbox polling: exported by RetrievePoll -- SendPollProcess: PROC[handle: Handle]; -- for forking to -- NoteChangedMBX: PROC[handle: Handle, mbx: MBXPtr, new: RetrieveDefs.ServerState]; -- changes handle.mbxState appropriately to reflect change in the -- known state of this mailbox -- SetMBXState: PROC[handle: Handle, state: RetrieveDefs.MBXState]; -- changes handle.mbxState to given value. -- -- Interface to obtain new info about user: exported by RetrieveInit -- FindRegistryAndMailboxes: PROC[handle: Handle]; -- determines registry type and mailbox locations -- FindAddress: PROC[handle: Handle, mbx: MBXPtr]; -- attempts to find mailboxes address (which must have been unknown) -- ServerAddress: PROC[handle: Handle] RETURNS[ PupDefs.PupAddress]; -- may signal Failed[communicationError] or Failed[noSuchServer] -- -- Procedures for access to mail on GV servers -- -- See "RetrieveDefs" for specifications of these procedures -- GVNextMessage: PROC[ handle: Handle ] RETURNS[ msgExists: BOOLEAN, archived: BOOLEAN, deleted: BOOLEAN ]; GVReadTOC: PROC[ handle: Handle, text: STRING]; GVStartMessage: PROC[ handle: Handle, postmark: POINTER TO BodyDefs.Timestamp _ NIL, sender: BodyDefs.RName _ NIL, returnTo: BodyDefs.RName _ NIL ]; GVNextItem: PROC[ handle: Handle ] RETURNS[ itemHeader: BodyDefs.ItemHeader ]; GVNextBlock: PROC[ handle: Handle, buffer: DESCRIPTOR FOR PACKED ARRAY OF CHARACTER ] RETURNS[ bytes: CARDINAL ]; GVWriteTOC: PROC[ handle: Handle, text: STRING]; GVDeleteMessage: PROC[ handle: Handle ]; GVAccept: PROC[ handle: Handle ]; GVClose: PROC[ handle: Handle ]; -- Close any stream created for this mailbox without deleting messages -- Does not complain if there is no stream. -- Procedures for access to mail on MTP servers -- -- See "RetrieveDefs" for specifications of these procedures -- MTPNextMessage: PROC[ handle: Handle ] RETURNS[ msgExists: BOOLEAN, archived: BOOLEAN, deleted: BOOLEAN ]; MTPNextItem: PROC[ handle: Handle ] RETURNS[ itemHeader: BodyDefs.ItemHeader ]; MTPNextBlock: PROC[ handle: Handle, buffer: DESCRIPTOR FOR PACKED ARRAY OF CHARACTER ] RETURNS[ bytes: CARDINAL ]; MTPAccept: PROC[ handle: Handle ]; MTPClose: PROC[ handle: Handle ]; -- Close any stream created for this mailbox without deleting messages -- Does not complain if there is no stream. END.