+-- $Header: Clearinghouse2.cr,v 2.0 85/11/21 07:24:31 jqj Exp $ --
+
+-- $Log: Clearinghouse2.cr,v $
+-- Revision 2.0 85/11/21 07:24:31 jqj
+-- 4.3BSD standard release
+--
+-- Revision 1.5 85/05/23 06:20:51 jqj
+-- *** empty log message ***
+--
+-- Revision 1.5 85/05/23 06:20:51 jqj
+-- Public Beta-test version, released 24 May 1985
+--
+-- Revision 1.4 85/03/26 06:11:17 jqj
+-- Revised public alpha-test version, released 26 March 1985
+--
+-- Revision 1.3 85/03/11 16:43:58 jqj
+-- Public alpha-test version, released 11 March 1985
+--
+-- Revision 1.2 85/03/10 05:22:58 jqj
+-- Modified for UNIX: reordered declaratons to eliminate forward
+-- references, deleted recursive (StreamOf...) declarations, fixed
+-- lots of typos.
+--
+-- Revision 1.1 Initial revision - from Rochester
+
+Clearinghouse: PROGRAM 2 VERSION 2 =
+BEGIN
+ DEPENDS UPON
+ BulkData(0) VERSION 1,
+ Authentication (14) VERSION 1;
+
+-- TYPES AND CONSTANTS DESCRIBING NAMES --
+
+Organization: TYPE = STRING;
+Domain: TYPE = STRING;
+Object: TYPE = STRING;
+
+maxOrganizationsLength: CARDINAL = 20; -- in bytes --
+maxDomainLength: CARDINAL = 20; -- in bytes --
+maxObjectLength: CARDINAL = 40; -- in bytes --
+
+-- There can be no wildcard characters in any of the following types. --
+OrganizationName: TYPE = Organization;
+
+TwoPartName: TYPE = RECORD [
+ organization: Organization,
+ domain: Domain];
+
+DomainName: TYPE = TwoPartName;
+
+ThreePartName: TYPE = RECORD [
+ organization: Organization,
+ domain: Domain,
+ object: Object];
+
+ObjectName: TYPE = ThreePartName;
+
+Name: TYPE = ThreePartName;
+
+-- Wildcard characters are permittedin OrganizationNamePatterns. --
+OrganizationNamePattern: TYPE = Organization;
+
+-- Wildcard characters are permitted in the domain component of this type,
+-- but not in the organization component.
+DomainNamePattern: TYPE = TwoPartName;
+
+-- Wildcard characters are permitted in the object component of this type,
+-- but not in the organization and domain components.
+ObjectNamePattern: TYPE = ThreePartName;
+
+-- TYPES AND CONSTANTS DESCRIBING BULK PARAMETERS --
+
+StreamOfDomain: TYPE = CHOICE OF {
+ nextSegment (0) => RECORD [
+ segment: SEQUENCE OF Domain,
+ restOfStream: StreamOfDomain],
+ lastSegment (1) => SEQUENCE OF Domain};
+
+StreamOfDomainName: TYPE = CHOICE OF {
+ nextSegment (0) => RECORD [
+ segment: SEQUENCE OF DomainName,
+ restOfStream: StreamOfDomainName],
+ lastSegment (1) => SEQUENCE OF DomainName};
+
+StreamOfObject: TYPE = CHOICE OF {
+ nextSegment (0) => RECORD [
+ segment: SEQUENCE OF Object,
+ restOfStream: StreamOfObject],
+ lastSegment (1) => SEQUENCE OF Object};
+
+StreamOfObjectName: TYPE = CHOICE OF {
+ nextSegment (0) => RECORD [
+ segment: SEQUENCE OF ObjectName,
+ restOfStream: StreamOfObjectName],
+ lastSegment (1) => SEQUENCE OF ObjectName};
+
+StreamOfOrganization: TYPE = CHOICE OF {
+ nextSegment (0) => RECORD [
+ segment: SEQUENCE OF Organization,
+ restOfStream: StreamOfOrganization],
+ lastSegment (1) => SEQUENCE OF Organization};
+
+StreamOfThreePartName: TYPE = CHOICE OF {
+ nextSegment (0) => RECORD [
+ segment: SEQUENCE OF ThreePartName,
+ restOfStream: StreamOfThreePartName],
+ lastSegment (1) => SEQUENCE OF ThreePartName};
+
+-- TYPES AND CONSTANTS DESCRIBING PROPERTIES --
+
+Property: TYPE = LONG CARDINAL;
+
+-- A Name can have up to 250 Properties associated with it. --
+Properties: TYPE = SEQUENCE 250 OF Property;
+
+all: Property = 0;
+nullProperty: Property = 37777777777B;
+
+-- The value associated with an item property. --
+Item: TYPE = SEQUENCE 500 OF UNSPECIFIED;
+
+-- TYPES AND CONSTANTS DESCRIBING NETWORK ADDRESSES --
+
+-- Clearinghouse addresses aer stored in this form. --
+
+NetworkAddress: TYPE = RECORD [
+ network: ARRAY 2 OF UNSPECIFIED,
+ host: ARRAY 3 OF UNSPECIFIED,
+ socket: UNSPECIFIED ];
+
+NetworkAddressList: TYPE = SEQUENCE 40 OF NetworkAddress;
+
+-- OTHER TYPES AND CONSTANTS --
+
+-- How the client identifies itself to the service --
+Authenticator: TYPE = RECORD [
+ credentials: Authentication.Credentials,
+ verifier: Authentication.Verifier];
+
+wildcard: STRING = "*"; -- the wildcard character (asterisk) --
+
+-- ERRORS --
+
+WhichArgument: TYPE = {
+ first(1), -- concerns the first name or property argument --
+ second(2) }; -- concerns the second name or property argument --
+
+ArgumentProblem: TYPE = {
+ illegalProperty(10), -- property is not usable by a client --
+ illegalOrganizationName(11), -- the organization component of the name
+ -- is incorrect, e.g., too long or short, or has wild card
+ -- characters when not allowed --
+ illegalDomainName(12), -- the domain component of the name
+ -- is incorrect, e.g., too long or short, or has wild card
+ -- characters when not allowed --
+ illegalObjectName(13), -- the object component of the name
+ -- is incorrect, e.g., too long or short, or has wild card
+ -- characters when not allowed --
+ noSuchOrganization(14), -- the name's organization component does not exist --
+ noSuchDomain(15), -- the name's domain component does not exist --
+ noSuchObject(16) }; -- the name's object component does not exist --
+ArgumentError: ERROR [problem: ArgumentProblem, which: WhichArgument] = 2;
+
+AuthenticationError: ERROR [problem: Authentication.Problem] = 6;
+
+CallProblem: TYPE = {
+ accessRightsInsufficient(1), -- operation prevented by access controls --
+ tooBusy(2), -- server is too busy to service this request --
+ serverDown(3), -- a remote Clearinghouse server was down and was needed for this request --
+ useCourier(4), -- server insists that Courier be used for this particular request --
+ other(5) };
+CallError: ERROR [problem: CallProblem] = 1;
+
+PropertyProblem: TYPE = {
+ missing(20), -- the object exists, but the property doesn't --
+ wrongType(21)}; -- client wanted a Group but it was an Item, or vice versa --
+PropertyError: ERROR [problem: PropertyProblem,
+ distinguishedObject: ObjectName] = 3;
+UpdateProblem: TYPE = {
+ noChange(30), -- operation wouldn't change the database --
+ outOfDate(31), -- more recent information was in database --
+ objectOverflow(32), -- the particular object will have too much data
+ -- associated with it --
+ databaseOverflow(33)}; -- the server has run out of room --
+UpdateError: ERROR [problem: UpdateProblem, found: BOOLEAN,
+ which: WhichArgument, distinguishedObject: ObjectName] = 4;
+
+WrongServer: ERROR [hint: ObjectName] = 5;
+
+-- PROCEDURES --
+
+-- DEALING WITH OBJECTS --
+
+CreateObject: PROCEDURE [name: ObjectName, agent: Authenticator]
+REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError,
+ WrongServer] = 2;
+
+DeleteObject: PROCEDURE [name: ObjectName, agent: Authenticator]
+REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError,
+ WrongServer] = 3;
+
+LookupObject: PROCEDURE [name: ObjectNamePattern, agent: Authenticator]
+RETURNS [distinguishedObject: ObjectName]
+REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 4;
+
+ListOrganizations: PROCEDURE [pattern: OrganizationNamePattern,
+ list: BulkData.Sink, agent: Authenticator]
+REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 5;
+
+ListDomain: PROCEDURE [pattern: DomainNamePattern, list: BulkData.Sink,
+ agent: Authenticator]
+REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 6;
+
+ListObjects: PROCEDURE [pattern: ObjectNamePattern, property: Property,
+ list: BulkData.Sink, agent: Authenticator]
+REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 7;
+
+ListAliasesOf: PROCEDURE [pattern: ObjectNamePattern, list: BulkData.Sink,
+ agent: Authenticator]
+RETURNS [distinguishedObject: ObjectName]
+REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 9;
+
+-- PROCEDURES DEALING WITH ALIASES --
+
+CreateAlias: PROCEDURE [alias, sameAs: ObjectName, agent: Authenticator]
+RETURNS [distinguishedObject: ObjectName]
+REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError,
+ WrongServer] = 10;
+
+DeleteAlias: PROCEDURE [alias: ObjectName, agent: Authenticator]
+RETURNS [distinguishedObject: ObjectName]
+REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError,
+ WrongServer] = 11;
+
+ListAliases: PROCEDURE [pattern: ObjectNamePattern, list: BulkData.Sink,
+ agent: Authenticator]
+REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 8;
+
+-- PROCEDURES DEALING WITH PROPERTIES --
+
+DeleteProperty: PROCEDURE [name: ObjectName, property: Property,
+ agent: Authenticator]
+RETURNS [distinguishedObject: ObjectName]
+REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
+ UpdateError, WrongServer] = 14;
+
+ListProperties: PROCEDURE [pattern: ObjectNamePattern, agent: Authenticator]
+RETURNS [distinguishedObject: ObjectName, properties: Properties]
+REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 15;
+
+-- PROCEDURES DEALING WITH THE ITEM PROPERTY --
+
+AddItemProperty: PROCEDURE [name: ObjectName, newProperty: Property,
+ value: Item, agent: Authenticator]
+RETURNS [distinguishedObject: ObjectName]
+REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
+ UpdateError, WrongServer] = 13;
+
+RetrieveItem: PROCEDURE [pattern: ObjectNamePattern, property: Property,
+ agent: Authenticator]
+RETURNS [distinguishedObject: ObjectName, value: Item]
+REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
+ WrongServer] = 16;
+
+ChangeItem: PROCEDURE [name: ObjectName, property: Property, newValue: Item,
+ agent: Authenticator]
+RETURNS [distinguishedObject: ObjectName]
+REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
+ UpdateError, WrongServer] = 17;
+
+-- PROCEDURES DEALING WITH THE GROUP PROPERTY --
+
+AddGroupProperty: PROCEDURE [name: ObjectName, newProperty: Property,
+ membership: BulkData.Source, agent: Authenticator]
+RETURNS [distinguishedObject: ObjectName]
+REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
+ UpdateError, WrongServer] = 12;
+
+RetrieveMembers: PROCEDURE [pattern: ObjectNamePattern, property: Property,
+ membership: BulkData.Sink, agent: Authenticator]
+RETURNS [distinguishedObject: ObjectName]
+REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
+ WrongServer] = 18;
+
+AddMember: PROCEDURE [name: ObjectName, property: Property,
+ newMember: ThreePartName, agent: Authenticator]
+RETURNS [distinguishedObject: ObjectName]
+REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
+ UpdateError, WrongServer] = 19;
+
+AddSelf: PROCEDURE [name: ObjectName, property: Property, agent: Authenticator]
+RETURNS [distinguishedObject: ObjectName]
+REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
+ UpdateError, WrongServer] = 20;
+
+DeleteMember: PROCEDURE [name: ObjectName, property: Property,
+ member: ThreePartName, agent: Authenticator]
+RETURNS [distinguishedObject: ObjectName]
+REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
+ UpdateError, WrongServer] = 21;
+
+DeleteSelf: PROCEDURE [name: ObjectName, property: Property, agent: Authenticator]
+RETURNS [distinguishedObject: ObjectName]
+REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
+ UpdateError, WrongServer] = 22;
+
+IsMember: PROCEDURE [memberOf: ObjectNamePattern,
+ property, secondaryProperty: Property, name: ThreePartName,
+ agent: Authenticator]
+RETURNS [isMember: BOOLEAN, distinguishedObject: ObjectName]
+REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
+ WrongServer] = 23;
+
+-- PROCEDURES DEALING WITH SERVERS --
+
+RetrieveAddresses: PROCEDURE
+RETURNS [address: NetworkAddressList]
+REPORTS [CallError] = 0;
+
+ListDomainServed: PROCEDURE [domains: BulkData.Sink, agent: Authenticator]
+REPORTS [AuthenticationError, CallError] = 1;
+
+END. -- of Clearinghouse --
+