<<>> <> <> <> DIRECTORY CHOpsP2V3 USING [Authenticator], CrRPC USING [Handle], IO USING [STREAM], Rope USING [ROPE], XNS USING [Address, Host], XNSCH USING [Conversation, Element, Name] ; XNSCHPrivate: CEDAR DEFINITIONS ~ { OPEN CHOps: CHOpsP2V3; <> Authenticator: TYPE ~ CHOps.Authenticator; Conversation: TYPE ~ XNSCH.Conversation; Element: TYPE ~ XNSCH.Element; Handle: TYPE ~ CrRPC.Handle; Host: TYPE ~ XNS.Host; Name: TYPE ~ XNSCH.Name; ROPE: TYPE ~ Rope.ROPE; STREAM: TYPE ~ IO.STREAM; <> NACacheInsert: PROC [name: Name, distingName: Name, address: XNS.Address]; NACacheLookup: PROC [name: Name] RETURNS [found: BOOL, distingName: Name, address: XNS.Address]; <> GetAuthenticator: PROC [c: Conversation, host: Host] RETURNS [Authenticator]; IsGeneric: PROC [c: Conversation] RETURNS [BOOL]; <> <<(See CrRPC)>> <<>> GetElement: PROC [stream: STREAM] RETURNS [element: Element]; GetOrganization: PROC [stream: STREAM] RETURNS [element: Element]; <> GetDomain: PROC [stream: STREAM] RETURNS [element: Element]; <> PutElement: PROC [stream: STREAM, element: Element]; <> RemoteProc: TYPE ~ PROC[handle: Handle, host: Host]; CallRemote: PROC [c: Conversation, proc: RemoteProc, domain: ROPE ¬ NIL, idempotent: BOOL ¬ TRUE]; }...