| XCC Technical SpecificationDescription: OpenSS7 Project Library XCCA PDF version of this document is available here. XOM Call Control (XCC)XOM Call Control (XCC) SpecificationAbout This ManualThis is Edition 7.20141001, last updated 2014-10-25, of The XOM Call Control (XCC) Specification, for Version 1.1 release 7.20141001 of the OpenSS7 package. PrefaceNoticeSoftware in this document and related software is released under the AGPL (see GNU Affero General Public License). Please note, however, that there are different licensing terms for some of the manual package and some of the documentation. Consult permission notices contained in the documentation of those components for more information. This document is released under the FDL (see GNU Free Documentation License) with no invariant sections, no front-cover texts and no back-cover texts. AbstractThis document is a Specification containing technical details concerning the implementation of the XOM Call Control (XCC) for OpenSS7. It contains recommendations on software architecture as well as platform and system applicability of the XOM Call Control (XCC). This document specifies a XOM Call Control (XCC) Specification in support of the OpenSS7 Call Control (CC) protocol stacks. It provides abstraction of the Call Control interface to these components as well as providing a basis for Call Control control for other Call Control protocols. PurposeThe purpose of this document is to provide technical documentation of the XOM Call Control (XCC). This document is intended to be included with the OpenSS7 STREAMS software package released by OpenSS7 Corporation. It is intended to assist software developers, maintainers and users of the XOM Call Control (XCC) with understanding the software architecture and technical interfaces that are made available in the software package. IntentIt is the intent of this document that it act as the primary source of information concerning the XOM Call Control (XCC). This document is intended to provide information for writers of OpenSS7 XOM Call Control (XCC) applications as well as writers of OpenSS7 XOM Call Control (XCC) Users. AudienceThe audience for this document is software developers, maintainers and users and integrators of the XOM Call Control (XCC). The target audience is developers and users of the OpenSS7 SS7 stack. Revision HistoryTake care that you are working with a current version of this documentation: you will not be notified of updates. To ensure that you are working with a current version, check the OpenSS7 Project website for a current version. A current version of this specification is normally distributed with the OpenSS7 package, openss7-1.1.7.20141001.1 Version ControlAlthough the author has attempted to ensure that the information in this document is complete and correct, neither the Author nor OpenSS7 Corporation will take any responsibility in it. OpenSS7 Corporation is making this documentation available as a reference point for the industry. While OpenSS7 Corporation believes that these interfaces are well defined in this release of the document, minor changes may be made prior to products conforming to the interfaces being made available. OpenSS7 Corporation reserves the right to revise this software and documentation for any reason, including but not limited to, conformity with standards promulgated by various agencies, utilization of advances in the state of the technical arts, or the reflection of changes in the design of any techniques, or procedures embodied, described, or referred to herein. OpenSS7 Corporation is under no obligation to provide any feature listed herein. $Log: xcc.texi,v $ Revision 1.1.2.2 2011-02-07 02:21:48 brian - updated manuals Revision 1.1.2.1 2009-06-21 10:57:56 brian - added files to new distro ISO 9000 ComplianceOnly the TeX, texinfo, or roff source for this maual is controlled. An opaque (printed, postscript or portable document format) version of this manual is a UNCONTROLLED VERSION. DisclaimerOpenSS7 Corporation disclaims all warranties with regard to this documentation including all implied warranties of merchantability, fitness for a particular purpose, non-infrincement, or title; that the contents of the manual are suitable for any purpose, or that the implementation of such contents will not infringe on any third party patents, copyrights, trademarks or other rights. In no event shall OpenSS7 Corporation be liable for any direct, indirect, special or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action or contract, negligence or other tortious action, arising out of or in connection with any use of this documentation or the performance or implementation of the contents thereof. U.S. Government Restricted RightsIf you are licensing this Software on behalf of the U.S. Government ("Government"), the following provisions apply to you. If the Software is supplied by the Department of Defense ("DoD"), it is classified as "Commercial Computer Software" under paragraph 252.227-7014 of the DoD Supplement to the Federal Aquisition Regulations ("DFARS") (or any successor regulations) and the Government is acquiring only the license rights granded herein (the license rights customarily provided to non-Government users). If the Software is supplied to any unit or agency of the Government other than DoD, it is classified as "Restricted Computer Software" and the Government’s rights in the Software are defined in paragraph 52.227-19 of the Federal Acquisition Regulations ("FAR") (or any successor regulations) or, in the cases of NASA, in paragraph 18.52.227-86 of the NASA Supplerment to the FAR (or any successor regulations). AcknowledgementsThe OpenSS7 Project was funded in part by: Thanks to the subscribers to and sponsors of The OpenSS7 Project. Without their support, open software like this would not be possible. As with most open source projects, this project would not have been possible without the valiant efforts and productive software of the Free Software Foundation, the Linux Kernel Community, and the open source software movement at large. 1 Introduction1.1 OverviewThe XOM Call Control Programming Interface (abbreviated XCC) defines an Application Program Inteface (API) to call control services. It is referred to as the interface throughout this specification. The interface is designed to offer services that are consistent with, but not limited to, the ITU-T Recommendation Q.761, Q.931, H.225.0 and IETF SIP-T standards. These standards were published in 1997 and have been stable for many years. The interface is also designated to offer services that are consistent with the 3GPP TS 28.001 standards for GSM mobile networks. All of the above standards are referred to in this document as the Standards. Access to other call control services through the API is not prohibited, but has not been explicitly considered. The interface is designed to be used and implemented in conjunction with the use and implementation of the general-purpose XOM API (reference XOM). A brief introduction to Call Control Services is given in Introductory Concepts. Following this is an overview of OSI-Abstract-DATA Manipulation OM, which provides the Data Abstraction service as defined in the XOM specification (reference XOM). Then the optional features of this specification are described, and the chapter closes with a list of abbreviations. In all cases the reader should refer to the Standards (reference ISUP, reference ISDN, reference H.323, or to the XOM Specification (reference XOM) for further authoritative details. The structure of the remaining chapters and appendices are described in the Preface. 1.2 Format of the SpecificationThis specification describes a programming language-independent interface to the Call Control Services together with a specific C language binding of that interface. Several conventions are used to identify particular items. The general conventions are described in the Preface, while the C language binding conventions are described in C Language Binding. 1.3 Introductory Concepts1.3.1 Relationship to Call Control ProtocolsThe interaction between call control programs acting in a call control entity role are realized through the exchange of call control service information. The general communications service for the call control applications is the Call Control Protocol. Call control protocols define the following operations:
This communication may be accomplished using the ITU-T or ANSI Message Transfer Part protocol. 1.3.2 XCC and the Call Control ProviderThe XCC interface provides access to the CC service provider, which offers all of the facilities defined in the Standards. It also provides facilities such as automatic association management and automatic session handling. The interface is designed not to restrict the services offered to those of specific service packages of ISUP. The interface defined in this specification is “symmetrical” in the sense that it can be used to implement call control programs acting in any of the CC producer or consumer roles (e.g. MSC, BSC). The interface supports:
The interface provides the ability to send requests on the consumer side and to receive indications on the producer side within a call control interaction. Furthermore, if the service is confirmed, the producer will be able to send back responses that will be received as confirmations by the consumer. 1.4 Relationship to ISUP, ISDN, H.323 and SIP-TThe API is essentially based on the abstract services of the ITU-T ISUP and ISDN, but is independent of the underlying communications stack. The API allows the manipulation of ITU-T and ANSI call control service information. Thus this API does not preclude and does not force the use of either the ITU-T ISUP protocol or the ANSI ISUP protocol. The XCC API offers several abstract call control service views: the on of ISUP, the one of ISDN, the one of H.323, the one of GSM BSSAP, and that of SIP-T. The contents of ITU-T ISUP messages are described in ITU-T Recommendation Q.761. These messages implicitly define the ITU-T ISUP services. The mapping between ITU-T ISUP services and various service primitives and parameters of the XCC API are described below. The services offered by the XCC API are a superset of those defined by ITU-T and ANSI. The general communication protocol for ANSI ISUP is the MTP as specified in ANSI T1.113.4/200. The general communication protocol for ITU-T ISUP is the MTP as specified in ITU-T Recommendation series Q.761 through Q.764. The abstract call control views of XCC (ITU-T and ANSI, ISUP, ISDN, H.323, BSSAP or SIP-T) are independent of the underlying protocol. However, the ITU-T view on top of ANSI MTP requires that an appropriate mapping of ITU-T ISUP services over ANSI MTP is widely available. 1.5 Relationship to Data Abstraction ServicesXCC is dependent on standard data abstraction services to ensure portability of call control software written to the XCC specification. XCC functions pass most arguments by reference. The data referenced by these arguments is modelled and manipulated in an object-oriented fashion. Call application data abstraction services are provided by the XOM API (reference XOM). The definitions below introduce the various concepts that are used by Call Control data abstraction services.
1.6 Mandatory and Optional FeaturesThe interface defines an Application Program Interface (API) that application programs can use to access the functionality of the underlying Call Control Services. The interface does not define or imply any profile of that service. Note that nothing in this specification requires that the implementation of the interface or the Call Control Services itself acutally makes use of TCAP or other parts of the model, just so long as it provides the defined service. Also, the scope of the Call Control Services to which an application has access is not determined; it is not restricted to ITU-T ISUP operations. Some OM attributes are optional: these are marked (Optional Functionality) in the OM class definitions. They are:
Some items of behaviour of the interface and a number of aspects of the Call Control Services provider are implemetnation-defined. These are:
The default values of some OM attributes on OM object Session are locally administered. This API assumes the provision of automatic association management and automatic session handling by the CC provider. The interface enables negotiation of the use of the various defined features of the CC provider and those of the interface. 1.7 PackagesThe specification defines three Call Control packages (Common CC package, ITU-T CC package and ANSI CC package), Interface Class Definitions. These packages define the OM classes required by the interface functions to perform ITU-T CC or ANSI CC services. The Common CC package, which also includes the errors defined (see Errors), is mandatory. The ITU-T CC package and the ANSI CC package are optional, but at least one of them must be supported by the implementation. The ITU-T service view and the ANSI service view assume the support of the corresponding ITU-T CC or ANSI CC package by the implementation. The use of the optional packages is negotiated using the 1.8 TerminologyThe terms implementation-defined, may, should, undefined, unspecified, and will are used in this document with the meanings ascribed to them in reference XPG4, see also Glossary. 1.9 Abbreviations
2 C Language BindingThis chapter sets out certain characteristics of the C language binding to the interface. The binding specifies C identifiers for all the elements of the interface, so that application programs written in C can access the Mobile Application Services. These elements include function names, typedef names and constants. All of the C identifiers are mechanically derived from the language independent names as explained below. There is a complete list of all the identifiers in C Headers. For ease of use, some of these identifiers are defined in the specification alongside the language-independent name. A Function() is indicated as shown. A The names of The definitions of the C identifiers appear in four headers:
2.1 C Naming ConventionsThe interfaces uses part of the C public namespace for its facilities. All identifiers start with the letters cc, CC or OCC, and more detail of the conventions used are given in the following table. Note that the interface reserves all identifiers starting with the letters ccP for private (i.e. internal) use by implementations of the interface. It also reserves all identifiers starting with the letters ccX or CCX for vendor-specific extensions of the interface. Application programmers should not use any identifier starting with these letters. The OSI-Abstract-Data Manipulation API uses similar, thorugh not identical, naming conventions, that are described in XOM (reference XOM). All its identifiers are prefixes by the letters OM or om.
A complete list of all identifiers used (except those beginning ccP, ccX, CCX or OCC) is given in C Headers. No implementation of the interface will use any other public identifiers. A public identifier is any name except those reserved in section 4.1.2.1 of the ISO C Standard, and the public namespace is the set of all possible public identifiers. The C identifiers are derived from the langauage-independent names used throughput this specification by a purely mechanical process which depends on the kind of name:
2.2 Use and Implementtion of InterfacesEach of the following statements applies unless explicitly state otherwise in the detailed descriptions that follow: If an argument to a function has an invalid value (such as a value outside the domain of the function, or a pointer outside the address space of the program, or a null pointer), the behvaiour is undefined. Any function declared in a header may be implemented as a macro defined in the header, so a library
function should not be declared explicitly if its header is included. Any macro definition of a
function can be suppressed locally be encoding the name of the function in parentheses, because the
name is not then followed by the left parthesis that indicate expansion of a macro function name.
For the same syntactic reason, it is permitted to take the address of a library function even if it
is also defined as a macro. The use of 2.3 Function Return ValuesThe return value of a C function is always bound to the result of the language-independent
description. Functions return a value of Since C does not provide multiple return values, functions must return all other results by writing into storage passed by the application program. Any argument that is a pointer to such storage has a name ending with _return. For example, the C parameter declaration ‘OM_sint *invoke_id_return’ in the Service-Req() function indicates that the function will return an signed integer Invoke-Id as a result, so the actual argument to the function must be the address of a suitable variable. This notation allows the reader to distinguish between an input parameter that happes to be a pointer, and an output parameter where the * is used to simulate the semantics of passing by reference. 2.4 Compilation and LinkingAll applications programs that use this interface include the <xom.h> and <xcc.h> headers in that order, and at least one of the <xcc_gsm.h> and <xcc_ansi.h> headers. 3 DescriptionThe interface comprises a number of functions together with many OM classes and OM objects that are used as the arguments and results of the functions. Both the functions and the OM objects are based closely on the Abstract Service that is specified in the Standards (references ITU-T ISUP and ANSI ISUP). The interface models mobile application interactions as service requests made through a number of interface functions, which take a number of input arguments. Each valid request causes an operation within the producer which eventually returns a status and any result of the operation. All interactions between a Consumer and a Producer belong to a session, which is represented by an OM object passed as the first argument to most interface functions. The other arguments to the function include a context and various service-specific arguments. The context includes a number of parameters that are common to many functions and that seldom change from operation to operation. Each of the components of this model is described below, along with other features of the interface such as asynchronous function calls and security. 3.1 ServicesAs mentioned above, the Standards define Abstract Services that Consumers and Producers use. Each of these Absract Services maps to a single function call with the same name. The services are Service-req and Service-rsp. These are three functions called Receive(), Wait(), and Abandon() which have no counterpart in the Abstract Service. Receive() is used to receive indications and results of asynchronous operations, and is explained in Interface Functions. Wait() is used to suspend execution until indications are available for specified sessions. Abandon() is used to abandon locally the result of a pending asyncrhonous operation. Two additional functions Bind()2 and Unbind() are used to open and close a user-session. There are also other interface specific functions called Get-Assoc-Info(), Get-Last-Error(), Validate-object(), Error-Message(), Initialize(), Shutdown() and Negotiate(). The detailed specifications are given in Interface Functions. 3.1.1 Negotiation SequenceThe interface has an initialize and shutdown sequence that permits the negotiation of optional features. This involves the functions Initialize(), Negotiate(), and Shutdown(). Every application program must first call Initialize(), that returns a workspace. This workspace supports only the standard Common ISUP package, See Interface Class Definitions. The workspace can be extended to support either the ITU-T ISUP or ANSI ISUP package or both (see Interface Class Definitions, and any combination of the optional Mobile Application Services packages), or any vendor extensions. Vendor extensions may include additional packages, and may also include additional or modified functionality. All such packages or other extensions are identified by means of OSI Object Identifiers, and the Object Identifiers are supplied to the Negotiate() function to incorporate the extensions into the workspace. Features defined by this specification are described and assigned Object Identifiers in Interface Functions. A feature represents any package or any additional or modified functionality that is subject to negotiattion. The Negotiate() function allows some particular features to be made available. After a worksapce with the required features has been negotiated in this way, the application can use the workspace as required. It can create and manipulate OM objects using the OM functions, and can start one or more management sessions using Bind().3 All the sessions on a given workspace share the same features. Eventually, when it has completed its tasks, terminated all is mobile application sessions using Unbind(), and released all its OM objects using OM-Delete(), the application should ensure that resources associated with the interface are freed by calling Shutdown(). A miscellaneous error arises if an attempt is made to use an unavailable feature. If an instance of a class that is not in an available package is supplied as a function argument, the bad-class error arises. 3.1.2 Names, Addresses and TitlesTo address a wide variety of mobile application transport protocols the interface is capable of accepting various forms of object names, system addresses and program or system titles.
All three abstract classes participate in an implementation-specific name resolution scheme. It is assumed that given a Name, an implementation can determine the Title responsible for that Name. It is also assumed that given a Title, an implementation can determine the Address of that Title.4 The producer of an invoked operation may be explicitly designated at the interface boundary using the following precedence rules:
3.2 SessionA session identifies to which mobile application entity a particular operation will be sent. It contains some Bind-Arguments, such as the name of the consumer. The session is passed as the first argument to most interface functions. A session is described by an OM object of OM class Session. It is created, and appropriate parameter values may be set, using the OSI-Abstract-Data Manipulation functions. A mobile application session is then started with Bind()5 and later is terminated with Unbind(). A session with default parameters can be started by passing the constant Default-Session (‘(OM_object)CC_DEFAULT_SESSION’) as the Session argument to Bind(). Bind() must be called before the Session can be used as an argument to any other function in the interface. After Unbind() has been called, Bind() must be called again if another session is to be started. The interface supports multiple concurrent sessions, so that an application implemented as a single process, such as a server in a client-server model, can interact with the Mobile Application Services using several identities; and so that a process can interact directly and concurrently with different mobile application services. Detailed specifications of the OM class Session are given in Interface Class Definitions. A session can be used either acting as a consumer of mobile application services, or acting as a producer of mobile application services, or both. A session acn be restricted for use only with a designated program called the responder. When the responder is omitted and automatic association management is used, the session can be used to exchange mobile application service information with all processes. The responder (title and address) parameters of an opened session, if present, specifies the producer of the requested operation. The precedence rules on address and title of the responder are described in Names. Other OM attributes (vendors’ implementation extensions) may be included to specify characteristics of the underlying protocol used. There are three type of session objects: 3.2.1 AAM Enabled SessionThe Session collects together all the information that described a particular management interaction. The parameters that are to control such a session are set up in an instance of this OM class, which is then passed as an argument to Bind().6 This sets the OM attributes that describe the actual characteristics of the session, and starts the session. Such a started session can be passed as the first argument to interface functions. No attribute of a bound or connected session may be changed. The result of modifying a started session is unspecified. Finally, Unbind() is used to terminate the sesion, after which the parameters can be modified an a new session started using the same instance, if required. Multiple concurrent sessions can be run, by using multiple instances of this OM class. A session allows a requesting program (the requestor) to exchange mobile application information with another program designated (the responder) or by default to all programs. An AAM enabled session thus allows a mobile application entity to access either a portion of the mobile application services (that is, that are accessible via the designated responder) or all mobile application services. In the later case, the producer mobile application entity resolution is performed by the Mobile Application Service provider, according to the mobile application services invoked. This type of session object can not be used to receive or send ACSE related primitives or operations explicitly. The use ACSE explicitly, see AAM Disabled Session. 3.2.2 AAM Disabled SessionA session object can have Automatic Association Management disabled when it belongs to a workspace that has Automatic Association Management disabled via Negotiate(), which allows the user to explicitly send and receive ACSE operations to build and tear down associations. It gives explicit control over associations to the user. The Mobile Application Service provider does no ACSE operations on behalf of the user. When the user creates and binds a session object in a workspace with AAM disabled, only the following attributes within the session object can be specified:
The session object is then passed as an argument to Bind(),7 which binds the session. This bound session can only be used to send ACSE related operations an to receive ACSE related primitives. The following can be sent/received using this type of bound session:
The other attributes that relate to ACSE are specified within an Assoc-Argument or Assoc-Result object that is passed to, or returned from, Assoc-req(), Assoc-rsp(), or Receive(). 3.2.3 Associated SessionOnce a user has created a bound session that has AAM disabled, an association can be created. An association is represented by an associated or partially associated session object. An associated session is returned as the result of building a new association. The associated session is used, like a bound session, by sending and receiving mobile application dialog handling or service operations. The major difference is that an associated session object can only be used to send and receive operations to, or from, a single remote mobile application entity. After a session is associated, the user can abort the association, which implicitly unbinds the associated, or partialyl associated, session. The precedence rules for common parameters within the Session and the Context objects are different for associated session objects. Once a session is in the associated state; the responder-Address and responder-Title cannot be overridden by the context object. To terminate this type of session, the user should either abort the session, which implicitly unbinds the session. If the user unbinds the associated session prior to aborting the association, the service provider will abort the association. 3.2.4 ADH Enabled SessionThe ADH enabled session allows a mobile application entity to invoke and respond to mobile application services requests and indications without regard for dialog handling. The Mobile Application Service provider provides all dialog handling. This type of session cannot be used to send dialog handling primitives or operations explicitly. To use dialog handling explicitly, see ADH Disabled Session. 3.2.5 ADH Disabled SessionA session object can have Automatic Dialog Handling disabled when it belongs to a workspace that has Automatic Dialog Handling disabled using the Negotiate() function. This allows the user to explicitly send and receive dialog handling operations to establish and tear down dialogs. It gives explicit control over dialogs to the user. The Mobile Application Service provider does no dialog handling operations on behalf of the user. Once the session object is bound (AAM enabled) or associated (AAM disabled) and has ADH disabled, the session must explicitly issue dialog handling operations for each mobile application service request or response. This bound or associated session can only be used to send dialog handling primitives. The following can be sent/received using this type of bound or associated session:
The other attributes that relate to dialog handling are specified within the Open-Argument, Accept-Result or Refuse-Result objects that are passed to, or returned from, Open(), Accept(), Refuse(), or Receive(). 3.2.6 Dialog SessionOnce a user has created a bound or associated session that has ADH disabled, a dialog can be created. A dialog is represented by a fully formed, or partially formed dialog, session object. A dialog session is returned as the result of building a new dialog. The dialog session is used, like a bound or associated session, by sending and receiving mobile application service operations. The major difference is that a dialog session object can only be used to send and receive operations within a single dialog with a single remote mobile application entity. After a session forms a dialog, the user can close or abort the dialog, which returns the session to the bound or associated state. The precedence rules for common parameters within the Session and the Context objects are different for dialog session objects. Once a session has formed a dialog, the dialog related arguments, application-Context-Name, cannot be overridden by the context object. To terminate this type of session, the user should either abort or close the dialog, which implicitly unbind the session. If the user unbinds the dialog session prior to either closing or aborting the dialog, the service provider will first attempt to close the dialog, and if that is rejected, will abort the dialog. 3.3 ContextThe context defines the characteristics of the mobile application interaction that are specific to a particular mobile application operation, but are often used unchanged for many operations. Since the parameters are presumed to be relatively static for a given user during a particular mobile application interaction, these arguments are collected into an OM object of OM class Context, which is supplied as the second argument of each mobile application operation. This serves to reduce the number of arguments passed to each function. The context includes various administrative details, such as the mode defined in the Abstract Service, which affect the processing of each mobile application operation. These include a number of Service Controls and Local Controls that allow control over some aspects of the operation. The Service Controls include mode, responder-Address, and responder-Title. The Local Controls include asynchronous, reply-Limit and time-Limit. Each of these is mapped onto an OM attribute in the Context, and they are detailed in Interface Class Definitions. The effect is as if they were passed as a group of additional arguments on every function call. The value of each component of the context is determined when the interface function is called, and remains fixed throughout the operation. The precedence rules on address and title of the responder are described in Names. Some of the OM attributes in the Context have default values, some of which are locally adminstered. The constant Default-Context (‘CC_DEFAULT_CONTEXT’) can be pased as the value of the Context argument to the interface functions, and has the same effect as a context OM object created with default values. The context must be a private object, unless it is Default-Context. Detailed specifications of the OM class Context are given in Interface Class Definitions. 3.4 Function ArgumentsThe Abstract Service defines specific arguments for each operation. These are mapped onto coresponding arguments to each interface function (which are aso called input parameters). Although each service has different arguments, some specific arguments recur in several operations; these are briefly introduced here. As far as the ITU-T CC package is concerned, OM classes are defined with a one-to-one mapping to the ASN.1 Abstract Syntax of ITU-T CC. Full details of these and all the other arguments are given in the function definitions in Interface Functions, and the OM class definitions in Interface Class Definitions. All arguments that are OM objects can generally be supplied to the interface functions as public objects (i.e, descriptor lists) or as private objects. Private objects must be created in the workspace that was returned by Initialize(). In some cases, constants can be supplied instead of OM objects. Note that wherever a function is stated as accepting an instance of a particular OM class as the value of an argument, it will also accept an instance of any subclass of that OM class. For example, the Service-Req function has a parameter argument, which accepts values of OM class Service-Argument. Any of the subclasses of Service-Argument may be supplied as the value of argument. Rules for interpretation of ‘ANY’ syntax appearing in function arguments are defined in Encoding and Decoding. 3.4.1 Encoding and DecodingXCC specifies two alternatives for encoding and decoding of Mobile Application Packages OM-Attribute values of type ‘ANY’, or any OM-Attribute values in a Mobiled Application Services package.
The encoding and decoding alternative to be used is negotiated through the Negotiate() function; See ‘Negotiate’. The XCC API does not specify the use of OM-Encode or OM-Decode for the OM classes defined in this specification, or in mobile application or services packages used with this specification. To ensure interoperability, the sender and receiver must follow the same encoding rules when converting between OM syntax and encoded syntax. If an algorithm is used to generate OM packages, then the algorithm must ensure that the generated OM syntax is consistent with the input abstract syntax (that is, the same encoded values must result from applying the encoding rules to either representation). The encoding rules used with the ITU-T CC and ANSI CC packages defined by this specification are ANS.1 BER. This does not imply that other encoding rules cannot be used with other packages defined in the future. For the API to encode and decode the OM attribute values according to the ASN.1 standard scheme, ASN.1 taggin information must be stored for each OM object and each OM attribute. Thus, the package definitions in the workspace need to incorporate the ASN.1 tagging information for each OM object and each OM attribute definition for all Mobile Application Services packages. As a minimum, the following requirements apply:
3.4.2 Argument and ResponseMost operations and notifications take an argument to specify the argument of the operation and a response when issuing the response of the operation. These arguments and responses are specified to accept values of OM classes that are consistent with the abstract service view (ITU-T CC or ANSI CC) of the current operation. The argument for a Service-req() function is represented by an instance of the OM Class ITUT-Service-Req-Argument for a ITU-T CC operation or an instance of the OM Class ANSI-Service-Req-Argument for an ANSI CC operation. The reponse for a Service-rsp() function is represented by an instance of the OM Class GSM-Service-Result, GSM-Linked-Reply-Argument Service-Error or GSM-Service-Reject to represent the possible responses of the ITU-T service request operation, or an instance of the ANSI-Service-Result, ANSI-Linked-Reply-Argument Service-Error or ANSI-Service-Reject to represent the possible responses of the ANSI service request operation. 3.5 Function ResultsAll functions return a Status (which is the C function result). Most return an Invoke-ID which identfies the particular invocation. The confirmed operations each return a Result. (The Invoke-ID and Result are returned using pointers that are supplied as arguments of the C function). These three kinds of function results are introduced below. All OM objects returned by interface functions (results and errors) will be private objects in the workspace assocaited with the session private object. 3.5.1 Invoke-IDAll interface functions that invoke a mobile application service operation return an Invoke-ID; an integer that identifies the particular invocation of an operation. The Invoke-ID is only relevant for asynchronous confirmed operations and may be used later to receive the Status and Result, or to abandon them. The Invoke-ID is also used to respond to a previously requested confirmed operation. Asynchronous operations are fully described in Synchronous and Asynchronous Operation. The interface functions that can be used to start them are the Service-req() function. The numerical value of the invoke-Id returned from a call that successfully invoke an asynchronous confirmed operation is guaranteed to be unique amoungst all outstanding operations in given session. The value is such as could be returned from TCAP, the Transaction Capabilities Application Part defined in ITU-T Recommendation Q.771 through Q.775. Invoke IDs used by XCC are not necessarily those that are actually sent via a protocol such as TCAP. Invoke IDs may be mapped or altered by the Mobile Application Service provider. The value returned for a synchronous operation or an asynchronous non-confirmed operation is unspecified, as is that for a call that fails to invoke an operation. 3.5.2 ResultFunctions invoking confirmed mobile application service operations return a result only if they succeed. All errors from these functions are reported in the Status described below, as are errors from all other functions. The value returned by a function call that invokes an asynchronous operation is unspecified, as is that for a call that fails to invoke an operation. The result of an asynchronous operation is returned by a later call to Receive(). The result of a function invoking a confirmed operation can be composed of a single reply, or of multiple linked replies. In the later case, the term partial result is used to designate one of these linked replies. Only a confirmed Service-req may produce multiple results. Multiple replies to a single mobile application service operation may only occur if the invoker specifies multiple-reply in the functional unit attribute of the Session object. In asynchronous mode, the partial results can be retrieved one at a time by subsequent calls to Receive(), which each time returns an instance of OM class Linked-Reply-Argument. In synchronous mode, the function returns an instance of OM class Multiple-Reply, which contains a list of sub-objects of OM class Linked-Reply-Argument. The result (or partial result) of an operation is returned in a private object whose OM class is appropriate to the particular operation. The format of mobile application service operation results is driven both by the Abstract Service and by the need to provide asynchronous execution of functions. To simplify processing of asynchronous results, the result (or partial result) of a single operation is returned in a single OM obejct (corresponding to the abstract result defined in the Standards). The components of the result (or partial result) of an operation are represented by OM attribute in the operation’s result object. All information contianed in the Abstract Service result is made available to the application program. The result (partial result) is inspected using the functions provided in the OSI-Abstract-Data Manipulation API. Only confirmed mobile application service operations produce results, and each type of operation has a specific OM class of OM object for its result. These OM classes are defined in Interface Class Definitions. The actual OM class of the result can always be a subclass of that named, to allow flexibility for extensions. Thus, the function OM-Instance() should always be used when testing the OM class. 3.5.3 StatusEvery interface function returnes a Status value, which is either the constant success (‘(CC_status)0’ or ‘CC_SUCCESS’) or an error. Function call errors are represented as integer constants and grouped in categories of System, Library and Communications as described in Errors. Additional error information is available for System and Communications errors via the Get-Last-Error() function call. Additional error information is available for the bad-argument Library error via the Validate-object() function call. A synchronous call with multiple linked replies is considered successful unless the reploy limit or time limit is exceeded. The function returns a Status value equal to success, and the argument Result is an OM object of OM class Multiple-Reply, which contains all the linked replies. It should be noted that OM object Linked-Reply-Argument may contain an OM attribute that reflects an error. If the reply limit or time limit is exceeded, the synchronous call fails and returns a status of the appropriate Library error. However, the Result is still considered valid and may contain an OM-Object Multiple-Reply, which contains all the received linked replies. A result of CC_ABSENT_OBJECT means no replies were received. In most cases other results of functions are initialized to Null (CC_ABSENT_OBJECT) if the status does not have the value success. However, the Result is still considered valid and may contain an OM-Object of parital replies. A result of CC_ABSENT_OBJECT means no replies were received. 3.6 Synchronous and Asynchronous OperationThe asynchronous or synchronous mode of a requested operation is specified at the interface, and determined for each operation by the value of the OM attribute Asynchronous in the Context passed to the interface function. The default value of this OM attribute is false, causing all operations to by synchronous. Support for both synchronous and asynchronous operation is mandatory. There is a limit to the number of pending asynchronous operations; this limit is given by the constant max-outstanding-operations, and has a minimum value of 10. In synchronous mode, all functions wait until the operation is complete before returning. Thus the thread of control is blocked within the interface after calling a function, and the application can make use of the result immediately after the function returns. In asynchronous mode, some functions return before the operation is complete. The application is then able to continue with other processing while the operation is being executed by the Mobile Application Service provider, and can then access the result by calling Receive(). An application may initiate several concurrent asynchronous operations on the ame session before receiving any of the results, subject to the limit described below. The results are not guaranteed to be returned in any particular order. The functions that can execute asynchronously are the Service-req() function. This correponds to the mobile application services of the Standards that operate in a confirmed mode. Moreover, only confirmed operations return service results. An asynchronous function call of a confirmed service returns an Invoke-ID of the operation to the application. The same Invoke-ID will be returned by Receive() on the corresponding result. An Invoke-ID is also returned by Receive() on an indication of an invoked mobile application service operation. The same Invoke-ID will be used to respond to this operation. Implementations of the interface are free to return from asynchronous function calls as soon as possible or may wait until the operation has been submitted to the unerlying Mobile Application Service provider. The actual policy used is implemetnation-defined. Implementations will define a limit to the number of asyncrhonous operations that may be outstanding at any one time on any one session. An asynchronous operation is outstanding from the time that the function is called until the last reply of the result is returned by Receive(), or the operation is abandoned by Abandon(), or the session is closed by Unbind(). The limit is given by the constant max-outstanding-operations (‘CC_MAX_OUTSTANDING_OPERATIONS’) and is at least 10 for conformant XCC implemetnations. While this number of operations is outstanding, attempts to invoke further asynchronous operations will report a Library-Error (too many operations). Asynchronous operation calls can be aborted by executing an Abandon() or Unbind() call. In this case, the operation is no longer outstanding and the result will never be returned by further Receive() function calls. If an error is detected before an asynchronous request is submitted to the Mobile Application Service provider, the function will return immediately and there will be no outstanding operation generated. Other errors are notified later by Receive(), when the result of the outstanding asynchronous confirmed operation is returned. All errors occurring during a synchronous request are reported when the function returns. Full details of error handling are given in Errors. Where vendors provide suitable system primitives (such as System V Applications should ensure that there are no outstanding asynchronous operations on a session when Unbind() is called on that session. Once Unbind() has been called there is no way to determine whether any outstanding operations succeed or even whether they were ever sent to the Mobile Application Service provider. Also no errors or results of any kind will be reported to the application. It is strongly recommended that Receive() is called repeatedly until Completion-Flag takes the value nothing. 3.7 Other FeaturesThese features are not part of the interface itself, but are mandatory when specified by the Mobile Application Service provider. The Mobile Applications are not restricted to those defined by ITU-T CC. All the features listed below are for the most part necessary for ease of use in a mobile application environment. These features are classified as given registered identifiers (Object Identifier). They can be negotiated using the Negotiate() function in the same manner as packages. Other types of information that are critical in servicing an environment that incudes implemetnation from multiple vendors on various machines can also be classified and handled with the Negotiate() function. Features defined by this specification are described and assigned Object Identifiers in Interface Functions. 3.7.1 Automatic Association ManagementWhen the Mobile Application Services provider makes use of association oriented communication services, such as TCAP, the Mobile Application Service provider implementations are assumed to provide automatic handling of the association between mobile application entities, establishing and releasing associations at its discretion. Such management is intended to bring benefits such as reduced communication charges. To allow this flexibility to the implementation, the interface does not specify when communication takes place. Automatic Association Management (AAM) may be enabled or disabled on a per-workspace basis using the Negotiate() function. 3.7.2 Automatic Dialog HandlingWhen the Mobile Application Services provider makes use of dialog oriented communication services, such as that provided by TCAP, the Mobile Application Service provider implementations are assumed to provide automatic handling of dialogs between mobile application entities, establishing and releasing dialogs at its discretion. Such management is intended to bring benefits such as reduced communication overheads. To allow this flexibility to the implementation, the interface does not specify when communication takes place. Automatic Dialog Handling (ADH) may be enabled or disabled on a per-workspace basis using the Negotiate() function.8 3.7.3 Automatic Performer ResolutionThe performer of an invoked operation my be explicitly designated by the responder name and responder address parameters of the bound session used. However, in the case where the responder is specified as a wildcard, the Mobile Application Service provider may be assumed to provide automatic mobile application service and application context to consumer resolution: to find out the consumer that is in charge of the selected mobile application service specified in the mobile application service operation. 3.7.4 Responder VersatilityResponder versatility is the ability to change the consumer within a same bound-session at each function call. It is useful when the automatic consumer resolution is either not suported by the Mobile Application Service provider or note requested. This applies if the underlying Mobile Application Service provider is connection-less. 3.7.5 Automatic Name to Address ResolutionMobile Application Service provider implementation may provide automatic resolution between program name and address to find the network address of a mobile application entity from its name using directory or translation services. 3.7.6 Automatic Dispatching to Appropriate StackThe Mobile Application Services provideer implementation may provide a loop back facility if the destination of the operation or notification is local. It also may provide routing of the mobile application services operation to the proper underlying communications stack according to the implied mobile application service and the destination (for example over a ITU-T SCCP stack or an ANSI SCCP stack). 3.8 Function SequencingA minimum set of sequencing rules applies when using the interface to exchange mobile application service information between mobile application programs acting as a mobile application entity. These rules need to be respected by mobile application programs to ensure that interface functions are called in the proper sequence and that the state of the interface is not violated, otherwise Library-error status will be returned.9 The general rules to follow are:
Seven states are defined in the interface to cover both interface service operations and mobile application service interactions:
4 Interface Functions5 Interface Class Definitions6 ErrorsAppendix A C HeadersA.1 xcc.hA.2 xcc_isup.hA.3 xcc_isdn.hA.4 xcc_h323.hA.5 xcc_sipt.hAppendix B ExamplesGlossaryLicensesAll code presented in this manual is licensed under the GNU Affero General Public License. The text of this manual is licensed under the GNU Free Documentation License, with no invariant sections, no front-cover texts and no back-cover texts. Please note, however, that it is just plain wrong to modify statements of, or attribute statements to, the Author or OpenSS7 Corporation. GNU Affero General Public LicenseThe GNU Affero General Public License.
Version 3, 19 November 2007
Copyright © 2007 Free Software Foundation, Inc. http://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. PreambleThe GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program–to make sure it remains free software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. A secondary benefit of defending all users’ freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New ProgramsIf you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. one line to give the program's name and a brief idea of what it does. Copyright (C) year name of author This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses/. Also add information on how to contact you by electronic and paper mail. If your software can interact with users remotely through a network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a “Source” link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see http://www.gnu.org/licenses/. GNU Free Documentation LicenseGNU FREE DOCUMENTATION LICENSE
Version 1.3, 3 November 2008
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. http://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
ADDENDUM: How to use this License for your documentsTo use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) year your name. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with…Texts.” line with this: with the Invariant Sections being list their titles, with the Front-Cover Texts being list, and with the Back-Cover Texts being list. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. Index
Short Table of ContentsTable of Contents
Footnotes(1)http://www.openss7.org/repos/tarballs/openss7-1.1.7.20141001.tar.bz2 (2)See ‘Bind’. (3)See ‘Bind’. (4)Note that the way in which these relationships are resolved is implementation-dependent, but use of SCCP Global Title translations should play a significant role. (5)See ‘Bind’. (6)See ‘Bind’. (7)See ‘Bind’. (8)Note that Automatic Dialog Handling is an independent concept from Automatic Association Management. (9)Note the following is considered as tutorial information. The definitive information is contained in the Standards (see referenced documents). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Last modified: Tue, 28 Oct 2014 03:09:41 GMT Copyright © 2014 OpenSS7 Corporation All Rights Reserved. |