-- Transport mechanism: Client reading of R-Server database -- [Juniper]MS>NameInfoDefs.mesa -- Andrew Birrell 27-Oct-80 15:39:10 DIRECTORY BodyDefs USING[ Connect, oldestTime, Password, Remark, RName, Timestamp ]; NameInfoDefs: DEFINITIONS = BEGIN NameType: TYPE = { noChange, group, individual, notFound, allDown, badPwd }; -- represents the result states of enquiries -- -- "RLists" are sequences of R-Names returned from the server -- RListHandle: TYPE[SIZE[POINTER]]; Enumerate: PROC[list: RListHandle, work: PROC[BodyDefs.RName]RETURNS[done: BOOLEAN] ]; Close: PROC[list: RListHandle]; -- "Expand" returns mailbox site names for individuals, membership list -- for groups. If the old stamp is still current, returns "noChange". Will -- not return "noChange" if the old stamp is defaulted. -- ExpandInfo: TYPE = RECORD[ SELECT type: NameType[noChange..allDown] FROM noChange => NULL, group => [ members: RListHandle, stamp: BodyDefs.Timestamp ], individual => [ sites: RListHandle, stamp: BodyDefs.Timestamp ], notFound => NULL, allDown => NULL, ENDCASE ]; Expand: PROC[name: BodyDefs.RName, oldStamp: BodyDefs.Timestamp _ BodyDefs.oldestTime] RETURNS[ ExpandInfo ]; -- "GetMembers" returns the membership list for a group. If the old stamp -- is still current, returns "noChange". Will not return "noChange" if -- the old stamp is defaulted. -- MemberInfo: TYPE = RECORD[ SELECT type: NameType[noChange..allDown] FROM noChange => NULL, group => [ members: RListHandle, stamp: BodyDefs.Timestamp ], individual => NULL, notFound => NULL, allDown => NULL, ENDCASE ]; GetMembers: PROC[name: BodyDefs.RName, oldStamp: BodyDefs.Timestamp _ BodyDefs.oldestTime] RETURNS[ MemberInfo ]; GetOwners: PROC[name: BodyDefs.RName, oldStamp: BodyDefs.Timestamp _ BodyDefs.oldestTime] RETURNS[ MemberInfo ]; GetFriends: PROC[name: BodyDefs.RName, oldStamp: BodyDefs.Timestamp _ BodyDefs.oldestTime] RETURNS[ MemberInfo ]; -- "CheckStamp" performs basic name validation, also telling the caller the -- name type. If the old stamp is still current, returns "noChange". Will -- not return "noChange" if the old stamp is defaulted. -- StampInfo: TYPE = NameType[noChange..allDown]; CheckStamp: PROC[name: BodyDefs.RName, oldStamp: BodyDefs.Timestamp _ BodyDefs.oldestTime] RETURNS[ StampInfo ]; -- "GetConnect" returns the connect-site for an individual. "connect" is -- undisturbed if the result is not "individual". The connect-site is -- either an NLS name or a net-address. "connect.maxlength" should equal -- "BodyDefs.maxConnectLength". -- ConnectInfo: TYPE = NameType[group..allDown]; GetConnect: PROC[name: BodyDefs.RName, connect: BodyDefs.Connect] RETURNS[ ConnectInfo ]; -- "GetRemark" returns the remark for a group. "remark" is -- undisturbed if the result is not "group". The remark is a human readable -- string. "remark.maxlength" should equal "BodyDefs.maxRemarkLength". -- RemarkInfo: TYPE = NameType[group..allDown]; GetRemark: PROC[name: BodyDefs.RName, remark: BodyDefs.Remark] RETURNS[ RemarkInfo ]; -- "Authenticate" checks a user name and password. -- AuthenticateInfo: TYPE = NameType[group..badPwd]; Authenticate: PROC[name: BodyDefs.RName, password: STRING] RETURNS[ AuthenticateInfo ]; AuthenticateKey:PROC[name: BodyDefs.RName, key: BodyDefs.Password] RETURNS[ AuthenticateInfo ]; -- Access control primitives -- Membership: TYPE = { yes, no, notGroup, allDown }; IsMemberDirect: PROC[name: BodyDefs.RName, member: BodyDefs.RName] RETURNS[ Membership ]; IsOwnerDirect: PROC[name: BodyDefs.RName, owner: BodyDefs.RName] RETURNS[ Membership ]; IsFriendDirect: PROC[name: BodyDefs.RName, friend: BodyDefs.RName] RETURNS[ Membership ]; IsMemberClosure:PROC[name: BodyDefs.RName, member: BodyDefs.RName] RETURNS[ Membership ]; IsOwnerClosure: PROC[name: BodyDefs.RName, owner: BodyDefs.RName] RETURNS[ Membership ]; IsFriendClosure:PROC[name: BodyDefs.RName, friend: BodyDefs.RName] RETURNS[ Membership ]; END.