<> <> <> <> DIRECTORY Rope USING [ROPE]; GVBasics: CEDAR DEFINITIONS = BEGIN <> <> <> GVString: TYPE = Rope.ROPE; maxGVStringLength: CARDINAL = 64; <> RName: TYPE = GVString; maxRNameLength: CARDINAL = maxGVStringLength; <<"Connect" is the representation of a connect-site for an individual>> <<(typically a server). It is a string which is either an NLS name>> <> Connect: TYPE = GVString; maxConnectLength: CARDINAL = maxGVStringLength; <<"Remark" is the representation of a remark associated with a group,>> <> Remark: TYPE = GVString; maxRemarkLength: CARDINAL = maxGVStringLength; <<"Password" is the representation of an individual's encryption key. It is intended to be used with the DES encryption algorithm. Note that this is not the same as DESFace.Key (today), not even if you use LOOPHOLE.>> Password: TYPE = ARRAY[0..3] OF CARDINAL; MakeKey: PROC[Rope.ROPE] RETURNS[ Password ]; -- The following definitions are concerned with the layout of "message bodies". A message body is the internal representation of a message within and between mail servers. It is also sent to the client when he retrieves his mail. A message body contains a number of "items". Items are used to represent such things as postmark, recipients, sender, as well as the message text (if any), or other content of the message such as audio or capabilities. Some items are mandatory and always occur precisely once, others may occur any number of times (including zero). Each Item has a header, followed by the number of bytes of data specified by the header, followed by an extra byte if its length is odd. Thus items always start at a word boundary. A complete message body consists of the mandatory items followed by the optional ones. -- -- Time stamps: used as UID's for messages and for database updates -- Timestamp: TYPE = MACHINE DEPENDENT RECORD[ net: [0..256), -- the PUP net number -- host: [0..256), -- the PUP host number -- time: PackedTime]; PackedTime: TYPE = LONG CARDINAL; <> -- 1901 GMT -- oldestTime: Timestamp = [net:0, host:0, time:0]; RopeFromTimestamp: PROC[Timestamp] RETURNS[Rope.ROPE]; <> <> ItemHeader: TYPE = MACHINE DEPENDENT RECORD[ type: ItemType, length: ItemLength ]; <> <> <> -- followed by an extra byte if its length is odd. -- Item: TYPE = REF ItemHeader; ItemLength: TYPE = INT; -- Number of data bytes in the item, excluding header-- ItemType: TYPE = MACHINE DEPENDENT { <> PostMark(10B), <> Sender(20B), <> ReturnTo(30B), <> Recipients(40B), <> <> Text(1010B), <> Capability(1020B), <> Audio(1030B), <> <> updateItem(2000B), <> reMail(2100B), <> <> LastItem(LAST[CARDINAL]) <> }; END.