<<>> <> <> <> <> DIRECTORY CHOpsP2V3 USING [all, Item, nullProperty, Properties, Property], Rope USING [ROPE], XNS USING [Address, unknownAddress], XNSAuth USING [Identity], XNSCHName USING [Name]; XNSCH: CEDAR DEFINITIONS ~ { OPEN CHOps: CHOpsP2V3; <> ROPE: TYPE ~ Rope.ROPE; <> Name: TYPE ~ XNSCHName.Name; -- valid name (or alias) of object Pattern: TYPE ~ Name; -- may contain wildcards Element: TYPE ~ Name; -- element of a group, needn't name an object PropertyID: TYPE ~ CHOps.Property; notUsable: PropertyID ~ CHOps.nullProperty; unspecified: PropertyID ~ CHOps.all; Properties: TYPE ~ CHOps.Properties; Item: TYPE ~ CHOps.Item; <> Conversation: TYPE ~ REF ConversationObject; ConversationObject: TYPE; NameStreamProc: TYPE ~ PROC [Element]; <> ElementStreamProc: TYPE ~ PROC [Element]; <> EnumeratorProc: TYPE ~ PROC [ElementStreamProc]; <> <<>> <> alias: CARD32 ~ 1; aliases: CARD32 ~ 2; <<>> <> <> InitiateConversation: PROC [identity: XNSAuth.Identity ¬ NIL, server: XNS.Address ¬ XNS.unknownAddress] RETURNS [Conversation]; <> <> <> <> <> TerminateConversation: PROC [c: Conversation]; <> <> Add: PROC [c: Conversation, name: Name]; <> Delete: PROC [c: Conversation, name: Name]; <> Lookup: PROC [c: Conversation, pattern: Pattern] RETURNS [distingName: Name]; <> AddAlias: PROC [c: Conversation, name, alias: Name] RETURNS [distingName: Name]; <> DeleteAlias: PROC [c: Conversation, alias: Name] RETURNS [distingName: Name]; <> ListAliases: PROC [c: Conversation, pattern: Pattern, eachAlias: NameStreamProc] RETURNS [distingName: Name]; <> <> GetProperties: PROC [c: Conversation, pattern: Pattern] RETURNS [distingName: Name, properties: Properties]; <> DeleteProperty: PROC [c: Conversation, name: Name, pID: PropertyID] RETURNS [distingName: Name]; <> AddItemProperty: PROC [c: Conversation, name: Name, pID: PropertyID, item: Item] RETURNS [distingName: Name]; <> ChangeItemProperty: PROC [c: Conversation, name: Name, pID: PropertyID, item: Item] RETURNS [distingName: Name]; <> LookupItemProperty: PROC [c: Conversation, pattern: Pattern, pID: PropertyID] RETURNS [distingName: Name, item: Item]; <> LookupAddress: PROC [c: Conversation, pattern: Pattern] RETURNS [distingName: Name, address: XNS.Address]; <> LookupRopeProperty: PROC [c: Conversation, pattern: Pattern, pID: PropertyID] RETURNS [distingName: Name, ropeProperty: ROPE]; <> LookupNameProperty: PROC [c: Conversation, pattern: Pattern, pID: PropertyID] RETURNS [distingName: Name, nameProperty: Name]; <> AddGroupProperty: PROC [c: Conversation, name: Name, pID: PropertyID, enumerator: EnumeratorProc ¬ NIL] RETURNS [distingName: Name]; <> AddMember: PROC [c: Conversation, name: Name, pID: PropertyID, member: Element] RETURNS [distingName: Name]; <> AddSelf: PROC [c: Conversation, name: Name, pID: PropertyID] RETURNS [distingName: Name]; <> DeleteMember: PROC [c: Conversation, name: Name, pID: PropertyID, member: Element] RETURNS [distingName: Name]; <> DeleteSelf: PROC [c: Conversation, name: Name, pID: PropertyID] RETURNS [distingName: Name]; <> ListMembers: PROC [c: Conversation, pattern: Pattern, pID: PropertyID, eachMember: ElementStreamProc] RETURNS [distingName: Name]; <> IsMember: PROC [c: Conversation, pattern: Pattern, pID: PropertyID, member: Element] RETURNS [distingName: Name, isMember: BOOL]; <> IsMemberClosure: PROC [c: Conversation, pattern: Pattern, pID: PropertyID, member: Element, pID2: PropertyID ¬ unspecified] RETURNS [distingName: Name, isMember: BOOL]; <> <> Enumerate: PROC [c: Conversation, pattern: Pattern, pID: PropertyID, eachObject: NameStreamProc]; <> EnumerateAliases: PROC [c: Conversation, pattern: Pattern, eachName: NameStreamProc]; <> EnumerateOrganizations: PROC [c: Conversation, pattern: Pattern, eachOrganization: ElementStreamProc]; <> <> EnumerateDomains: PROC [c: Conversation, pattern: Pattern, eachDomain: ElementStreamProc]; <> <> <> LookupAddressFromRope: PROC [rope: ROPE] RETURNS [distingName: Name, address: XNS.Address]; <> <<>> LookupAddressFromRopeClosure: PROC [rope: Rope.ROPE] RETURNS [distingName: XNSCHName.Name, address: XNS.Address, didClosure: BOOL]; <> <> <> GetServerAddresses: PROC [c: Conversation] RETURNS [addresses: LIST OF XNS.Address]; <> EnumerateDomainsServed: PROC [c: Conversation, eachDomain: ElementStreamProc]; <> <> <> AddressesFromItem: PROC [item: Item] RETURNS [addresses: LIST OF XNS.Address]; ItemFromAddresses: PROC [addresses: LIST OF XNS.Address] RETURNS [item: Item]; RopeFromItem: PROC [item: Item] RETURNS [rope: ROPE]; ItemFromRope: PROC [rope: ROPE] RETURNS [item: Item]; ElementFromItem: PROC [item: Item] RETURNS [element: Element]; ItemFromElement: PROC [element: Element] RETURNS [item: Item]; BestAddressInList: PUBLIC PROC [list: LIST OF XNS.Address] RETURNS [bestAddress: XNS.Address]; <> WrongServerError: VAR ERROR [hint: Name]; <<_ CHOps.WrongServer.>> <> Error: ERROR [code: ErrorCode, which: Which]; <> <> < error only occurs on call directed to a specific CH Server.>> ErrorCode: TYPE ~ { <> notAllowed, allDown, wasUpNowDown, protocolError, cantConnectToServer, -- (*) communicationFailure, -- (*) serverTooBusy, -- (*) serviceNotExported, -- (*) <> illegalPropertyID, illegalOrganizationName, illegalDomainName, illegalObjectName, noSuchOrganization, noSuchDomain, noSuchObject, <> propertyIDNotFound, wrongPropertyType, <> noChange, outOfDate, overflowOfName, overflowOfDataBase, <> credentialsInvalid, credentialsTooWeak, <> inappropriateConversation, <> unknown }; Which: TYPE ~ { first, second }; }.