-- Transport mechanism: Client reading of R-Server database
-- [Juniper]<DMS>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.