-- 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.