Document communications controller6073160Abstract The present invention is a method and apparatus for providing a general-purpose, multifunction, individually addressable, full-bandwidth bi-directional communication device with built-in Authentication, Authorization, and Accounting (AAA) capabilities that connects a home or business user with ATM and other switched broadband digital networks in a convenient, adaptable, extensible manner at reasonable cost. The device supports a Document Services Architecture (DSA) and, in particular, supports agent-based communications (including interaction with an Agent Instance Service) to ensure well-behaved communications and fair allocation of network resources among users. The device can be used in a heterogeneous environment and with different types of networks and protocols. The full-bandwidth bi-directional communication and built-in AAA capabilities of the device distinguish it from other "set-top boxes." Claims What is claimed is: Description This invention relates generally to telecommunications, and more particularly to an apparatus designed to provide a common interface between existing and future telecommunication equipment and a plurality of broadband information distribution networks.
TABLE A
______________________________________
Agent Instance Service (AIS)
lookup-by-name
lookup-by-address
find-AIS
register-principal
un-register-principal
Authentication Service
authenticate-principal
Authorization Service
get-authorization-ticket
get-capability
validate-authorization-ticket
get-access-class
Accounting Service account-open-record
account-close-record
account-append-record
account-flush-record
______________________________________
As stated, communication between infrastructure services and between agents and infrastructure services are the same. The DSA communication verbs are employed for principal to principal, agent to infrastructure service, as well as infrastructure service to infrastructure service communication. Assuming two abstract syntax trees, one for each principal, as illustrated in FIGS. 2 and 3 by the rhs-principal and lhs-principal, each of the trees have defined at least the following attributes: a principal-name 40, a non-empty set of principal-transaction-methods 42, and a principals-agent 44. Recall that the definition of the principal is a named set of transaction methods. Accordingly, as depicted in FIG. 2, the principals are represented as possessing, along with the set of transaction methods, a set of buffers 46 to handle the transfer of data between Principals. Preferably, the buffers include in-data and out-data buffer "sections" (not shown) so as to provide buffering capability for bi-directional communications, principals collect data sent to and received from other principals in these buffers. At some time during a transaction, the data is transferred to a buffer managed by the conversation. However, initially the principal's buffer is the collection point for this data. Initially, the in-data and out-data buffers (attributes) are empty. When transactions are ready to send data, the out-data buffers are filled with data. The transfer of data from one transaction method to another is represented by "moving" the data from the sending transaction method out-data buffer to the in-data buffer of the receiving transaction method. Document Services Architecture (DSA) Environment The DSA is implemented using a combination of hardware and software components. A listing of the infrastructure software code employed to implement DSA functionality via the DCC hardware is contained in the Appendix. In particular, the Xerox Document Communications Controller infrastructure software found in the Appendix provides secure, authorized, billable communications connections on broadband networks, enabling switched virtual circuit networks, protection against abuse of both services and content on the network, accurate accounting of the use of content delivered over the network, and accurate accounting for network facilities used by the customer based on actual usage. The Infrastructure software consists of a set of software modules connected through a distributed network. These components may be distributed in as many nodes and servers as needed to achieve desired performance goals. The infrastructure software implements X/OPEN standard communications verbs with extensions for broadband selection. Applications can use a library that implements the communications verbs or use the events management subsystem in Macintosh or Windows 95 environments. The preferred development language is C++, although other object-oriented programming languages may be employed. The software is preferably executed on system running a multithreaded operating system capable of providing POSIX compliant interfaces. Exemplary operating systems include, but are not limited to, Sun OS, Macintosh 7.1, Windows '95, and VxWorks. In a preferred embodiment, the infrastructure software supports a plurality of communications protocols, including ATM at the AAL-5 interface with Switched Virtual Circuits (Q.2931) call set up standard, Ethernet (802.3), TCP/IP, and ISDN (CAPI). Security features include built-in support of Authenticated Call Set-up (ATM Forum and ANSI T.1 RFC). Any public key authentication scheme is supported including the Generic Security Services API (IETF RFC 1508), including RSA and Kerberos. An accounting record is generated during a communication session by the DSA that identifies users, documents, and methods, with user extensions for custom billing processes. It is to be further understood that accounting records may also be provided for cell usage (AAL-5) with Available Bit Rate (ABR), Constant Bit Rate (CBR) and Variable Bit Rate (VBR) service levels indications. In the DSA, data is made available through an X/OPEN API verb set. The system can be fully managed with any SNMP system management tools, include HP-OpenView. In a preferred embodiment, the hardware platform on which the DSA is installed would include: at least 1 Megabit of RAM and be capable of an aggregate throughput rate of up to 155 Megabits per second. In addition, the platform should support unlimited simultaneous virtual communications channels (VCCs) so as to maintain an average call set up time of about 20 milliseconds. The software found in the Appendix fits in a complete system architecture, with third party, and customer developed system components. The architecture supports natural communications between people, documents, and the services performed on documents. This general architecture allows development of complex communications solutions that are media independent, spanning video, audio, and text. All communication is fully symmetric, that is, it sends and receives with the same format and capacity. FIGS. 4 and 5 illustrate, respectively, a high level software environment and a general architecture of the DSA software code. Referring to FIG. 4, depicted in the software environment is a lower level infrastructure block 70 that represents, in one embodiment, an ATM infrastructure over which the principals of FIG. 1 establish dyads to accomplish communication. Above the infrastructure level is software associated with the development environment 72 for the DSA system. In particular, development environment level 72 contains software that not only provides the interface to the infrastructure but provides functionality to enable the monitoring of the DSA system in a development mode. On top of the development environment software, resides the DSA software code that implements the functionality described in association with the present invention. In particular, the software includes functionality, as described herein, associated with the AIS, Authentication, Authorization and Accounting. The application level software, level 78, interfaces to the DSA level via a command line interpretation level 76 so that commands from the application level may be employed to invoke specific functionality in the DSA code level 74. As illustrated in FIG. 5, the DSA code consists of three general levels, 90, 92 and 94, each organized in a hierarchical fashion to build upon the functionality of the level below it. More specifically, level 90 contains the transport and transmission services of the DSA code. As depicted, these services provide the interface "hooks" to provide access to the infrastructure level 70 of FIG. 4. Specifically supported are ATM (90a) and Internet (90b) infrastructures, however, the invention is not intended to be limited to such infrastructures. The next level of the DSA code is the DSA Agent code, level 92, where the verb set 92a for the various code objects is contained. Lastly, lying on top of the AIS is the DSA Application layer, layer 94, where the Authorization, Authentication and Accounting functions are implemented. Having described the general software architecture of the DSA, attention will now be turned to describing the specific functionality of the various components therein. Agent Instance Service (AIS) The Agent Instance Service (AIS) is a distributed location function, providing addressability to principals by binding their network address, also referred to as a substrate address, to a principal's name. Other principals and services use the AIS to acquire addressability to a given principal. The agent instance service is distributed in the sense that there can be many instances of an AIS, but principals are aware only of a single, unified service. In the DSA, there is a distinct functional domain of agent instance services. Furthermore, DSA uses functional domains to allow different infrastructure services to employ different distribution properties. In one embodiment, the contents of the functional domains are perishable a (not preserved across service instance failures) volatile (the rate of change is expected to be great) and they are partially inconsistent (for a given principal, the state of one AIS may be at variance with the state of another, or at variance with the state of a principal's agent). The protocols are preferably designed to tolerate such inconsistency, and the consistency of agent and AIS state machines converges over time. The distribution algorithms used by the AIS are probabilistic. Each AIS maintains a record of the probable contents of those adjacent (directly addressable via the substrate network) to it. These records are not perfectly accurate, but their accuracy may be tuned to trade off the number of false resolutions against the costs of maintaining the records. The records are maintained by the use of Bloom filters, which are essentially multiple hash functions. For each principal registered in an AIS instance, the service keeps the principal name and one or more substrate addresses. Addresses are grouped according to protocol suite, and each suite is called a family. The collection of a name, one or more families, each of which contains one or more addresses, is called an AIS entry. In the preferred embodiment these objects are respectively defined as: AIS-ENTRY--a subtype of the agent instance service PRINCIPAL-NAME--an attribute of a principal ADDRESS-FAMILY--a subtype of infrastructure services NET-ADDRESS--an attribute of address-family Because an AIS domain may be very large (e.g., intercontinental), a principal's name and address list are kept in only one copy of an agent instance service. Substrate adjacent AIS instances carry only a Bloom filtered bit vector of the probable contents of the service instance holding the complete AIS entry (name, families, and addresses). These vectors are called probability vectors, and are defined as AIS-PROBABILITY-VECTOR--a subtype of agent instance service. An agent instance service exports four major functions that are accessible by the DSA Application layer 94, expressed herein as transaction methods: AIS-REGISTER requests that an AIS entry be created containing a principal name, address family, and substrate network address. Assuming the request is authentic, if no such name exists in the local name list, and probably does not exist in adjacent AIS services, the entry is added to the local name list and the probability vector is changed to reflect the new name. If the name does exist in the local name list or any probability vectors, the request represents the registration of a surrogate agent (again assuming the request is authentic). AIS-RESIGN requests the removal of a named AIS entry. The local name list and probability vectors are modified, and the vector scheduled for broadcast to adjacent services. AIS-RESOLVE-NAME causes a search for the name in the local name list and all probability vectors. If the name exists in the name list address families and associated substrate addresses are returned to the invoker. If the name probably exists in an adjacent AIS service, the request is forwarded to that service instance. AIS-RESOLVE-ADDRESS causes a search of the AIS entries for address family and network address combinations that match those in the request. principal names associated with any matches are returned to the invoker. "Verbs" are calls or commands uttered by programs running in the agent instance service environment 92a. These programs (see Appendix) may or may not be transaction methods (in the strict sense), which may or may not be members of a principal. They are simply calls to the underlying agent instance service, and are distinguished from architected transaction methods that may employ them. AIS-ACTIVE Informs an AIS that a principal name and one or more substrate addresses are to be placed in an AIS entry in the local name list. This verb registers a principal as a operational member of a DSA network. When a principal-address binding is placed in the local name list, the probability vector representing the contents of the list is updated, and the vector is scheduled for broadcast to adjacent AIS instances. AIS-ACTIVATE Causes the AIS to issue an activation order to an agent/principal pair at the substrate address specified in the call. The principal may or may not be present and able to answer the order. ACTIVATE produces the same effect that ACTIVE does, but is directed to a principal rather than initiated by it. AIS-INACTIVE Informs an AIS that a principal has exited or "logged off" a DSA network. The principal name and associated addresses are removed from the local active name list, and the probability vector is updated and broadcast accordingly. AIS-DEACTIVATE Causes the AIS to issue an activation order to an agent/principal pair at the substrate address specified in the call, but is issued by a third party. AIS-ADD-ADDRESS Adds an address family and network address(es) to an existing AIS entry, or adds one or more network addresses to an existing address family in an AIS entry. AIS-DELETE-ADDRESS Removes a substrate address from an address family in an AIS entry. If no effective address remain in an address family, the family item is also removed from the AIS entry. AIS-RESOLVE-NAME Searches the local AIS entry list for the supplied principal name, and returns any address families and network addresses associated it if found. If the principal name does not exist in the local list, the call returns the AIS identifiers of any probability vectors that indicate they might contain the principal name entry. AIS-SET-VECTOR-ATTRIBUTES Sets the values associated with a probability vector and its Bloom filter. These attributes (vector width and depth) determine the likelihood of both true and false "hits" for a given (principal name) search argument. They also determine the resultant size of the vector, and therefore the overhead -along with frequency- of maintaining consistency. AIS-GET-VECTOR-ATTRIBUTES Returns the values governing a given probability vector. AIS-SET-VECTOR Establishes a probability vector image, associated with a particular AIS instance, in the AIS in which the call is issued. If the AIS instance represented already has a vector associated with it, that vector is replace by the one supplied in the call. If the AIS instance name supplied is the local AIS, the local probability vector is the target vector. AIS-GET-VECTOR Returns the probability vector image associated with the AIS instance named in the call. If the AIS instance name supplied is the local AIS, the local probability vector is returned. Authentication As used herein, the term "authentication" represents the reliable establishment of the identities of the principals in a communication system. Principals "authenticate" themselves when they register in the system. i.e., at the time that the agent registers them in the AIS. This requires an application program interface for the authentication service that executes a function characterized in words as "register me in an AIS". In the DSA, a principal must be registered before it can use services or communicate with other principals. The following describes the architecture of the Authentication Service (AS) in DSA, and its interaction with principals and other infrastructure services. Also discussed are the authentication/verification requirements for all of the interactions between actors in the DSA system--principals and infrastructure services. It is assumed that the Authentication Service is secure, i.e. that it cannot be penetrated, commandeered, or destroyed by an intruder or nature. In other words, this architecture is secure only to the extent that the AS is. There is no such assumption made about the AIS however; it is assumed that all of the information stored in the AIS's Registration Data Base is readable by anyone, and that recovery must be possible from an AIS failure. In the DSA, a principal must be registered in the AIS before it can use services or communicate with other principals. The AIS contains information about all of the principals that are currently active in a DSA system, including all of the principal's addresses in all address families, and information necessary to validate the principal's signature, referred to hereafter as the "signature key." There is no particular key length or type required, rather the properties of the signature key depend on the particular security mechanisms adopted for communication between principals and between a principal and an Infrastructure service. Referring to FIG. 6, in order for a principal to register, it must first be authenticated. The nature of authentication is that the principal 30 first "proves," to the Authentication Service 108, via agent 32, that it is who it says it is; it reliably establishes its identity. The Authentication Service then sends the principal the information it needs to sign its correspondence, i.e. its signature key, and a token for registration that will be honored by the AIS. This is shown as step 110 in FIG. 6. In step 110, the principal (agent) sends the required information, including its identification, its address families and addresses, and the authentication token to the AIS 112. AIS 112 extracts the principal's signature key from the registration token and stores information about the principal in the Registration Data Base (RDB) 114. The RDB is preferably a table of information about principals, indexed by principal-Name. There is no requirement that it is "relational", on magnetic media, or implemented any particular manner. This registration operation is represented as step 118. Note that since RDB 114 associated with AIS 112 can be read by anyone, the signature key must not be stored in the clear. The copy of the signature key that the AIS extracts from the Registration Token has been encrypted by Authentication Service 108 in step 110. Later, the Authentication Service may retrieve and decrypt this key in order to verify the principal's signature. Also depicted in FIG. 6 is an initialization step 120 in which the AIS is authenticated. As part of this step, the AIS receives the information it needs to decode registration tokens sent to it by registering principals. Note that the Authentication Service creates and initially knows a principal's signature key, but forgets it until it is needed for signature verification. The AIS stores the signature key, but does not know it. The principal receives a Registration Token created by the AS, but cannot read it or create it, it can only be read (but not created) by the AIS. Once the principal has been registered, it is ready to communicate with other entities in the DSA system. Turning now to FIG. 7, depicted therein is the data flow during establishment of a dyad 34 between two principals, 30a and 30b. Initially, principal 30a must obtain an address for the entity with which it wishes to communicate, shown here as principal 30b. This is accomplished by having the principal 30a's Agent 32a interrogate the AIS 112. In the preferred embodiment, the principal issues a c-begin verb. It uses the signature key it received from the Authentication Service 108 to form its own signature. Subsequently, Agent 32b for principal 30b requests the Authentication Service to verify the signature of principal 30a. To satisfy this request, AS 108 must obtain principal 30a's encrypted signature key from AIS 112, and decrypt it. Once principal 30a's signature is verified, AS 108 sends principal 30b the information required to enable secure communication between the principals. In order to assure the trustworthiness of the communication (dyad) between the principals depicted in FIG. 7, the following must be true: 1) The Authentication Service must be secure (i.e., it must not be possible for another entity (intruder) to impersonate this service). 2) There must be confidence that the credentials used by the principals to prove their identities are unforgeable and not stolen. Also important with respect to the Authentication process is the use made of the Generic Security Services Application Programming Interface (GSS--API) by the Authentication Service and entities that make use of it. Further details of the GSS-API can be found in RFC 1508 "Generic Security Service Application Program Interface", J. Linn, September 1993, and subsequent draft work on GSS-API, Version 2 by the IETF Common Authentication Technology (CAT) Working Group , the relevant portions of both works being hereby incorporated by reference for their teachings. Use of the GSS-API enables the choice of specific authentication schemes by DSA systems, ranging from no authentication through Kerheros-style authentication based on shared secret keys to public key systems employing X.509-style certificates (as described in TTU Recommendation X.509, "The Directory--Authentication Framework", Melbourne, 1988). GSS-API enables the use of different authentication mechanisms for different contexts and system elements. For example, the initial interaction between a principal and the Authentication Service might use a public key authentication scheme that depends on accessing the principal's certificate from a trusted directory, while the interaction between principals might be authenticated by using the signature key as input to a digest (hash) of the initial message. The former is computationally intensive and time-consuming, but only has to be done once when the principal registers. The latter is quick and affordable for pairwise mutual authentication of every conversation. The GSS-API makes the choice of security mechanism transparent to the application, and allows different choices to be made for different interactions and for different classes of systems. The implementation of the services provided by GSS-API is called the "mechanism" The central idea of GSS-API is to separate the application functions from the methodology used to provide security, so that in principle, the application software need not know what type of cryptography and other methods are being employed to protect communications. (The application may have security requirements that mandate the choice of certain such methods and exclude others) In the simplest and least secure implementations of DSA, the AIS and other infrastructure services will be authenticated once as the DSA network system is initialized. The mechanism that supports authentication need not be the same as any of those used for other interactions. If the AIS is initiated under the control of a trusted human operator able to observe the results of the interaction and subsequent states of the services, then the operator can vouch for the authenticity of the AIS. In a more secure implementation with multiple instances of the AIS, a more elaborate mechanism is required, perhaps even a public key mechanism (e.g., SPKM) that requires each instance of the AIS to have its own credential, and that requires the AIS to he re-authenticated after the expiration of a certain amount of time. No matter what mechanism is employed, one of the results of the initial interaction between AIS and the Authentication Service (AS) is that the AIS must be able to subsequently verify that principals trying to register with the AIS have been authenticated. A preferred method of accomplishing this would be as follows: 1) After establishing the authenticity of the AIS, the AS provides a key that the AIS can use to decrypt tokens it receives from registering principals; 2) As each principal is authenticated, the AS provides a registration token encrypted with the key sent to the AIS. The registration token must include the principal's signature key and might include the name of the principal, a time stamp, and other information to enable positive identification of the principal, and prevent replay; and 3) When the principal registers with AIS, it presents the registration token to the AIS to decrypt. The interaction between the principal and the Authentication Service (AS) ultimately depends upon the service domain structure(s) of the DSA network system different methods of distributing the AS and AIS, and the association of infrastructure service instances with principals that use them. It is understood, however, that this the interaction described is one that most well-known authentication methods have been designed to work with, and any of such methods would work for DSA. Preferably, a symmetric key mechanism,(e.g. Kerberos), or an asymmetric key mechanism, (e.g. SPKM), would be employed. The interaction only occurs once when the principal initially attaches to the DSA network, so high performance is not considered to be an issue. For some DSA systems a very large population of potential principals is anticipated, most of whom may have credentials that were not originally produced by the DSA system. This and the previous point suggest the use of a public key system like SPKM. The AS must produce a registration token as part of the interaction. The registration token includes the name and other information about the principal encrypted in a manner that the AIS can decipher, and the principal's signature key encrypted in a manner that only the Authentication Service can decipher. The AS also generates a signature key, and returns it securely to the principal. If a public key authentication mechanism is being employed, the signature key can be encrypted with the principal's public key, which makes it opaque to all but the possessor of the principal's private key, i.e. the principal. If a symmetric key mechanism is used, the signature key could be encrypted with the principal's symmetric key, or it may even be the principal's symmetric key. The principal proves its identity to the AIS by means of the registration token generated by the AS during the interaction described is the previous section. The format of this token depends on the GSS mechanism used between the AS and AIS. The token is opaque to both the principal and any other party that observes the interaction between the principal and AIS. The simplest way to meet all of these requirements is to select a mechanism for the AS/AIS interaction that supports the combination of the principal's identity proof and signature key into a single token encrypted with a confidentiality scheme. When the principal registers with AIS, it sends this token both to prove its identity and to provide the AIS with its signature key. Note that a secure exchange of the token is required between the AS and the principal during authentication, in order to prevent an intruder from stealing the token in order to impersonate the principal. The token can be sent in the clear to the AIS during registration. This implies that there is no requirement to use the GSS-API in this interaction, although the uniform use of GSS throughout DSA provides consistency. Similarly, the principal with infrastructure services interaction could use the same mechanism as the principal/principal interaction described above. Authorization As used herein, the term "authorization" refers to the control of access to information resources by "authenticated" principals. Authorization is the responsibility of the responding principal or infrastructure service. In one embodiment, the authorization is established by ascertaining the identity of the initiating principal. A service provider may be satisfied that the requesting party is genuine and that an account for accrual of charges is available, but the provider may not wish to grant the request for any number of reasons, including credit standing or age. Further, Authorization may be a service that the provider wishes to "outsource" to another provider, such as a credit card organization. Accounting As used herein, the term "accounting" means the recording of what has been done by an "authenticated" and "authorized" principal as well as the time at which it was done. The accounting service is a service in DSA that collects accounting information accumulated by principals and their agents. As noted above with respect to FIGS. 2 and 3, a given transaction tree may invoke many transaction methods in many different locations, and the accounting data needs to be collected in one place and to be consolidated. The agents cache information (referred to as a "four-tuple") identifies the invoking principal and transaction method, the invoked principal and transaction method. These entries are time stamped, and eventually forwarded to the accounting service. Agents export simple verbs so that principals can append service-specific information that is captured by the agents. The accounting service is only the collector of this information; transforming it into actual costs is preferably performed by a separate billing service that is not part of the infrastructure. The accounting model is based in part on the definition of a principal: a named set of transaction methods. During the existence of any conversation between principals, there are four items of information available as follows: the name of the invoking principal; the name of the invoked principal; the name of the transaction method executing within the invoking principal; and the name of the invoked transaction method executing within the invoked principal. The accounting records generated for a conversation between two principals are listed in Table C:
TABLE C
______________________________________
Account-Record
Extension-Header
Extension-Vector
Trailer-Record
______________________________________
Length CID Length CID
Type GUTMID Type Gutmid
P-i Value Time-Stamp
TM-1 Billable? Status
P-2
TM-2
CID
GUTMID
Billable?
Time-Stamp
______________________________________
Account records are recorded in the functional domain of a given transaction method execution and the agents of the principals executing each transaction method will collect and accumulate the journal entries. Account records may be forwarded to an accounting service by the agents at the end of a conversation (push), or account records may be forwarded when accounting service requests. (pull). Account records are posted to the journal in the appropriate accounting service in a functional domain. As with the services previously described, the accounting service employs a set of verbs to support the functions provided by the accounting service. The following verbs are functions in the agent protocol boundary: Account.sub.-- Open.sub.-- Record creates an accumulation space within the agent and writes an account record 4-tuple containing the principal names (issuing and partner), their transaction method names, and a time stamp. Account.sub.-- Append.sub.-- Record adds an extension vector to an account record. Account.sub.-- Close.sub.-- Record closes an account record by generating a trailer-record to indicate the closing time-stamp of the conversation and marks the record eligible for movement to an accounting service. Account.sub.-- Flush.sub.-- Record requests the agent to forward accumulated account-records to an accounting service. The following verbs are functions provided by the accounting service: Account.sub.-- Forward copies an account record from the specified accounting base to another accounting service. Account-Retrieve requests the agent of a principal to flush the records to a particular accounting service. This is the "pull" approach of the "account.sub.-- flush.sub.-- record". Account.sub.-- Delete.sub.-- On.sub.-- Attributes removes accounting records from the specified accounting base, based on attributes values. Depending on the attributes specified, Account.sub.-- Delete.sub.-- On.sub.-- Attributes can be used to erase records, entries, journals, or other organized collections. Account.sub.-- Extract.sub.-- On.sub.-- Attributes returns account records based on attribute values. Depending on the attributes specified, Account.sub.-- Extract.sub.-- On.sub.-- Attributes can be used to retrieve records, entries, journals, or other organized collections. Referring again to FIG. 3, in a preferred embodiment, each conversation has two half-conversations. For each half-conversation, the agent will generate one account-record (Table C), zero to many extension-vectors, and one trailer-record. The account-type, will have an integer value, e.g. account-type=1. The range 1-32471 is reserved for DSA internal use. The range of 32472-58467 will be used for customers. A trailer record will be generated when the conversation is terminated. This trailer record will have the conversation id, GUTMID, the terminating time-stamp and the status of the conversation. The status field in a trailer-record tells of the normal (called by c.sub.-- end) or abnormal termination (called by c.sub.-- end with "abort" as a parameter) of a conversation. The two accounting records generated for each conversation (one for each 1/2 conversation) will have the same data except the 6 tuples. The value for P-1, TM-1, P-2, TM-2 and CID will be different. The lhs-record will have P-1 as the invoking principal, TM-1 the invoking TM, P-2 as the invoked principal (it may not have the TM-2 data, e.g., Lance, "View movie", Susie's video, "xxxx", 88). The rhs-record will have the P-2 as the invoked principal, TM-2 as the invoked TM, P-1 as the invoking principal (it may not know the invoking TM, TM-1 data, e.g., Lance, "xxxx", Susie's vide6, "play the movie", 99). The supplied parameter "CID" does not provide all the information for the 6 tuples because the protocol information does not send through the wire. Therefore the account-record may be created without the complete information, (e.g., missing TM-2 in the lhs-record and missing TM-1 in the rhs record). However, during a subsequent "roll-up" of the accounting information, based on the GUTMID, the missing information will be collected. The default value for the account-billable? parameter is "false," meaning that if there is any billable transaction, there should be an extension-vector generated. Therefore, the default value for extension-billable? is "true". The extension-billable? parameter has the override capability to the account-billable?. Acct-Append-Record is an agent verb, by which a principal concatenates principal-specific accounting information to an account record. In this case, only the acct-value, acct-value-length and acct-value-type fields are appended to the account-record. These three fields compose an "extension-vector". Or, if the account record had already been sent to the accounting service, the extension header with the ext-length, ext-type, etc. would be generated first along with the extension-vector and be forwarded asynchronously relative to the base, and appended during GUTMID-keyed roll-ups in the accounting service. If there is already an extension header then this function will only append extension-vector to the extension header. There is no need to generate an extension header again. The user accounting information will be collected and stored in the "acct-value" field. This field will be a free format text field. The acct-value-length and acct-value-type are used to specify the length and type of this field. The acct-value-type is preferably an integer field, and is application specific. A reserved range will be specified for this application type. A set of application types can be pre-defined. e.g., Acct-value-type=43=Location. Acct-value-type can be used to specify the time-stamp if a user wishes to do so to indicate the starting and ending time for each extension. When the account-record is flushed to the accounting service, an extension record with extension header and ext-length, ext-type, ext-value will be generated to associate the extension vector with the account-record. If there is already an ext-header existing, there is no need to generate a complete extension record again. The acct-flush-record function can be called any time, not necessarily at the end of the conversation. If the buffer is flushed during the conversation, there is no need to de-allocate the buffer. The buffer will be de-allocated when the CID-buffer is flushed and the conversation is terminated. In the acct-close-record, when the flush? parameter equals true, then the function acct-flush-record will be called to send the records to the accounting service. Preferably, there is one buffer per each CID. An agent can carry multiple conversations simultaneously, so there may be multiple buffers existing at one time for one agent. For one conversation, there will be one buffer for the account-record, extension-vectors and trailer-record with the same CID. The Acct-flush-record function requests the agent to forward accumulated records to an accounting service. This function can be called by the acct-close-record or by BSOM. Principal and transaction method names will use an X/Open standard format, e.g. 1 byte for length field. Referring to FIG. 8, an agent 32 communicates with an accounting service 130 using the communication-verb as a syntax (e.g., connection.sub.-- begin, connection.sub.-- end,) however, no dyad creation is necessary. Similarly, one accounting service communicates with another accounting service using communication-verbs. On the other hand, a billing service 132 obtains information resident in an accounting service 130 by acting as a principal, where two principals (billing service and accounting service) communicate via dyad (34) creation (e.g., dyad-begin, dyad-end) as depicted in FIG. 8. An Account-Retrieve-record operation requests the agent of a principal to flush the records to a particular accounting service. This is the "pull" approach of the "account-flush-record". In a preferred embodiment, a user can do roll-up at any time. When a roll-up is done the acct-extract-on-attributes operation is invoked, while the acct-delete-on-attributes is used to clean up the account-base in the accounting-service. In other words, in the database of the accounting service, a complete accounting record will not exist, the user must move the organized accounting records to another location, at which time the account-records, extension-records and trailer-records must be cleaned or removed from the database. In an accounting record, there are an account-record, zero to many ext-vectors and one trailer-record. The acct-type field in the extension-vector can be used to indicate the time stamp. In a preferred embodiment, the DSA system is implemented using a plurality of interconnected systems, wherein the systems each comprise one or more processor or data processing units. One hardware embodiment in which the DSA system finds particular use is depicted in FIG. 9. FIG. 9, is an exemplary illustration of the various components that may be associated using the DSA, however, FIG. 9 is not intended to depict limitations to such a system. As noted previously, the DSA may be employed across a network of interconnected computing systems arranged to accommodate broadband communications. Turning to FIG. 9, illustrated therein is an exemplary environment 210 comprising a plurality of systems and/or devices, all interconnected via an asynchronous transfer mode (ATM) switch 212 to form a node of an ATM infrastructure 70 as represented in FIG. 4 Additional details concerning ATM can be found in a presentation by B. Kercehval, "The Truth About ATM" Usenix LISA presentation, (September 1995) Alternatively, the DSA may be implemented on equivalent communications networks, including a synchronous optical network (SONET). Interconnected via ATM switch 212 are data servers 214 suitable for the storage of large quantities of data on disk or other storage media 216. For example, a server 214 may allow a user to access a database of image or video data or similar compilation. The data stored on media 216 being accessible, via the server 214, by one or more systems connected to switch 212. Also included in the environment 210 is a system 218 that contains the DSA services described with respect to, and depicted in, FIG. 5. System 218 is preferably a Sun workstation. FIG. 9 also depicts the document communications controller (DCC) that forms an aspect of the present invention. In particular, DCCs 224 and 226 provide the interface to the ATM infrastructure for workstations 230, and other telecommunications equipment including video sources 232, audio systems 234 (e.g., telephones) and television 236. The infrastructure software executed by system 218 provides secure, authorized and "billable" connections on the broadband ATM network. In a preferred embodiment, the software modules forming the DSA, as described in detail above, would be distributed throughout the network, residing on as many network nodes as necessary to assure adequate performance standards. More importantly, the software provides a simple API using X/OPEN standard verb sets. Applications interfacing to such a system can utilize a library that implements the communications verbs or may employ events management subsystems found in the Macintosh or Windows '95 environments. The development language employed is C++ and the operating system may be any multithreaded operating system with POSIX compliant interfaces, including VxWorks (Wind River Systems). Operational parameters for the preferred embodiment include a minimum of 1 Megabits of RAM, an aggregate throughput of up to 155 Megabits per second, support for unlimited simultaneous virtual channel connections (VCC), and an average call setup time of approximately 30 milliseconds. Document Communications Controller Having generally described the Document Services Architecture and hardware employed to implement an exemplary system using an ATM infrastructure, attention is now turned to the description of the Document Communications Controller that forms an aspect of the present invention. The document communications controller (DCC) or equivalently the network interface unit (NIU) is designed to provide low cost communications between customer premises equipment (CPE) on broadband networks with: 1. Security to switch virtual circuit networks 2. Protection against abuse of both services and content on the network 3. Accurate accounting of use of content delivered over the network 4. Accurate accounting of network facilities used by the customer based on actual usage As illustrated in FIG. 9, the DCC hardware itself consists of a network interface module (DCC PCB) 224 connected to a general purpose processor 230, memory (not shown), and an ATM Switch 212. In a building wired for high speed networks, served by a local ATM switch, the DCC provides a cost effective way of networking desktops, including video, sound, document transfer, as well as to switch telephone connections. The DCC can also be used to connect existing LAN environments to the ATM backbone serving whole buildings. The DCC may also be employed to provide low cost delivery of video on demand, telephone, and print distribution to the home over a single connection. The ease of sending as well as receiving information via the DCC, enables the creation of new information service providers, complete with usage accounting. The DCC further provides a way of establishing direct video, audio, and document interchange with other colleagues, where the quality of service provided is superior to the well-known ISDN environment. The DCC is intended to fit into a complete system architecture, the architecture is developed to support natural communications between people, documents, and the services performed on documents. The general nature of the architecture allows development of complex communications solutions that are media independent, spanning video, audio, and text. Referring now to FIG. 10, illustrated therein is a data flow diagram illustrating the document communications controller (DCC) in a network interface embodiment. In one embodiment, the document communication controller 250 is connected as the "link" between a telephone company broadband connection (e.g., ATM) 252 and a set of customer premises equipment 256. Set 256 includes, but is not limited to, a video conferencing unit 260, a television or display device 262, a telephone 264, an audio output system 266 and a computer 268. As depicted, the customer premises equipment is located with a home or office environment. Using the DCC, any one of the components in set 256 may be employed to access information via the broadband network. The information is represented as one of three objects, including telephone company information 270, document services 272 or third party information services 274. Further details of the document services object are found in copending application Ser. No. 08/768,452 (Atty. Docket No. D/95287), filed concurrently herewith and hereby incorporated by reference for its teachings. Also depicted in FIG. 10 is Controller management system 280. FIG. 11 is a detailed view of the physical interconnections achieved with the document communications controller. In particular, the DCC is connected to the telco via an external ATM connection 290. Within the customer premises, interconnections to the ATM network are provided via the DCC. As will be described in further detail with respect to FIGS. 14 and 15, interface ports are provided on the DCC hardware to interconnect ISDN telephony equipment 292, local area network 294, video equipment 298, audio equipment 300 and other consumer owned services represented as block 296. It will be appreciated that the consumer owned services may include expansion capability for third-party services provided on the customer premises. Such services may include on-demand video, video conferencing, interactive television, digital audio. As will described herein, the various pieces of diverse home/office hardware require differing interfaces and protocols for interconnection. The DCC is intended to meet the requirements of the diverse hardware, providing a common interface for all to the ATM network 290. The DCC is intended as a low cost communications device consisting of a set of network adaptor cards or components that may be connected to a general purpose processor having associated memory and an ATM switch. In one embodiment, the components of the DCC are tied together using a very fast PCI bus. Such a configuration enables the addition of special functionality through the addition of industry standard PCI cards. Referring to FIG. 12, depicted therein is a schematic illustration of an exemplary hardware embodiment for the document communications controller 250. Preferably, the processor base 306 includes an IBM Power PC (#403 GA) CPU 310, connected to memory 312 via a local bus-to-PCI bus architecture (V3 290PBC) and backplane (not shown). Memory 312 preferably includes a 512 KB ROM, non-volatile random access memory (NVRAM) and a slave PCI memory burst DRAM memory. so as to enable data stream buffering on the order of 128 megabytes. The processor base further includes an Ethernet.RTM. connection and RS232 communication port (not shown). The PCI backplane provides at least four standard PCI interface slots 320. In one embodiment, ATM Switch 322 is inserted into interface slot 320 to provide a fiber ATM interface capable of a bandwidth on the order of 155 megabits per second (Mb/s). Moreover, the ATM switch preferably provides at least 4 low cost fiber ATM channels. The remaining interface slots in the backplane can be made available, via PCI option cards 324, for interfacing to disk storage, an audio interface, or ISDN and analog telephone interfaces. The hardware of FIG. 12 is partionable into three functional parts. The first part is the core hardware block consisting of the CPU and associated memory. The second part is the ATM switch represented by a PCI slot and the ATM Switch subsystem 322. The third functional part is the bridge or expansion hardware 326, including PCI slots 320 and option cards 324. The processor base 306 is intended to provide services that may be identified as a single predominant interface standard, whereas the expansion options are intended to interface to those services having a multiplicity of interface standards (e.g., video). To provide video interfaces, a PCI video card (not shown) would be used. The PCI video card would preferably include the appropriate compression and video processing circuitry and would be a customizable option to be installed in a cabint housing the DCC 250. Also included on the processor base of FIG. 12 is a PCMCIA interface 340. The interface preferably supports a pair of type-2 PCMCIA slots and complies to PC Card Standard Specification Release 2.1. The PCMCIA interface is interconnected to the PCI bus and consists essentially of a Texas Instrument.RTM. 1050 PCI-to-PCMCIA controller and associated sockets. FIG. 13 is a block diagram illustrating various components of the base processor of FIG. 12. In particular, base processor 306 includes an IBM.RTM. Power PC processor 350, a highly integrated 32-bit processor with the PowerPC instruction set. Also included in the base processor is a DRAM controller, programmable chip selects, an interrupt controller (controlling up to 5 external interrupt inputs) and a serial port. The base processor further includes a 2KB instruction cache and a 1KB data cache. Both caches being two-way associative. The local memory comprises 512MB of Programmable ROM (PROM) 352. In the embodiment depicted in FIGS. 12 and 13, the executable code will be transferred from the local PROM 352 to the local DRAM 354, where it will be stored for faster execution. Other peripheral circuitry located on the local bus of the base processor includes an Intel.RTM. 82596 Ethernet controller 356 having associated driver and receiver circuits (not shown) for a 10 BaseT Ethernet connection. Circuit 358 includes a real-time clock (RTC) and about 8KB of static RAM (SRAM). In the first embodiment of the DCC depicted in FIG. 13, the processor subsystem 310 interfaces with the PCI bus through a V3 290 PCI Bridge chip 360 (available from V3 Corp.). The bridge chip 360 handles data flow to/from the PCI. For the processor to/from the PCI bus, the bridge includes a 256 byte FIFO buffer to temporarily store posted processor witings direct to the PCI bus, and a 32 byte FIFO buffer for processor readings from the PCI bus. Two of the DMA channels built into the processor base will be employed to write data into, or read data out from, the bridge chip FIFOs. The bridge chip will acquire the PCI bus as a bus master, transferring the data depending upon the state of the FIFOs. FIG. 14 is a more detailed block diagram of the ATM subsystem 322 illustrated in FIG. 12. The ATM subsystem for the first embodiment is a PCI compliant printed wiring board (PWB) that can be interconnected with any system having PCI bus interface sockets. Generally, the ATM subsystem can be split into two operationally distinct units as illustrated in the figure; ATM Network interface unit 400 and ATM Subsystem Board 402. ATM subsystem board 402 is a 4-port ATM switch, having four 155 Mb/s SONET fiber optic compliant ports 410. Moreover, the four ports are completely identical and can be connected to any combination of public/private ATM networks. The on board ATM switch is implemented, as illustrated, by a 5-port switch 414, where the remaining (5th) port 412 being connected/accessed via PCISAR chips 416 and the PCI bus 418. PCISAR chip 416 provides a PCI bus interface to the ATM system switch and port, and includes a Utopia interface to the PHY devices 422. PCISAR 416 also provides segmentation of the AAL5 format to ATM cells during transmission, including functionality for sixteen virtual transmitting channels, rate control, transmitter CRC insertion, and F4 and F5 flow OAM cells. The PCISAR further provides reassembly of ATM cells to AAL5 format during receiving, preferably including 8095 virtual receiving channels, receiver CRC and length error detection. As depicted, the ATM subsystem board 402 and the ATM Network interface unit 400 preferably provide virtual switching/remapping--on the order of four thousand switching/mapping entries per port. Details of switching circuits and contention resolution are found in U.S. Pat. No. 5,305,311 to Lyles and U.S. Pat. No. 4,761,780 to Bingham et al. as well as the proceedings of the International Switching Symposium, "Large Packet Switch and Contention Resolution, A. Cisneros, Vol. III, p. 77-83 (Poster session Paper No. 14), the relevant portions of which are hereby incorporated by reference. Also provided are non-block switching, multicasting, peak cell rate policing on the virtual channels, including cell lost priority updates due to peak cell rate violations and cell drops due to peak cell rate violations. Cell count statistics are maintained on a per input channel basis and cell lost statistics are maintained on a per switch device basis. In the alternative embodiment of FIG. 15, the DCC interface platform could include various commercially available components arranged in an interconnected fashion to provide all of the functionality previously discussed with respect to FIGS. 10 and 11. Referring to FIG. 15, depicted therein is a hardware block diagram for the DCC interface platform. A Motorola MC68360.TM. Integrated Multiprotocol processor 510 is used as the main processor on the hardware platform. Connected thereto is local RAM 512 of at least 4 Mbytes, expandable to 16 Mbytes. Block 514 represents a ROM device (e.g., PROM, EPROM, E.sup.2 PROM) for boot strap code and application software storage, while NVRAM device 516 is intended for the storage of hardware configuration parameters. Services available from the hardware printed circuit board 500 include Analog to Digital and Digital to Analog video conversion and frame capture via video coder 520, video scaler 522, Frame RAM 524 and compressor 526. Preferably, compressor 526 is capable of providing the well-known JPEG compression of the video images stored in Frame RAM 524. Also included on PCB 500 is Analog to Digital and Digital to Analog audio conversion and acquisition hardware represented as audio coder/decoder 530. Motion JPEG compression and decompression is accomplished via compressor 526 and decompressor 532, respectively. An ATM/SONET interface is implemented via hardware component blocks 540, 542 and 544. Similarly, the hardware also provides Ethernet LAN and Serial RS232 interfaces An address/data bus 550 is employed to facilitate high-speed interconnection of the various components. The hardware interfaces are controlled via field programmable gate arrays (FPGA) 554 (video) and 556 (control). The FPGA's are Xilinx.TM. gate arrays although the functionality of the gate arrays is preferably accomplished using application specific integrated circuits. Included in the hardware interfaces, but not specifically illustrated in FIG. 15, are the following connections: 1 pair of optical fiber (one for transmit and one for receive); 1 composite video (NTSC) input; 2 S-video input; 1 composite video (NTSC) output; 1 S-video output; 2 line level audio inputs (Right and Left channels); 2 line level audio outputs (Right and Left channels); 1 Ethernet LAN connection; and 1 RS232 serial connection. The software operating on the DCC processor 510 is preferably a VxWorks.TM. 5.2 real-time multi-tasking kernel and VxWorks Shell that provides the user interface for exercising the capabilities of the DCC via the operating system's Shell interface. Upon consideration of the differences between the first embodiment of FIG. 12 and the alternative embodiment of FIG. 15, it will be appreciated that the alternative embodiment provides greater hardware support for various consumer equipment, for example, a video interface, an audio interface, and a television output port. Referring to FIG. 16 there is shown a representative layout of the hardware components depicted in FIGS. 12-14. Generally, the components will be housed in a chassis 450. Along the bottom of chassis 450 is the processor PWB 452, containing the generally denoted by reference numeral 306 in FIG. 12. Processor PWB 452 includes sockets 454, into one which is plugged a PCI expansion board 456. Also connected to the processor PWB 452 is bridge interface PWB 460, connected to the processor PWB 452 via interface connector 462. As previously noted, the bridge boar contains sockets for up to 4 PCI compatible boards, one or more of which are occupied by the ATM switch PWB 402 and/or ATM Network interface unit 400. As will be appreciated, chassis 450 will also include a power supply 468. Illustrated in FIG. 17 is an overview of the ATM software architecture. Along the right side of the figure are layer labels corresponding to the well known OSI Reference Model. The physical layer, layer 1, includes the ATM switch hardware and associated interfaces. Layer 2 represents the ATM drivers; software providing the ability for application programs to communicate with/via the ATM switch. Layers 3-5 are comprised of three separate code "planes"; control plane 502, user plane 504 and management plane 506. On top of the three planes is the ATM application software (layers 6-7), essentially comprising application programs suitable for exercising the functionality of the lower layers. One such application may be the principled document bank and its associated software as described in the copending application previously incorporated herein by reference. Referring briefly to FIG. 18 the User Plane 504, as depicted in FIG. 17, preferably provides user-to-user information transfer functionality. In addition User Plane 504 includes controls that are required for the information transfer, including flow control and error recovery. As represented in the figure, ATM driver 510 provides encapsulation and termination functionality for IP block 512 in the User Plane. The User Plane also provides access for specific functionality via the ATM application program interface (ATM API). Now referring to FIG. 19, displayed therein is a detailed view of the software architecture illustrating the interrelationships between various aspects of the Control Plane 502 as previously shown in FIG. 17. In one embodiment, the Control Plane 502 supports call control and connection functionality, such as signalling functions 530, for the ATM switch. The signalling function 530 establishes, supervises and releases calls and connections. ATM signalling messages are based upon B-ISDN Draft Recommendation Q.2931, and example signals include: connect, connect acknowledge, release, restart, setup and status. Within the signaling layer, there is depicted a Signal ATM Adaption Layer (SAAL) having a Service Specific Coordination Function (SSCF) and a Service Specific Connection Oriented Protocol (SSCOP). FIG. 20 illustrates what is believed to be a preferred embodiment for the combination of the User Plane and Control Plane functionality, where the signalling layer provides signals to the ATM application layer and the control functionality manage the transfer of data to/from the ATM application layer. As represented in FIG. 21 the ATM Management Plane 506 controls an ATM device, for example, a switch of a hub. The Management Plane is defined by the ATM Forum's Interim Local Management Interface (ILMI), where the current protocol chosen for communications is SMNP. The management information defined by the ILMI provides status and configuration information from the UNI Management Entity (UME; the software object that collects network information) regarding its User Network Interface (UNI) previously characterized herein as the document communications controller (DCC). The information obtained by the UME details the status and configuration of both the ATM and physical layers (layer 1) at the UNI. The information is then organized into a Management Information Base (MIB) so as to be accessible by the ATM Network Management Application 540. In recapitulation, the present invention is a method and apparatus for providing commonality in the interface between a consumer's telecommunication equipment and a plurality of broadband information distribution networks. The present invention further includes an architecture through which a user (or more appropriately a principal) may obtain secure, authorized and billable connections to broadband networks. The invention provides a general-purpose, full-bandwidth, bi-directional communication device with built-in Authentication, Authorization, and Accounting (AAA) capabilities that connect a home or business with ATM and other switched broadband digital networks in a convenient manner at reasonable cost. The device supports a Document Services Architecture (DSA) and, in particular, supports agent-based communications (including interaction with an Agent Instance Service) to ensure well-behaved communications and fair allocation of network resources among users. The device can be used in a heterogeneous technical environment and with different types of networks and protocols. It is, therefore, apparent that there has been provided, in accordance with the present invention, a method and apparatus for the control of document communication. While this invention has been described in conjunction with preferred embodiments thereof, it is evident that many alternatives, modifications, and variations will be apparent to those skilled in the art. Accordingly, it is intended to embrace all such alternatives, modifications and variations that fall within the spirit and broad scope of the appended claims.
APPENDIX
__________________________________________________________________________
account-do.re
#.parallel.
Copyright (C) 1995 Xerox Corporation. All Rights Reserved. Copyright
protection claimed includes all forms and matters of copyrightable
material and information now allowed by statutory or judicial law or
hereinafter granted, including without limitation, material generated
from the software programs which are displayed on the screen such as
icons, screen display looks, etc.
.parallel.#
!! in-package("RU")
!! in-grammar('user)
constant *account-length*: integer = 555
constant *account-type*: integer = 666
var ACCOUNTTNG-SERVICE: object-class subtype-of infrastructure
var Accounting-Service-Name: map(accounting-service, symbol)
= {.parallel.}
var Acct-Data-Base: map(accounting-service, set(account-base))
computed-using Acct-Data-Base(@@) = {}
var ACCOUNT-BASE: object-class subtype-of accounting-service
var Database-Manager-Name: map(account-base, set(symbol))
computed-using database-manager-name(@@) = {}
var account-base-records: map(account-base, set(account-record))
computed-using account-base-records(@@) = {}
#.parallel.
var ACCOUNT-BUFFER: object-class subtype-of conversation
var account-buffer-records: map(account-buffer, set(account-record))
computed-using account-buffer-records(@@) = {}
var account-buffer-id: map(account-buffer, integer) = {.parallel.}
var conversation-sending-receiving: map(conversation, account-buffer) =
{.parallel.}
.parallel.#
var ACCOUNTING-MIB: object-class subtype-of accounting-service
var MIB-Module-Identity: map(accounting-MIB, symbol) = {.parallel.}
var MIB-Module-Description: map(accounting-MIB, string) = {.parallel.}
var ACCOUNT-RECORD: object-class subtype-of conversation
var account-header-value: map(account-record, account-header)
= {.parallel.}
var extension-vector-value: map(account-record, set(extension-vector))
computed-using extension-vector-vaiue(@@) = {}
var trailer-record-value: map(account-record, trailer-record)
= {.parallel.}
var ACCOUNT-HEADER: object-class subtype-of account-record
var account-length: map(account-header, integer) = {.parallel.}
var account-type: map(account-header, integer) = {.parallel.}
var P-1: map(account-header, dsa-narue) = {.parallel.}
var TM-1: map(account-header, dsa-name) = {.parallel.}
var P-2: map(account-header, dsa-name) = {.parallel.}
var TM-2: map(account-header, dsa-name) = {.parallel.}
var cid: map(account-header, integer) = {.parallel.}
var account-GUTMID: map(account-header, gutmid) = {.parallel.}
var account-billable?: map(account-header, boolean) = {.parallel.}
var account-time-stamp: map(account-header, dsa-time) = {.parallel.}
var EXTENSION-HEADER: object-class subtype-of account-record
var ext-length: map(extension-header, integer) = {.parallel.}
var ext-type: map(extension-header, integer) = {.parallel.}
var ext-gutmaid: map(extension-header, gutmid) = {.parallel.}
var ext-cid: map(extension-header, integer) = {.parallel.}
var EXTENSION-VECTOR: object-class subtype-of account-record
var acct-value: map(extension-vector, symbol) = {.parallel.}
var acct-value-length: map(extension-vector, integer) = {.parallel.}
var acct-value-type: map(extension-vector, integer) = {.parallel.}
var extension-billable?: map(extension-vector, boolean) = {.parallel.}
var TRAILER-RECORD: object-class subtype-of account-record
var trailer-Time-Stamp: map(trailer-record, dsa-time) = {.parallel.}
var status: map(trailer-record, integer) = {.parallel.}
var trailer-type: map(trailer-record, integer) = {.parallel.}
var conversation-account-record: map(conversation, account-record) =
{.parallel.}
var Accounting-Service-Methods: set(symbol) = {'account-open-record-tm,
'account-close-record-tm,
'account-append-record-tm,
'account-flush-record-tm,
'account-forward-tm,
'account-accept-tm,
'account-retrieve-tm,
'account-delete-on-attrs-tm,
'account-extract-on-attrs-tm }
var ACCOUNTING-VERB: object-class subtype-of DSA-verb
var ACCOUNTING-INTERFACE: map(dsa-context, set(accounting-verb))
computed-using accounting-interface(@@) = {}
var ACCOUNT-OPEN-RECORD: objectclass subtype-of accounting-verb
var AORconversation: map(account-open-record, conversation)
= {.parallel.}
var AOR-billable?: map(account-open4ecord, boolean) = {.parallel.}
var AOR-reason-code: map(account-open-record, reason-code)
= {.parallel.}
var ACCOUNT-CLOSE-RECORD: objectclass subtype-of accounting-verb
var ACR-conversation: map(account-close-record, conversation)
= {.parallel.}
var ACR-billable?: map(account-close-record, boolean) = {.parallel.}
var flush?: map(account-close-record, boolean) = {.parallel.}
var ACR-reason-code: map(account-close-record, reason-code)
= {.parallel.}
var ACCOUNT-APPEND-RECORD. object-class subtype-of accounting-verb
var AARconversanon: map(account-append4ecord, conversafion)
= {.parallel.}
var extension.sub.-- vector: map(account-append-record, symbol) =
{.parallel.}
var AAR-reason-code: map(account-append-record, reason-code)
= {.parallel.}
var ACCOUNT-FLUSH-RECORD: object-class subtype-of accounting-verb
var AFR-conversation: map(account-flush-record, conversation)
= {.parallel.}
var AFR-reason-code: map(account-flush-record, reason-code)
= {.parallel.}
var ACCOUNT-FORWARD: object-class subtype-of accounting-verb
var AF-acct-data-base: map(account-forward, set(account-base))
computed-using af-acct-data-base(@@) = {}
var acct-record-p.sub.-- 1: map(account-forward, principal)
= {.parallel.}
var to-account-service: map(account-forward, accounting-service) =
{.parallel.}
var AF-reason-code: map(account-forward, reason-code) = {.parallel.}
var result: map(account-forward, string) = {.parallel.}
var ACCOUNT-RETRIEVE: object-class subtype-of accounting-verb
var ar-acct-data-base: map(account-retrieve, set(account-base))
computed-using ar-acct-data-base(@@) = {}
var sending-p.sub.-- 1: map(account-retrieve, principal) = {.parallel.}
var ar-reason-code: map(account-retrieve, reason-code) = {.parallel.}
var ACCT-DELETE-ON-ATTRIBUTES: object-class subtype-of accounting-verb
var adoa-acct-data-base: map(acct-delete-on-attributes,
set(account-base))
computed-using adoa-acct-data-base(@@) = {}
var adoa-reason-code: map(acct-delete-on-attributes, reason-code) = {}
var adoa-account-record: map(acct-delete-on-attributes, account-record)
= {.parallel.}
var adoa-extension-vector: map(acct-delete-on-attributes,
set(extension-vector))
computed-using adoa-extension-vector(@@) = {}
var adoa-keys: map(acct-delete-on-attributes, seq(symbol))
computed-using adoa-keys(@@) = []
var ACCt-EXTRACT-ON-ATTRIBUTES: objectclass subtype-of accounting-verb
var aeoa-acct-data-base: map(acct-extract-on-attributes,
set(account-base))
computed-using aeoa-acct-data-base(@@) = {}
var aeoa-account-record: map(acct-extract-on-attributes, account-record)
= {.parallel.}
var aeoa-extension-vector: map(acct-extract-on-attributes,
set(extension-vector))
computed-using aeoa-extension-vector(@@) = {}
var aeoa-keys: map(acct-extract-on-attributes, seq(symbol))
computed-using aeoa-keys(@@) = []
var aeoa-reason-code: map(acct-extract-on-attributes, reason-code) =
{.parallel.}
form DECLARE-ACCOUNTING-TREE-ATTRIBUTES
define-tree-attributes('accounting-service, {'accounting-service-name,
'acct-data-base));
define-tree-attributes('account-base, {'database-manager-name,
'account-base-records });
% define-tree-attributes('account-buffer, {'account-buffer-records,
% account-buffer-id});
define-tree-attributes('accounting-mib, {'mib-module-identity,
'mib-module-description});
define-tree-attributes('account-record, {'account-header-value,
'extension-vector-value,
'trailer-record-value});
define-tree-attributes('account-header, {'account-length,
'account-type,
'tm-1,
'tm-2,
'cid,
'account-billable?,
'account-time-stamp,
'account-gutmid));
define-tree-attributes('extension-header, {'ext-length,
'ext-type,
'ext-gutmid,
'ext-cid });
define-tree-attributes('extension-vector, {'acct-value,
acct-valuelength,
acct-value-type,
'extension-billable?});
define-tree-attributes('trailer-record,
'trailer-time-stamp,
'status,
'trailer-type});
define-tree-attributes('account-open-record, {'aor-conversation,
'aor-billable?,
'aor-reason-code});
define-tree-attributes('account-close-record, {'acr-conversation,
'acr-billable?,
'flush?,
'acr-reason-code});
define-tree-attributes('account-append-record, {'aar-conversation,
'extension.sub.-- vector,
'aar-reason-code});
define-tree-attributes('account-flush-record, {'afr-conversation,
'afr-reason-code});
define-tree-attributes('account-forward, {'af-acct-data-base,
'acct-record-p.sub.-- 1,
'to-account-service,
'af-reason-code, 'result});
define-tree-attributes('account-retrieve, {'ar-acct-data-base,
'sending-p.sub.-- 1,
'ar-reason-code});
define-tree-attributes('acct-delete-on-attributes, {'adoa-acct-data-base,
'adoa-reason-code,
'adoa-account-record,
'adoa-extension-vector,
'adoa-keys });
define-tree-attributes('acct-extract-on-attributes, {'aeoa-acct-data-base
'aeoa-reason-code,
'aeoa-account-record,
'aeoa-extension-vector,
'aeoa-keys})
ais-dom.re
#.parallel.
Copyright (C) 1995 Xerox Corporation. All Rights Reserved. Copyright
protection claimed includes all forms and matters of copyrightable
material and information now allowed by statutory or judicial law or
hereinafter granted, including without limitation, material generated
from the software programs which are displayed on the screen such as
icons, screen display looks, etc.
.parallel.#
!! in-package("RU")
!! in-grammar('user)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%
% ais#domain-model.re
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%
% Agent Instance Service Object Classes
var AGENT-INSTANCE-SERVICE: object-class subtype-of infrastructure
var AIS-NAME: map(agent-instance-service, dsa-name) = {.parallel.}
var AIS-PROBABILITY-VECTOR: object-class subtype-of agent-instance-service
var AIS-Vector-Depth: map(ais-probability-vector, integer)
= {.parallel.}
var AIS-Vector-Width: map(ais-probability-vector, integer)
= {.parallel.}
var Ais-Vector-Filters: map(ais-probabi1ity-vector, set(bloom-filter))
computed-using ais-vector-filters(@@) = {}
var BLOOM-FILTER: object-class subtype-of ais-probability-vector
var BOBS-BLOOM-FILTER: map(bloom-filter, symbol) = {.parallel.}
var AIS-ENTRY: object-class subtype-of agent-instance-service
%Following because net-address was defined for convenience, not function
var REAL-NET-ADDRESS: object-class subtype-of address-family
var BOBS-REAL-ADDRESS: map(real-net-address, symbol) = {.parallel.}
var Active-Principal-Name: map(ais-entry, principal) = {.parallel.}
var Active-Address-Families:
map(ais-entry, set(address-family))
computed-using active-address-families(@@) = {}
var Active-Addresses: map(ais-entry, set(real-net-address))
computed-using active-addresses(@@) = {}
var AIS-Active-Agent-List: map(agent-instance-service, set(ais-entry))
computed-using ais-active-agent-list(@@) = {}
var Local-Probability: map(agent-instance-service,
ais-probability-vector) = {.parallel.}
| ||||||
