DYNAMICALLY MODIFIABLE CALL PROCESSING METHODS AND APPARATUS

Abstract: Dynamically modifiable call processing logic includes creating a Basic Call State Machine (BCSM) which is an instantiation of a dynamically executable Call Model (24, 26) having one or more initialization files and one or more shared library functions. The Call Model supplies the BCSM (20, 22) with Advanced Intelligent Network (AIN) compliant basic call processing logic as well as other features and configuration instructions. The BSCM is provided with a number of states, each of which corresponds to a point-in-call (PIC, 32a, 32b, 42a, 42b). The Call Model is written with "C" language functions and the functions specify which shared libraries contain the definitions of the functions.

Description: DYNAMICALLY MODIFIABLE CALL PROCESSING METHODS AND APPARATUS This application is related to co-pending co-owned Serial Number 08/662,077 filed June 12, 1996, entitled "Methods and Apparatus for Controlling Digital Communications Switching Equipment", the complete disclosure of which is incorporated herein by reference. BACKGROUND OF THE INVENTION 1. Field of the Invention The invention relates to telecommunications switching systems. More particularly, the invention relates to telecommunications call processing logic which is dynamically modifiable without interruption of service. 2. State of the Art Modern telecommunications switching systems use hardware and software to process calls and provide various telecommunications services. Call processing generally involves at least two segments, the originating call segment and the terminating call segment. These segments refer to the calling party and the called party. In multi-party calls, there may be several segments involved in call processing. The originating call segment is processed, for example, by setting up the call, granting authorization for the call, collecting and analyzing information, and selecting a route for the call. In the case of wireless cellular telecommunications, the originating call segment may also be processed by selecting a frequency, measuring signal strength, initiating a handoff, etc. The terminating call segment is processed, for example, by presenting the call, finding resources, accepting the call, and answering the call. In the case of wireless cellular telecommunications, the terminating call segment may also be processed by selecting a frequency, measuring signal strength, initiating a handoff, etc. In both the originating and terminating call segments, calls are further processed by detecting busy networks and busy terminals, by detecting disconnects and failed authorizations, and by detecting no answers, for example. State of the art software used in call processing is "hard coded" in the host processor of a digital telecommunications switch. When a call segment is initiated, a particular software routine is called and is run from start to end. As with all software systems, and in particular with telecommunications software systems, frequent system updates need to be made. These updates are used to effect new features, to change the configuration of a switch, to improve efficiency, or to eliminate bugs, for example. One of the difficulties in updating telecommunications software is that the software must continue to run so long as the switch is in operation. Therefore, in order to modify the software, the switch must be taken out of service while the system update is performed. This is problematic for two reasons. Service is diminished during the update process and calls will often be interrupted when the switch is taken out of service. Moreover, if the system update needs to be de-bugged, the switch must be taken out of service again resulting in further diminished service capacity and additional call interruptions . One partial solution to the problems of software system updates is to use redundant switch hardware and software. In these systems, a backup switch system is updated with new software without interrupting the main switch hardware and software. After the backup system is updated, service is transferred from the main switch system to the backup system and the main switch is updated. This solution avoids much of the problem relating to diminished service capacity, but it does not solve the problem of interrupted calls. During the transfer from the main switch to the backup switch, there is a short period of service interruption. During the transfer, transient calls (calls which are in the process of being connected) on the main switch will be dropped. This partial solution is relatively expensive in that almost every hardware component of the switch must be duplicated. In addition, the software used to effect a transfer of service from the main switch to the backup and vice versa is complex. Another, more sophisticated approach to solving the problems associated with system updates is described in the Bellcore Advanced Intelligent Networks (AIN) specification. The AIN specification modularizes system software so that new features can be added without interruption of service. Prior art Figure 1 shows a schematic diagram of the AIN specification. The system software includes a main call processing module 10 which is structured as a finite state machine having well defined points- in-call (PICs) 12a, 12b,.., 12n, each of which is associated with one or more trigger detection points (TDPs) 14a, 14b,.., 14n where the state machine sends a query to an external service logic program (SLP) 16a, 16b,.., 16n to receive instructions for the further processing of the call. SLPs may reside locally or remotely and may be modified without interrupting the main call processing module 10. For example, the first PIC 12a in an originating call module may get the number dialed and the first TDP 14a will parse the number to determine if it contains a special feature such as being an "800" number or a "900" number. If the number is an "800" number, for example, an SLP 16a for "800" number service is invoked. The next PIC 12b may be used to route the call to an appropriate trunk, etc. A significant drawback of the AIN specification is that the main call processing module 10 must be painstakingly designed in order to anticipate the addition of every possible SLP and provide appropriate TDPs. Thus far, the AIN specification has been only partially implemented. For example, AIN specification version 0.1 has been implemented and version 0.2 has been partially implemented. These implemented specifications provide relatively limited functionality. An all-encompassing AIN specification version 1.0 is being designed, but it will require years of development and testing before the entire specification can be realized. In its present state, AIN version 1.0 requires additional capabilities from an underlying communications protocol (the TCAP layer of the SS7 protocol stack) which is not supported by any of today's standards. For example, the message lengths required by AIN 1.0 exceed the maximum message length permitted by the ANSI TCAP protocol in use today. Moreover, the AIN specification is not designed to facilitate incremental development of new features, but rather to accommodate a large number of predefined features (SLPs) . In addition, the AIN specification does not provide any way to directly modify the main call processing module 10 without interrupting service. Nevertheless, AIN specifications 0.1 and 0.2 have received widespread support and most switch systems sold today support the AIN specifications 0.1 and 0.2 (as well as other specifications). SUMMARY OF THE INVENTION It is therefore an object of the invention to provide dynamically modifiable call processing software for use with digital telecommunications switches. It is also an object of the invention to provide call processing software which is dynamically modifiable without interrupting service. It is another object of the invention to provide dynamically modifiable call processing software which is AIN compliant. It is still another object of the invention to provide dynamically modifiable call processing software which can be modified during run-time to update the basic call processing logic as well as to add new features. In accord with these objects which will be discussed in detail below, the methods and apparatus of the present invention result in part from the realization that the use of dynamic linking and shared libraries in the construction of call processing software can produce unexpected and highly desirable results. While it is generally known in the software arts that memory resources can be conserved through the use of dynamic linking and shared libraries, it has been realized by the inventors herein that these programming techniques can be adapted to provide call processing telecommunications software which is dynamically modifiable without requiring any interruption of service. Dynamic linking and shared library programming techniques are disclosed generally in "Sun OS™ 5.1 Linker and Libraries Manual" (December 1992), Sun Microsystems, Inc., Mountain View, California, the complete disclosure of which is hereby incorporated by reference herein. Generally speaking, linking involves the use of a link editor which, when invoked, concatenates object files to create relocatable files, executable files and shared libraries which are used by a run-time linker to create a "runnable process". Object files may include relocatable objects, shared objects, static executables, and dynamic executables. In the case of dynamic executables, the link editor reads the shared objects and performs symbol lookup and verification, but only records the name of the dependencies (shared objects) and some bookkeeping information in the executable. At run-time, the contents of the shared objects are loaded into memory pages and are mapped into the virtual address space of the process calling for them. Program references are thus connected with their definitions when the program is executed. Dynamically linked programs save disk space and process memory by sharing library code at run-time. If a second (concurrent) process calls for use of the same shared object, the entire contents of the shared object are mapped into the virtual address space of the second process, but only a single copy of the shared process resides in memory pages. In addition, dynamically linked code can be fixed or enhanced without having to re-link applications that depend on it, so long as the new code is compatible with the existing code. Although the memory pages containing the shared objects cannot generally be modified during run-time without losing the benefits of code sharing, the disk copy of the shared objects can be modified at any time. In addition, shared objects may be "versioned" using naming conventions so that updates can be added to a shared library without deleting the original files. If there is a problem or incompatibility in the updated shared object, the previous version of the shared object will be used by the linker. Based in part on the foregoing understanding of linking and shared libraries, the methods and apparatus of the invention include defining each call segment as having a controlling active leg and at least one passive leg wherein the active leg refers to the external connectivity of the segment and the passive leg refers to the connectivity with the other call segment. The active leg and passive leg concepts are derived from the AIN specification. The ability to provide more than one passive leg allows for the representation of multiple party (conference) calls. According to the invention, a Basic Call Processor creates a Basic Call State Machine (BCSM) for eaph passive leg. The different BCSMs representing the different legs of a call are collectively referred to as a Call Model. When each BCSM is executed, it is associated with a Call Model which acts like a dynamic executable having one or more initialization files (dependencies or shared objects) . The Call Model supplies the BCSM with AIN compliant basic call processing logic as well as other features and configuration instructions. According to the invention, the BCSM is provided with a number of states, each of which corresponds to a PIC. Each PIC includes one or more substates and at least one TDP . Each TDP may include one or more triggers. The Call Model, which is used to build the BCSM, preferably includes the number of PICs and TDPs in the BCSM, the number of substates in each PIC, the number of triggers in each TDP, state transition information about which events lead to which PIC, the Call Model specific function calls associated with each substate and trigger, information about which PICs belong to which stage of a call, and the pre-processor and configuration function associated with the Call Model. The initialization files associated with each Call Model preferably include: event_pic_map. cm, events. cm, pic_data.cm, and trgr_data.cm. The event_pic_map.cm file specifies which PICs can be reached from each PIC. The events. cm file includes AIN defined events as well as other events defined by the Call Model developer. The pic_data.cm file contains definitions of each PIC. The trgr_data.cm file contains definitions of each trigger including what function is to be bound to each TDP. The Call Model is preferably written with "C" functions to define PICs, TDPs, and functions bound to TDPs and the functions specify which shared libraries contain the definitions of the functions. Each instance of a BCSM is associated with a Call Model at the time the BCSM is created. Each Call Model is preferably related to a particular "access type". For example, the ANSI ISUP signalling protocol would be associated with one Call Model by defining a set of configuration files and function definitions as described above. Whenever the Basic Call Processor receives an initial address message (IAM) for an ISUP call, the Basic Call Processor will create an instance of a BCSM dynamically linked to a Call Model having an access type attribute set to ANSI ISUP. The BCSM will contain the appropriate set of PICs, TDPs, and C- functions to handle the ISUP message. The originating Call Model analyzes the called number and determines a route for the call. The route is selected from a hunt group which contains several circuits which lead to the same destination. When a circuit is selected, a terminating segment Call Model is chosen for the particular circuit type. Once the terminating segment BCSM is created, it can change its Call Model so long as the states and substates of both Call Models are compatible. Typically the terminating call segment BCSM will change Call Models if hunt groups are allowed to contain circuits controlled by different signalling types. The signalling type, therefore, cannot be determined until the circuit is identified. In this situation, the BCSM would be created with an appropriate Call Model and then switch to another Call Model once the actual circuit is identified. Preferred aspects of the invention include designating each Call Model with a unique name and updating an existing Call Model through the use of versioning. The invention allows complete dynamic run-time modification of Call Models and all functions associated therewith. New features can be added at any time without recompiling the Basic Call Processing software. Additional objects and advantages of the invention will become apparent to those skilled in the art upon reference to the detailed description taken in conjunction with the provided figures and appendices. BRIEF DESCRIPTION OF THE DRAWINGS Figure 1 is a schematic illustration a prior art call processing module according to an AIN specification; Figure 2 is a schematic illustration of two BCSM and Call Model Objects in a two-party call according to the invention; Figure 3 is a partial flow chart of the setup PICs of an originating call segment; and Figure 4 is a schematic illustration of the dynamic linking between a BCSM and Call Model call processing functions according to the invention. BRIEF DESCRIPTION OF THE APPENDICES Appendix A (99 pages) is a sample source code listing of a non-ISDN Call Model according to the invention, including makefile, NISDN_L_line .h, NISDN_L_trgr .h, NISDN__twc_trgr. c, NISDN_twc_proc. c, NISDN_orig_pics . c, NISDN_term_pics . c, NISDN_msg_proc.c, NISDN_oproc.c, NISDN_tproc. c, NISDN_config.c, and ibss_preproc. c; Appendix B (6 pages) is a sample source code listing of Call Model initialization files according to the invention, including events. cm, event pic map. cm, pic data. cm, and trgr data. cm; and Appendix C (17 pages) is a sample source code listing of a service logic program for a three way call according to the invention, including makefile, function index, slp_twc.h, slp_twc.c, and slp_hash.c. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS Referring now to Figure 2, one of the methods of the invention is to create a basic call state machine (BCSM) 20, 22 for each segment of a call. As shown in Figure 2, the BCSM 20 is created for the originating segment and the BCSM 22 is created for the terminating segment of a two party call. Each BCSM is executable code which is created at run-time by a Basic Call Processor and is dynamically linked to a Call Model 24, 26. A shown in Figure 2, the Call Model 24 is used to create the originating BCSM 20 and the Call Model 26 is used to create the terminating BCSM 22. Each Call Model is comprised of dynamic executable code utilizing several shared libraries which are described in detail below. The Call Model, together with linked shared libraries defines the states of the BCSM which includes PICs and TDPs. As shown in Figure 2, for example, the originating BCSM 20 includes PICs 32a, 32b,.., 32n and corresponding TDPs 34a, 34b,.., 34n. Similarly, the terminating BCSM 22 includes PICs 42a, 42b,.., 42n and corresponding TDPs 44a, 44b,.., 44n. Once the BCSMs are created, they exchange information and messages as shown in Figure 2 in order to complete processing of the call from the originating party to the terminating party. Communication between BCSMs is accomplished through the use of a common set of internal messages and associated data structures covering the essential call related information which is available for all Call Models. As mentioned above, the BCSM is completely defined by the Call Model used to create it at runtime and the Call Model, in turn, relies on certain shared library objects in order to provide the desired functionality of call processing. A sample Call Model, which is written in "C" language is attached hereto as Appendix A. Referring generally to Appendix A, the Call Model includes references to linked libraries, which are described below, for providing call processing functionality as well as linking to hardware specific libraries to support the host processor (s) of different digital telecommunications switches. For example, Makefile of Appendix A links to different libraries for different operating systems, i.e. SUN Solaris 2.x, Motorola 4.4 and up, and Intel (IBM) AIX 4.1.x. The Makefile also includes sources to different dynamically loaded parts of the Call Model (NISDN_L_line.h, NISDN_L_trgr .h, NISDN_twc_trgr . c, NISDN_twc_proc. c, NISDN_orig_pics . c, NISDN_term_pics . c, NISDN_msg_proc.c, NISDN_oproc.c, NISDN_tproc . c, NISDN_config.c, and ibss_preproc.c) and to shared object files which are designated by a pathname followed by the extension ".so". As mentioned above, the sample Call Model of Appendix A is designed for processing non-ISDN calls. As such, it includes a header file NISDN_L_line.h which defines internal events used in the Call Model and which are related to processing non-ISDN calls. Internal events are defined at lines 76-125 of the NISDN_L_line.h file. In addition, AIN events which will be used by the Call Model are defined at lines 132-175, and user defined events are defined at lines 178-187 of the NISDN_L_iine .h file. As mentioned above, each point in call (PIC) is represented by one or more entry and exit events and a map file, described below, assigns entry and exit events to specific PICs. The NISDN_L_trgr .h header file of the Call Model defines specific internal triggers which will be available to the Call Model for processing a SLP. As shown in Appendix A, the sample Call Model includes triggers for processing a three way call (TWC) . Multiple internal triggers within a trigger detection point effectively define substates. The specific functions for handling a three way call are defined in the file NISDN_twc__trgr . c and include error handlers, originating midcall processing, and disconnect. Communication between the SLP and the BCSM are handled by the code listed in the file NISDN_twc_proc.c which includes SLP message handling functions as well as procedures for effecting the TWC SLP such as putting the second party on hold prior to connecting the third party, processing the second call, merging the two calls, etc. The originating call segment BCSM functions are defined in the file NISDN_orig_pics. c according to the points in call (PICs) and additional originating segment call processing functions are defined in the file NISDN_oproc .c according to the events associated with PICs. The terminating call segment BCSM functions are defined in the file NISDN_term_pics . c according to the points in call (PICs) and additional terminating segment call processing functions are defined in the file NISDN_tproc. c according to the events associated with PICs. The originating and terminating call segment PICs and events are described in more detail below with reference to Appendix B. The sample Call Model of Appendix A also includes message processing (parsing) for inband signalling. The functions for message parsing are defined in the file NISDN_msg_proc. c and preprocessing functions are defined in the file ibss_preproc. c. Additional configuration information is provided in the sample Call Model file NISDN_config.c which can be used to implement the Call Model without dynamic linking if necessary, for example in order to implement features of the system in a processor which does not support dynamic linking. Generally, according to a preferred embodiment of the invention, there are four Call Model configuration files which are used by a Call Model and which support events setup in the BCSM. Sample configuration files are contained in Appendix B. These files may be generally referred to as an event list, a event-pic map, pic data, and trigger data. Turning first to the event list, an events. cm file according to the invention is shown by way of example in Appendix B. Each line of the file refers to a single event using the syntax shown in Table 1, below. Table 1 The event index number is preferably a three digit number. The in use flag is a single bit or Y/N designation. The in use flag provides flexibility by permitting old or substitute records to be retained and easily available for use. The event name specifies a stage in the processing of a call and indicates whether it is part of an originating segment or a terminating segment. The entry PIC indicates whether the event is the result of a PIC. The events. cm file lists fifty-four events which may be used by the Call Model. The first event listed is a null event. Other events refer to various stages of call processing. Some events are designated as being an originating segment event by having "0_" in the event name. These originating segment events include events such as call origination attempt, attempt authorized, information collected, route selected, feature selected, network busy, etc. Other events are designated as being a terminating segment event by having a "τ_" in the event name. These terminating segment events include events such as call presented, resource available, call accepted, busy, no answer, etc. Forty-four AIN version 0.2 events are listed as event numbers 001 through 044. These are the events supported by the Bellcore AIN specification. The remaining nine events are events provided by the Call Model developer for other call processing features contained in the Call Model. Each event listed in Appendix B is also provided with an entry PIC number. Where more than one different PIC could link to the event (as is evident from the events_pic_map. cm configuration file described below) , a null entry PIC number is provided. Where a non-zero entry PIC number is provided, there is only PIC which leads to this event. As mentioned above, many of the events listed in the events. cm file and used by the Call Model to create the BCSM are linked to PICs. In order to provide the Call Model with the linking information needed, a configuration file called "event_pic_map" is provided. An event_pic_map. cm file according to the invention is shown by way of example in Appendix B. Each line of the file refers to an event in terms of a branching point from one PIC to another PIC or TDP using the syntax shown in Table 2, below. Table 2 The current PIC field indicates the PIC from which an event will cause a transition. The exit event indicates the event which will cause a transition from the current PIC. The goto field indicates the PIC (or TDP) to which the exit event will cause a transition. The PIC/TDP field indicates whether the item indicated in the goto field is a PIC or a TDP. Thus, if the PIC portion of the PIC/TDP state machine can be skipped, and the program can continue at the TDP, the PIC/TDP field will indicate "TDP". Typically, and as seen in the event_pic_maρ.cm file, the PIC will be indicated by the PIC/TDP field. In the event_pic_map.cm file, it will be seen that twenty- five numbered PICs are listed together with events which cause the BCSM to exit one PIC and enter another. For example, event number 057 will cause the BCSM to exit PIC number 001 and enter PIC number 021. Most PICs may be exited in several ways to enter several possible PICs. For example, the BCSM can return to PIC number 001 from PIC number 008 if event number 053 occurs, or, it can skip forward to PIC number 018 if event number 034 occurs. As mentioned above, each of the states of the BCSM is represented by a PIC which is dynamically linked to a shared library function. The events represent the results of the functions and direct the BCSM to the next appropriate PIC. The PIC functions are defined in a configuration file called pic_data.cm which is included in Appendix B. The structure of the file is illustrated in Table 3, below. Table 3 The first four rows of Table 3 indicate the name and location of configuration, initialization, criteria and preprocessor functions. As illustrated in the sample file ρic_data.cm, these functions are named f_NISDN_configure, f_NISDN_initialize, ibss_pre_criterion, and ibss_pre_proc, respectively. All of the functions reside in the shared library directory NISDNtmplt/lib/libNISDNtmplt . so . The next two rows of Table 3 indicate the first originating call segment PIC and the first terminating call segment PIC. As illustrated in the sample file pic_data.cm, the first originating call segment PIC is number 01 and the first terminating call segment PIC is number 11. Each PIC is identified in a single line having six fields: index number, in use flag, PIC name, call segment type, name of the first trigger attached to the PIC, and the call stage in which the PIC is involved. The functions dynamically linked to the PIC are identified between the delimiters "begin" and "end" following the PIC identification line. As illustrated in the sample file pic_data.cm, the first PIC is identified as number 01, having an in use flag Y, and the name A0_NULL (AO representing an AIN originating call segment PIC) . PIC 01 is an originating call segment PIC, has no trigger attached to it, and is used in the "setup" call stage. There is only one function linked to the AO_NULL PIC and that is named f_nisdn_o_null, which is located in the shared library directory NISDNtmplt/lib/libNISDNtmplt. so. From the foregoing, it will be appreciated that the sample file pic_data.cm identifies fourteen originating call segment PICs and eleven terminating call segment PICs. The originating segment PICs include setup PICs for attempting to originate a call (PIC 02) , collecting info from the calling station (PIC 03), analyzing the info ((PIC 04), selecting the route (PIC 05), and authorizing call setup (PIC 06) . Following the setup PICs, the originating call segment includes stable PICs for seizing a terminating segment (PIC 07) and for generating a ringing signal (PIC 08) . In addition, the sample call model includes a mid- call PIC for linking to a service logic program (SLP) . Originating segment PIC 09 includes a trigger to a three way call SLP. The trigger functions for PIC 009 are identified in the file trgr_data.cm of Appendix B and are found in the shared library NISDNtmplt/lib/NISDNtmplt . so . There are also five originating segment clear PICs which end the call or suspend the first portion of a three way call. PIC 10 suspends the first portion of a three way call and includes a trigger to the TWC SLP. PIC 18 ends the originating segment if there is an authorization failure, i.e. insufficient hardware resources to complete the call. PIC 19 ends the third party passive leg of the originating segment if the third party hangs up or if there is an error connecting to the third party. PICs 20 and 21 end the originating segment if there is a disconnect or an error. The terminating call segment PICs include setup PICs for awaiting a terminating segment attempt (PIC 11) , for requesting authorization for a terminating segment (PIC 12), for selecting terminating segment resources (PIC 13) , and for authorizing the terminating segment (PIC 14) . Following the setup PICs, the terminating call segment includes stable PICs for ringing the called party (PIC 15) and for suspending the terminating segment (PIC 16) . There are five terminating segment clear PICs for ending the terminating segment. PIC 17 ends a suspended segment if a party hangs up or if there is an error. PICs 22 through 25 ends a terminating segment if a party hangs up or if there is an error. Those skilled in the art will appreciate that by combining the information in events.com, event_pic_map.cm, and pic_data.cm, a complete flow chart of the Call Model can be realized. A partial flow chart illustrating the setup PICs of the originating call segment is shown in Figure 3. Turning now to Figure 3, it will be appreciated that the originating call segment progresses from PIC 001 through to PIC 009 provided that the appropriate events occur at each point in the call (PIC) . At each PIC, error and/or disconnect events will direct the flow of the BCSM to an error handling PIC or back to the null PIC 001. As mentioned above, the BCSM is an instantiation of the Call Model which, in turn, is a dynamic executable calling upon shared library files. A schematic illustration of this relationship is shown in Figure 3 wherein a portion of the BCSM 20 is shown in detail with respect to the Call Model 24. More specifically, each of the substates of PIC "n" 32n are mapped via the call model 24 to specific C functions "f_m_pic_n_func_#" which reside in shared library files. Similarly, each of the triggers in TDP 34n are mapped via the call model 24 to specific C functions "f_m_trig_n_func_#" which reside in shared library files. Due to the dynamic structure of the BCSM according to the invention, any aspect of the BCSM can be modified without interrupting service. Individual functions can be modified to provide new features or to fix bugs. Moreover, the entire Call Model can be modified without disrupting any BCSM in use. The methods described above may be readily implemented using existing hardware and C-language software. In operation, the call processing methods of the invention act as a virtual call processing machine and thus, the invention includes virtual apparatus as well as the methods described above. The sample Call Model described above includes a trigger to an SLP for three way calling. According to another aspect of the invention, SLPs are created as dynamic executables and may also be modified without interrupting service. Appendix C shows the C source code for the three way calling SLP mentioned above. The code includes a makefile, a header file SLP_TWC.h, the program listing SLP_TWC.c and a hash file SLP_hash.c. The program listing SLP_TWC.c includes the main program at lines 126 through 343 wherein various functions are called, and function definitions at lines 359 through 1090. The hash file initializes and maintains a hash table for use by the three way call service logic program. There have been described and illustrated herein dynamically modifiable call processing methods and apparatus. While particular embodiments of the invention have been described, it is not intended that the invention be limited thereto, as it is intended that the invention be as broad in scope as the art will allow and that the specification be read likewise. Thus, while particular naming conventions and syntaxes have been disclosed, it will be appreciated that other conventions and syntaxes could be utilized. Also, while specific numbers and types of shared files have been shown, it will be recognized that other types of shared files could be used with similar results obtained. Moreover, while particular configurations have been disclosed in reference to specific host processors, it will be appreciated that other configurations could be used as well. Furthermore, while the Call Model has been disclosed as having a specific number of dependent files and shared objects, it will be understood that a different of dependent files and shared objects can achieve the same or similar function as disclosed herein. It will therefore be appreciated by those skilled in the art that yet other modifications could be made to the provided invention without deviating from its spirit and scope as so claimed. APPENDIX A ThuJun 2718:31:111996 Page 1 ol 2 K Generated makefile. All references are to GNU Make manual for make # version 3.71 Beta, dated May 1994 with the VPΛTH patches. # Once you've generated this file, you should edit it as described in # the comments » # General purpose variable $(space) - see p.78 # See p.57 for details of the difference between = and .= # See p.83 for the foreachO function. # See p.78 for the patsubstO function. H Note that VPATH s used - remember that every environment variable is H inherited in make as a macro. It S DIRECTORY should be set to the directory where all the source files # are found, and MODULE should be set to the name to be used for the final # executable or library * DIRECTORY := ASVC/src/BCM/NISDNtmplt/lib MODULE NISDNtmplt B LIBRARIES-S (MODULE) should be set to the libraries to be linked II with. E.g. LIBRARIES-$ (MODULE) := ASVC/lib/mylib.α II INCDIRS-S (MODULE) should be set to the l st of places to II be searched for include files. * » CFLAGS-S (MODULE) , LDFLAGS-$ (MODULE) should be set to module S specific CFLAGS and LDFLAGS compiler flags. II lfeq ($ (TARGET) , sun) LIBRARIES-S (MODULE) INCDIRS-$ (MODULE) Sldir $ (DIRECTORY) ) inc S ( PRODUCT) Zinc CFLAGS-S (MODULE) -K PIC -G -DANΞI_C -DSVR4 C++FLAGS-S (MODULE) LDFLAGS-$ (MODULE) LDLIBS-S (MODULE) endif ifeq (S (TARGET) , mot) LIBRARIES-S (MODULE) INCDIRS-S (MODULE) Sldir S (DIRECTORY) ) inc $( PRODUCT) / mc CFLAGS-S (MODULE) -K PIC -G -DANΞI_C -DSVR4 C++FLAGS-S (MODULE) LDFLAGS-S (MODULE) LDLIBS-S (MODULE) endif lfeq ($ (TARGET) , lbm) LIBRARIES-S (MODULE) INCDIRS-S (MODULE) = S(dιr $ (DIRECTORY) line $( PRODUCT) /inc CFLAGS-S (MODULE) = -DANSI_C -DSVR4 C++FLAGS-S (MODULE) LDFLAGS-S (MODULE) LDLIBS-S (MODULE) endif SOURCES \ NISDN_twc_trgr . c \ NISDN_twc_proc . c \ NISDN_oπς_pιcs.c \ NISDN_term_pi.cs. c \ NISDN_msg_proc . c \ NISDN_oproc.c \ NISDN_tproc.c \ NISDN_config.c \ ιbss_preproc.c SOURCES := $(patsubst %, S (DIRECTORY) /%,$( SOURCES ) ) OBJECTS :- Slpatsubst %.c.%.o, S(patsubst %.C,%.o, S(SOURCES) ) ) OBJECTS_G := S (patsubst %.c,%_g.o, S(patsubst % .C, %_g.o, S (SOURCES) ) ) Thu un 2718:31:111996 Makefile 1 Page 1 ol 2 Thu Jun 27 18:31:11 1996 Page 2 of 2 all : $ (PRODUCT) /llb/libS (MODULE) .so debug : S (PRODUCT) /llb/libS (MODULE)_g. so junk += $(OBJECTS) S(OBJECTS_G) \ S ( PRODUC )/llb/llbS (MODULE) .so \ S ( PRODUCT) /1lb/ llbS (MODULE)_g . so \ S (DIRECTORY) /$ (MODULE) .dep #S (OBJECTS) S(OBJECTS_G) : ASVC/src/BCM/NIΞDNbcm/lib/Makeflie S(PRODUCT)/lιb/llbS(MODULE) .so: S(OBJECTS) S (LIBRARIES-S (MODULE) ) S (PRODUCT)/lib/llbS (MODULE)_g. so: S(OBJECTS_G) $ (LIBRARIES-S (MODULE) ) lfeq ($ (INITIA ),yes) $ (DIRECTORY) /$ (MODULE) .dep: S (SOURCES) endif -include S (DIRECTORY ) / S (MODULE) .dep Thu Jun 2 18:31:11 1996 Makefile 2 Page 2 of 2 -22- T uJun 2719:22:181996 Page 1 of 3 Hifndef NISDN_L_lιneH ftdefme NISDN_L_lιneH static char rcsιd_NISDN_L_lmeH( J = "$Id NISDN_L_lme.h. v 1.2 1996/05/09 13.49:37 deπur Eκp S Copyright (c) NewNef ************************* ****************** ******** ************** Copyright (c) NewNet, Inc. All rights reserved * This document contains confidential and proprietary information of NewNet " and any reproduction, disclosure, or use m whole or m part is expressly * prohibited, except as may be specifically authorized by prior written * agreement or permission of NewNet *************** * VERSION . $Revιsιon. 1.2 $ ' DATE . $Date: 1996/05/09 13:49.37 $ * MODULE NAME t $RCSflle: NISDN_L_lme .h.v $ * AUTHOR * DESCRIPTION : Mam header file for non-IDSN line BCM modules * DATE 1st REL . ' REV. HIST. * .Date Owner Description ****** ********** ************ ' RESTRICTED RIGHTS LEGEND * * Use, duplication, or disclosure by Government Is Subject to restrictions as " ' set forth m subparagraph (c) (1) tn) of the Rights m Technical Data and ' • Computer Software clause at DFARS 252.227-7013 ' ********* *********************** ********* ••/ N 0 N I S D N I N E R E L A T E D D A A Define default suspend_tιmer value (in msec) V #defιne L BCM_SUSPEND_TIMER_DEFAULT (4000) Define timer message •/ #defme BCM_TERMtmsgΞUSPEND_TIMER (1) #defιne BCM_TERMtmsgNOANS ER_TIMER (2) /* Specific data portion of BCM_CALL_DATA_ε V (tdefine L_BCM_MAX_LINE_TRUNK_DIGS (15) typedef struct BCM_NON_ISDN_LINE_DATA ( stagel_count, stagel_dι [L_BCM_MAX_LINE_TRUNK_DIGS) , stage2_count; S age2_dιg ( L_BCM_MAX_LINE_TRUNK_DIGS ) , stage3_count; S tage3_dιg [L_BCM_MAX_LINE_TRUNK_DIGS ) , stage4_coun • stage4_d g [L_BCM_MAX_LINE_TRUNK_DIGS] , ) BCM_NON_ISDN_LINE_DATA_S; internal Events used _n Call Model ThuJun 2719:22:181996 NISDN_ _lιne h 1 Page 1 ol 3 | (tdefme L_BCMevMEDS_CONN_TONE_ACK (25) idefine L_BCMevMEDS_CONN_TONE_NACK (26) idefine L_BCMevMEDS_DISC_TONE_ACK (27) Itdefine L_BCMevMEDS_DISC_TONE_NACK (28) Itdefine L_BCMevOBCM_TERM_ATTEMPT (69) ♦define L_BCMevOBCM_T_ABANDON (70) Itdefine L_BCMevOBCM_T_DISC_PASSIVE (71) Itdefine L_BCMevOBCM_S _ERROR (72) #define L_BCMevTBCM. 0_CALLED_PARTY_BUSY (73) Idefine L_BCMevTBCM. ROUTE_BUSY (74) idefine L_BCMevTBCM. RESRC_AVAIL (75) #define L_BCMevTBCM. ,0_TERM_SEIZED (76) ((define L_BCMevTBCM. P_ANSWER (77) idefine L_BCMevTBCM_ CALL_PROGRESS (78) Idefine L_BCMevTBCM. _SUSPENDED (79) Itde ine L_BCMevTBCM. .0_DISC_PASSIVE (80) #define L_BCMevTBCM. CALLED_PARTY_RECONN (81) idefine L_BCMevTBCM_ SUSPEND_TIMER (82) idefine L_BCMevTBCM_ NOANSWER_TIMER (83) Itdefine L_BCMevTBCM_ SW_ERR0R (84) Li terals for AIN events They should be same as they are defined m events . cm. V idefine AIN_0_0RIG_ATTEMPT (1) Itdefine AIN_0_ORIG_ATTEMPT_AUTHORIZED (2) idefine AIN_0_INFORMATION_COLLECTED (3) Itdefine AIN_0_INFORMATION_ANALYZED (4) ftdefine AIN_0_ROUTE_SELECTED (5) Idefine AIN_0_CALL_SETUP_AUTHORIZED (6) Idefine AIN_0_TERM_SEIZED (7) Idefine AIN_0_ANSWER (8) Idefine AIN_0_DISCONNECT (9) Idefine AIN_0_FEATURE_REQUESTED (10) Idefine AIN_0_MID_CA L (11) Idefine AIN_0_SUSPENDED (12) Itdefine AIN_0_RELEASE_TIMEOUT (13) Ide ne AIN_0_ORIG_DENIED (14) idefine AIN_0_COL ECT_TIMEOUT (15) idefine AIN_0_INVA ID_INFORMATION (16) Ide ine AIN_0_NETWORK_BUSY (17) ftfle.-ne AIN 0 AUTHORIZATION FAILURE .1161 Thu un 2719.22:181996 NISDN_L_lιne.h 2 Page 2 of 3 -24- ThuJun 2719.22:181996 NISDN LJme.h 3 Page 3 of 3 ■ 25- Thu un 2719:22:281996 Page 2 of 2 idefine L_TWC_TRGR_WAIT_FOR_FLASH (30) idefine L_TWC_TRGR_DISCONNECT (40) iendif /" Protection against multiple inclusion */ ThuJun 2719:22:281996 NISDN_L_trgr.h 2 Page 2 of 2 ThuJun 2718:12:131996 Page 1 of 12 static char rcsιd[)= • $Id: NISDN_twc_trgr.c, v 1.8 1996/06/06 22:03 32 de ir Exp $ Copyright (c) NewNet" Copyright (c) NewNet, Inc. All rights reserved. This document contains confidential and proprietary information of NewNet and any reproduction, disclosure, or use m whole or m part is expressly prohibited, except as may be speci ically authorized by prior written agreement or permission of NewNet $Revιsιon: 1.8 $ SDate- 1996/06/06 22:03.32 $ SRCSfi 1e : NISDN_ t wc_ t rgr . c . v $ er Description ******* RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure by Government Is Subject to restrictions as set forth m subparagraph lc) (1) (n) of the Rights m Technical Data and Computer Software clause at DFARS 252.227-7013 ********* ********** ********* •"/ iinclude <stdιo.h> iinclude <stdlib.h> iinclude <sys/tιme.h> iinclude <errno.h> iinclude <apι.h> iinclude <sccp_scpa.h> iinclude <tcap.h> iinclude <ADAP_G.h> iinclude <ΞYS_G_types .h> iinclude <SYS_G_access .h> iinclude <SYS_G_mgmt_states.h> iinclude <SYS_G_msgtypes . h> iinclude <Db.h> iinclude <DB_G_feature_defs .h> Iinclude <DB_G_group . h> iinclude <CONS_G_HWCI_ιf .h> iinclude <CONS_G_CP_i .h> iinclude <IBSS_G_CP_if .h> iinclude <MEDS_G_CP_ιf .h> iinclude <AIN02_G_oper .h> iinclude <CALS_G_cv_defs .h> iinclude <CALS_G_cm_ιns .h> iinclude <CALS_G_αn_defs.h> iinclude <CALS_G_slp_ιfc.h> ♦include <CALS_G_cm_apι .h> ♦include <CALS_G_TB_apι . h> iinclude <BCM_G.h> ♦include <BCM_G_if.h> iinclude <NISDN_L_lme.h> iinclude <NISDN_L_trgr .h> ThuJun 2718:12:131996 NISDNJ cjrgr.c 1 Page 1 of 12 -28- trInfoCNISDN: TRGR: CLEAR ALL TWC failed"); ) asp_result->ret_actιon = CALS_JUMP_TO_PIC ; asp_bcsm_data->trgr_data. ιnt_state = L_TWC_TRGR_IDLE; if (asp_bcsm_data->call_sιde == L_BCMcsORIGINATING) asp_result->event_generated = AIN_USR_DEF_0_DONE , else asp_result->event_generated = AIN_USR_DEF_T_DONE, break; ThuJun 2718:12:131996 NISDN cJrgr.c 2 Page 2 of 12 -29- Thu Jun 27 18 12 13 1996 f_NISDN rgr_err_hndler Page 3 of 12 case L_TWC_TRGR_ASSOCIATED / * Do move_leg of controlling leg and disassociate */ if ( f_CALS_move_and_dιsassoc (asp_bcsm_data->comrnon_data . cs_ d) < 0 ) trFail ( "NISDN TRGR CALS move_and_dιsassoc ERR %d, BCSM *d" errno asp_bcsm_data->common_data bcsm_ιd) , case L_TWC_TRGR_DIΞC_FIRST_CALL if ( f_twc_conn2party (asp_bcsm_data) < 0 ) ( trlnfo f "NISDN TRGR 1st call cannot be recovered ) asp_result->ret_actιon = CALS_JUMP_TO_PIC, asp_bcsm_data->trgr_data ιnt_state = L_TWC_TRGR_IDLE, if (asp_bcsm_data->call_sιde == L_BCMcsORIGINATING) asp_result- >event_generated = AIN_USR_DEF_0_ERROR, else asp_result->event generated = AIN_USR_DEF_T ERROR, ) else ( asp_bcsm_data->trgr_data mt_state - L_TWC_TRGR_CONN_FIRST_CALL asp_result->ret_actιon = CALS_SUSPEND, ) break, case L_TWC_TRGR_CONN_FIRST_CALL asp_result->ret_actlon = CALS_JUMP_TO_PIC , asp_bcsm_data->trgr_data ιnt_state = L_TWC_TRGR_IDLE, if ( asp_bcsm_data->call_sιde == L_BCMcsORIGINATING) asp_result->event_generated = AIN_USR_DEF_0_ERROR, else asp_result->event_generated = AIN_USR_DEF_T_ERROR break, case L_TWC_TRGR_ORIGINATE_CALL asp_result->ret_actιon = CALS_JUMP_TO_PIC asp_bcsm_data->trgr_data ιnt_state = L_TWC_TRGR_IDLE, if (asp_bcsm_data->call_sιde == L_BCMcsORIGINATING) asp_result->event_generated = AIN_0_MID_CALL, else asp_result->event_generated = AIN_T_MID_CALL case L_TWC_TRGR_IDLE break Thu Jun 27 18 12 13 1996 NISDN cJrgr c 3 Page 3 of 12 -31- Thu Jun 27 18.12.13 1996 ι_NISDN_trgr_omιdcall Page 5 of 12 vsp_bcm_call_data->trgr_data ιnt_state = L_TWC_TRGR_ORIGINATE_CALL, asp_result->ret_actιon = CALS_SUSPEND return (0), ) break, case AIN_OPER_MERGE_CALL if (f_twc_dιsc2party (vsp_bcm_call_data) == 0) ( vsp_bcm_call_data->trgr_data ιnt_state = L_TWC_TRGR_MERGE_CALL asp_result->ret_actιon = CALS_SUSPEND return (0) , ) break case AIN_OPER_CONTINUE asp_result->ret_actιon = CALS_JUMP_TO_PIC, asp_result->event_generated = AIN_0_MID_CALL return (0) , default trFail ("NISDN TRGR Unknown SLP MSG 0x%x rcvd BCSM %d" vsp_ιnc_slp_msg->msghdr operation asp_call_data->bcsm_hdr bcsm_ιd) break, ) break case BCP_EXTRN_CS_MSG switch (asp_msg->un ιpc_msg msgenv sgtyp) ( case L_CONS_SPM_MT switch (vsp_bcm_call_data->trgr_data ιnt_state) { case L_TWC_TRGR_ORIGINATE_CALL if (f_twc_cons_orιg_call (vsp_bcm_call_data) == 0) { asp_result->ret_actιon = CALS_SUSPEND return (0) , ) break case L_TWC_TRGR_MERGE_CALL if (f_twc_cons_merge_call (vsp_bcm_call_data) == 0) { asp_resul ->ret_actιon CALS SUSPEND return (0) break, case L_TWC_TRGR_DISC_SECND_CALL if (f_twc_cons_conf_response (vsp_bcm_call_data, asp_curr_pt->bcsm_sub_poιnt ) == 0) ( asp_result->ret_actιon = CALS_JUMP_TO_PIC asp_result->event_generated = AIN_0_MID_CALL, return (0) , > break, case L_TWC_TRGR_CONN_FIRST_CALL if (f_twc_cons_conn_response (vsp_bσn_call_data) == 0) ( vsp_bcm_call_data->trgr_data ιnt_state = L_TWC_TRGR_IDLE asp_result->ret_actιon = CALS_JUMP_TO_PIC if (vεp_bcm_call_data->call_sιde == L_BCMcsORIGINATING) asp_result->event_generated = AIN_0_MID_CALL else asp_result->event_generated = AIN_T_MID_CALL, return (0) , ) break, case L_TWC_TRGR_CONN_SCND_CALL if (f_twc_cons_conn_response (vsp_bcτn_call_data) == 0) { _!____ VSD bcm cal l data->trαr data . int state Thu Jun 27 18 12 13 1996 NISDNJwc rgr c 5 Page 5 of 12 8/07094 Thu Jun 27 18:12:13 1996 f_NISDN_trgr_omιdcall Page 7 of 12 case L_TRGR_MSG_TWC_SUCCESS : /' TWC successful . Exi t 0_MID_CALL TDP and enter 0_ACTIVE pic */ vsp_bc-_call_data->trgr_data. ιnt_state = L_TWC_TRGR_MERGED_2 ; asp_result->ret_action = CALS_JUMP_TO_PIC; if (vsp_bcm_call_data->call_side == L_BCMcsORIGINATING) asp_result->event_generated = AIN_0_MID_CALL; else asp_result->event_generated = AIN_T_MID_CALL; return (0 ) ; case L_TRGR_MSG TWC CLEAR: /* TWC disconnect phase. Inform peer CS */ if (f_twc_clear_scnd_call (vsp_bcm_call_data) == 0) ( asp_result->ret_actιon = CALS_JUMP_TC_PIC; if (vsp_bcm_call_data->call_sιde == L_BCMcsORIGINATING) asp_result->event_generated = AIN_O_DISC0NNECT_CONTR0LLING; else asp_result->event_generated = AIN_T_DISCONNECT_C0NTR0LLING; return (0) ; break ,- case L_TRGR_MSG TWC ERROR: TWC error phase. Inform peer CS */ if ( f_twc_error_scnd_call (vsp_bcm_call_data) 0) asp_result->ret_action = CALS_JUMP_TO_PIC; f (vsp_bcm_call_data->call_sιde == L_BCMcsORIGINATING) asp_result->event_generated = AIN_USR_DEF_0_ERROR; else asp_result->event_generated = AIN_USR_DEF_T_ERROR; return (0) ; ) brea ; case L_TRGR_MSG_TWC__RECONNECT : vsp_bcm_call_data->trgr_data . ιnt_state = L_TWC_TRGR_CONN_FIRST_CALL; if (f_twc_conn2party (vsp_bcm_call_data) == 0) { asp_result->ret_action = CALS_SUSPEND; return ( 0 ) ; } break; case L_TRGR_MSG_TWC_WAIT: vsp_bαn_call_data->trgr_data. ιnt_state = L TWC_TRGR_WAIT_FOR FLASH; asp_result->ret_actιon = CALS_SUSPEND; return (0) ; case BCM_TERM_ORIGmsgO_SUSPENDED. asp_result->ret_actιon = CALS_SUSPEND; return ( 0 ) ; case BCM_TERM_ORIGmsgO_DISC0NN_PASSIVE : if (vsp_bcm_call_data->trgr_data. ιnt_state == L_TWC_TRGR_ASSOCIATED) TERM side disconnected while ON HOLD '/ if (f_twc_clear_party_on_hold (asp_curr_pt->bcsm_sub_point, vsp_bcm_call_data) == 0) ( asp_result->ret_action = CALS_JUMP_TO_PIC ; if (vsp_bcm_call_data->call_side == L_BCMcsORIGINATING) asp_result->event_generated = AIN_USR_DEF_0_DONE; else asp_result->event_generated = AIN_USR_DEF_T_DONE; return ( 0 ) : Thu Jun 27 18:12:13 1996 NISDNJwc rgr.c 7 Page 7 of 12 98/070 -3 - Thu Jun 27 18.12.13 1996 f_NISDNJrgr_omidcall Page 8 of 12 else if (vsp_bαn_call_data->trgr_data mt_state == L_TWC_TRGR_WAIT_FOR_FLASH) ( asp_result->ret_actιon » CALΞ_JUMP_TO_PIC, if (vsp_bcm_call_data->call_sιde == L_BCMcsORIGINATING) asp_result->event_generated = AIN_0_DISCONNECT_CONTROLLING, else asp_result->event_generated = AIN_T_DISCONNECT_CONTROLLING, return (0) , ) trFail CNISDN.TRGR 0_MID_CALL TRGR func failed CS d,CLEG %d,BCSM %d" asp_call_data->bcsm_hdr . cs_ιd asp_call_data->bcsm_hdr cleg_ιd asp_call_data->bcsm_hdr bcsm_ιd) f_NISDN_trgr_err_hndler (asp_curr_pt->bcsm_sub_poιnt vsp_bcm_call_data, asp_result) , return (-1) , Thu Jun 27 18-12:13 1996 NISDN wc rgr.C 8 Page 8 of 12 ThuJun 2718.12.131996 I. NlSDN rgr ocrror Page 9 ol 12 Namc Synop is Desci iption Author Date 1st released Input parameters Return vaiυe Revision history Date On-ner Description f_NISDM_trgr_oorror (CΛLS_BCSM_P0INT_5 " asp_cuι ι_pL . CΛLS_BCSM_rUt4C_RET_S " as _ι esu 1 . CΛLS_BCSM_INFO_S *asp_ call, data bcp_mog_t *asp_msg) in BCM_CΛLL_DΛTΛ_S " sp_bcm_c l l_d La , CALΞ_SLP_tlSG_S * vsp_ιnc_slp_mscι , CΛLS_OPCP_TYPE trcjr_opoi tion, IBSS_MSG_!IDR_S vc_ιbss_hdr, CΛLS_LCG_CV_INFO_S vs_leg_cv_ιn f o , CAL5_CS_ID assoc_cs_id, trinfo C'llSDN.TRGR > 0_CRROR 1KGR.CS Id.CL-.G l.d. πC tl ιd" asp_cαl l_d la->bciπι_hdι c:._ι asp_cal l_data->bccm_)κh clcg_ιd acp_call_d ta->bcs.ι_hdι bccm_ιd) , vsp_bcm_call_data = vsp_bcm_call_data->bcp_ sg_ptr = aGp_rasg switch (asp_msg->rπ5g_type) ( case BCP_EVENT_MSG if ( v_p_bcm_cal l_data->lrgι_data ιnt_itale i _τ..r_ TΓGR_IDL( ) { asp_resυlt->rot_actιon = CΛLS_CONTIHUL return (0) , if C_CnLS_ge _lcg_cv_ι.ιfo (vsp_bcιr-_cai l_data- •com-on_data clcg_ιc), trl'ail CNISDN. TRGR. CALS get_leg_cv_ιr.fo ERR td. BCSM. Id" . errno. V5p_bcr_call_data- >common_data bcsιn_ιd) , ) if I sp_bcm_call_dαta->coramon_data c. r ,_ιd -= v5_lrg_cv_ιnto ci_ιd) assoc_cs_ιd = vs_leq_cv_ιnfo αssoc_cs_ιd. else assoc_cs_ιd = vs_leg_cv_ιnf o cs_ιd if ( £_NI5DN_send_slp_msg (αsp_curι_pt->bcsn_iu _)7oιn , vsp_bcπ_call_da n->tommon_data cs_* , assoc_cs_ιd, vsp_bcm_call_data-^corrunon_data pleg_ιd, ΛIN_OPER_ΓΛILURC_OUTCOHL) < o; ( trrαil ("NISDM.TRGR.send_slp_msg failed. BCSM id", vsp_bcm_cal l_d<ιϊ.a- >coιn,ιιoι ϊaLa occm_ιd) , ) switch (asp_m3g->un. event_msg. even t_gene r ed) ( case AIN_USR_DCr_0_CliAN_RELEASED: if (f_twc_error_clear_all (vsp_bcm_call_dαr_ ) 0) ( trFail ("NISDN. TRGR. Clear on ERROR failed"), asp_result->ret_actιon = CALΞ_JUIIP_T0_P1C, if (vsp_bcm_call_data->call_sιde == L_BCMciORIGIHΛTING) asp resu1r--cvent generated = MM USR per 0 POML. Thu un 2718-12:131995 NISDNJwcJrηr c 9 Pago 9 of 12 Thu Jun 2718:12:13 1996 f_NISDN_trgr_oerror Page 10 of 12 602 else 603 asp_result->event_genera ed AIN USR DEF_T DONE; 604 return (0) ; case AIN_0_MID_CAL : asp_result->ret_actιon = CALS_JUMP_TO_PIC; vsp_bcιr call_data->trgr_data. ιnt_state = L_TWC_TRGR_IDLE; if (vsp_bcm_call_data->call_sιde == L_BCMcsORIGINATING) asp_result->event_generated = AIN_USR_DEF_0_DONE; else asp_result->event_generated = AIN_USR_DEF_T_DONE ; if ( f_twc_error_recover_first (vsp_bcm_call_data) < 0) ( trFail CNISDN: RGR: ecover first call on ERROR failed"), ) return (0 ) ; default: trInfoCNISDN: TRGR: Invalid Entry Event(%d) to O_ERR0R TRGR" asp_msg->un. event_msg. event_generated) ; asp_result->ret_action = CALS_CONTINUE, return (0) ; ) ) #if 0 trFail CNISDN:TRGR :0_ERROR TRGR func failed, CS. %d, CLEG: %d, BCSM: %d" asp_call_data->bcsm_hdr . cs_ιd. asp_call_data->bcsm_hdr . cleg_ιd, asp_cal l_da a->bcsm_hdr . bcsm_ιd ) , f_NIΞDN_trgr_err_hndler (asp_curr_pt-?bcεm_sub_poιn . vsp_bcm_call_data, asp_result) ; #endιf return (-1) ; ) Thu Jun 27 18:12:13 1996 NISDN wc rgr.c 10 Page 10 of 12 -37- ThuJun 2718:12:131996 NISDN rgr_odιsconnect Page 11 of 12 ********* ************ ********* Name Synopsis Description Author Date 1st released Input parameters Return value Revision history Date Owner Description ************** ******** int f_HISDN_trgr_odiβconnβct (CALS_BCSM_POINT_S *asp_curr_p , CALΞ_BCSM_FUNC_RET_S « asp_resul , CALS_BCSM_INFO_S *asp_call_data, bcp_msg_t *asp_msg) BCM_CALL_DATA_S *vsp_bcm_call_data; CALS_SLP_MSG_S *vsp_ιnc_slp_msg; CALS_0PER_TYPE trgr_operatιon; static CALS_EVENT_T entry_event, static int func_flag; trInfo("NISDN:TRGR:> 0_DISCONNECT TRGR, CS . %d, CLEG %d,BCSM:%d" asp_call_data->bcsm_hdr . cs_ιd, asp_cal l_data- >bcsm_hdr . cleg_id , asp_call_data->bcsm_hdr .bcsm_ιd) ; vsp_bcm_call_data = (BCM_CALL_DATA_S * )asp__call_data, vsp_bcm_call_data->bcp_msg_ptr = asp_msg, switch (asp_msg->msg_type) ( case BCP_EVENT_MSG . i (vsp_bcm_call_data~>trgr_data. ιnt_state L_TWC_TRGR_IDLE) ( asp_result->ret_actιon = CALS_CONTINUE, return (0) ; ) swi ch (asp_msg->un . event_msg. even _generated) case AIN_O_DISCONNECT_CONTR0LLING entry_event = AIN_0_DISCONNECT_CONTROLLING, trgr_operatιon = AIN_OPER_0_DIΞCONNECT, break; case AIN_0_DISCONNECT_PASSIVE: entry_event = AIN_0_DISCONNECT_PASSIVE; trgr_operatιon = AIN_OPER_T_DISCONNECT, break; default: trInfo("NISDN:TRGR: Invalid Entry Event(%d) to 0_DISCONNECT TRGR", asp_mεg->un. event_msg. event_generated) ; asp_result->ret_actιon = CALS_CONTINUE, return (0) ; ) if (f_NIΞDN_send_even _msg (asp_curr_ ->bcsm_sub_pσιnt, vsp_bcm_call_data, trgr_operatιon) < 0) ( trFail CNISDN: RGR: Send Even (0x%x) to SLP failed", trgr_operatιon) ; else ( asp_result->ret_actιon = CALS_SLP_INTERACT, return (0) ; brea ; case BCP_SLP_IFC_MSG JUJ L ThuJun 2718:12:131996 NISDN wc rgr.c 11 Page 11 of 12 -38- Thu Jun 27 18:12:13 1996 f_NISDN_trgr_odιsconnect Page 12 of 12 /* STOP SLP interaction Timer */ i f ( f_CALS_stop_tιmer (vsp_bcm_call_data- >trgr_data . s ip tιmer_ιd ) < 0 ) ( trInfo("NISDN:TRGR:CALS stop_tιmer ERR: %d, BCSM: %d" , errno, vsp_bcm_call_data->common_data.bcsm_ιd) ; asp_result->ret_actlon - CALS_CONTINUE, #endl f vsp_inc_slp_msg = (CALS_SLP_MSG_S *) &asp_msg->un . ιpc_msg.data[0] , switch (vsp_inc_slp_msg->msghdr .operation) ( case AIN_OPER_DISCONNECT: if (f_twc_dιsc_all (vsp_bcm_call_data) == 0) { asp_result->ret_actιon = CALS_JUMP_TO_PIC; asp_result->event_generated = AIN_USR_DEF_0_DONE; func_ lag = 1; return (0) ; ) break; case AIN_OPER_DISCONNECT_LEG: if (f_twc_disc_leg (vsp_bcm_call_data) == 0) ( asp_result->ret_actιon = CALS_JUMP_T0_PIC ; asp_result->event_generated = AIN_USR_DEF_0_DONE; return (0) ; ) break; case AIN_OPER_CONTINUE: if (func_ lag == 1) TWC disconnect phase. Inform peer CS */ if ( f_twc_clear_scnd_call (vsp_bcm_call_data) == 0) ( asp_result->ret_actιon = CALS_JUMP_TO_PIC; asp_result-?event_generated = AIN_0_DISCONNECT_CONTROLLING; ) func_flag - 0; return (0) ; } asp_result->ret_actιon = CALS_JUMP_TO_PIC; asp_result->event_generated = entry_event; return ( 0) ; trFail ("NISDN: RG :0_ERROR TRGR func failed, CS : %d, CLEG : %d, BCSM: %d" , asp_call_data- bcsm_hdr . cs_ιd, asp_call_data->bcsm_hdr .cieg_ιd, asp_call_data->bcsm_hdr ,bcsm_ιd) ; f_NISDN_trgr_err_hndler (asp_curr_pt->bcsm_sub_poιn , vsp_bcm_ca1l_da a , asp_result ) ; (♦endif return ( -1 ) ; Thu Jun 27 18:12:13 1996 NISDN_twc_trgr.c 12 Pa9θ 12 of 12 98/07094 -39- ThuJun 2718:12:011996 Page 1 of 26 static char rcsιd( J ="$Id: NISDN_twc_proc . , v 1.9 1996/06/09 21:03:45 demir Exp $ Copyright (c) NewNet" ****** ******** ******* * Copyright (c) NewNet, Inc. * All rights reserved. * This document contains confidential and proprietary information of NewNet 10 * and any reproduction, disclosure, or use in whole or in part is expressly 11 * prohibited, except as may be specifically authorized by prior written 12 * agreement or permission of NewNet. 13 14 ********* *********** ******* 15 VERSION : SRevision: 1.9 $ 16 DATE : $Date: 1996/06/0921:03:45 S MODULE NAME SRCSfi 1 e : NISDN ^ t wc_proc .c,v $ AUTHOR DESCRIPTION DATE 1st REL REV. HIST. 24 ' Date Owner Description 25 26 27 ******** * RESTRICTED RIGHTS LEGEND 31 * Use, duplication, or disclosure by Government Is Subject to restrictions as 32 " set forth m subparagraph (c) (1) (n) of the Rights in Technical Data and * Computer Software clause at DFARS 252.227-7013 ******* ******* ******* ♦include <stdιo.h> ♦include <stdlib.h> ♦include <sys/tιme.h> ♦include <errno.h> ♦include <apι.h> ♦include <sccp_scpa.h> ♦include <tcap.h> ♦include <ADAP_G.h> #ιnclude <SYS_G_types .h> ■Sinclude <SYS_G_access . h> ♦include <SYΞ_G_mgmt_states.h> Kmclude <SYS_G_msgtypes .h> 52 ♦include <Db.h> S3 ♦include <DB_G_feature_defs.h> #include <DB_G_group.h> ♦include <CONS_G_HWCI_if .h> 57 ((include <CONS_G_CP_ιf .h> 58 ♦include <IBSS_G_CP_ι .h> 59 ♦include <MEDS_G_CP_i .h> 60 ♦include <CONS_G_erro .h> 61 ♦include <IBΞS_G_error .h> 62 ♦include <MEDS_G_erro .h> 64 ♦include <AIN02_G_oper.h> 65 ♦include <CALS_G_cv_defs.h> ♦include <CALS_G_σn_msg . h> ♦include <CALS_G_cm_defs .h> 68 ♦include <CALS_G_slp_i c.h> 69 ♦include <CA S_G_cm_apι.h> 70 ♦include <CALS_G_TB_apι . h> 71 ♦include <BCM_G.h> 72 ♦include <BCM_G_if.h> ♦include <NISDN L lιne.h> ThuJun 2718:12:011996 NISDN_twc_procx 1 Page 1 of 26 98/07094 -40- ThuJun 2718:12.011996 t_NISDN_send_slp_msg Page 2 of 26 ♦include <NISDN_L_trgr .h> / ******************************* ******* ' Name * Synopsis * Description * Author ' Date 1st released * Input parameters ' Return value " Revision history ' Date Owner Description ********** ******* ********* int -_NISDN_ββικ-_slp_mβg (int aι_trgr_ιd, CALS_CS_ID cs_ιd, CALΞ_CS_ID assoc_cs__ιd, CALS_LEG_ID pleg_ιd, CALS_OPER_TYPE trgr_operatιon) CALS_SLP_MSG_S vs_slp_msg, /* Prepare the message for SLP */ vs_slp_msg.msghdr operation = trgr_operatιon, vs_slp_msg.msghdr .cs_ιd = cs_ιd, vs_slp_msg.msghd .assoc_cs_ιd = assoc_cs_ιd, vs_slp_msg.msghdr . leg_ιd = pleg_ιd, vs_slp_msg.data_len = 0, if (f_CALΞ_send_SLP_msg (aι_trgr_ιd, &vs_slp_msg) < 0) ( trFail CNISDN. TRGR. CALS send_SLP_msg ERR %d, PLEG %d CS %d" errno, pleg_ιd, cε_ιd) , return (-1) ; return (0) ; ThuJun 2718.12.011996 NISDN_twc_proc.c 2 Page 2 of 26 - 1- ThuJun 2718:12.01199C f_NISDN_send_event_msg Page 3 of 26 Name Synopsis Description Author Date 1st released Input parameters Return value Revision history Date Owner Description ******* ************* ******* ******** int £_NISDN_aβnd_βvβnt_πιag (int aι_trgr_ιd, BCM_CALL_DATA_S *asp_bcsm_data, CALS_OPER_TYPE trgr_operat ion ) CALΞ_SLP_MΞG_S vs_slp_msg, CALS_TIMER_MSG_S vs_tιmer_info; CALΞ_LEG_CV_INFO_Ξ leg_cv_ιnfo, if (f_CALS_get_leg_cv_ιnfo (asp_bcsm„data->common_data cleg_ιd, ileg_cv_ιnfo) < 0) ( trFailCNISDN TRGR. CALS get_leg_cv_ιnf o ERR- %d, BCΞM:%d" , errno, aεp_bcsm_data->common_data bcsm_ιd) , return (-1) ; /* Create an SLP interaction message, and send it Co SLP '/ vs_slp_msg.msghdr .operation = trgr_operatιon, vs_slp_msg.msghdr . cs_ιd = asp_bcsm_data->common_data . cs_ιd; vs_s lp_msg.msghdr .assoc_cs_ιd = leg_cv_mfo.assoc_cs_ιd, vs_slp_msg.msghdr . leg_ιd = asp_bcsm_data->corranon_data pleg_ιd, vs_slp_msg.data_len = 0, if ( f_CALS_send_ΞLP_msg (aι_trgr_ιd, &vs_slp msg) < 0) ( trFail CNISDN: RGR:CALS send_SLP_msg ERR. %d, PLEG %d,CS:%d", errno, asp_bcsm_data->common_data.pleg_ιd, asp_bcsm_data->common_data cs_ιd) , return (-1 ) ; ) ♦if 0 /* Start the SLP interaction Timer */ vs_tιmer_ιnfo. tιmer_typ = BCM_SLPιnteract_TIMER. vs_tιmer_ιnfo.own_bcsm_ιd = asp_bcsm_data->coιranon_data .bcsm_ιd, vs_tιmer_ιnfo.data_len = 0; asp_bcsm_data->trgr_data.slp_tιmer_ιd = f_CALS_Start_tιmer (&vs_tιmer_ιn o, L_SLP_TIMER_DURATION) ; if (asp_bcsπ_data->trgr_data.slp_tιmer_ d < 0) { trFail CNISDN: TRGR: Timer could not be started") return (-1) , ) ♦endif return (0); ) ThuJun 2718:12:011996 NISDN_twc_proc.c 3 Page 3 of 26 ThuJun 2718:12:011996 f_t c_dιsc2party Page 4 of 26 | ********* Name Synopsi s Description Author Date 1st released Input parameters Return value Revision history Date Owner Description .... int f_twc_disc2party (BCM_CALL_DATA_S *asp_bcsm_data) ( CONS_DISC_CMD_S vs_cons_dιsc_msg; dword_t vs_cons_pass_thru; Disconnect the current two party call. Puc the called party on hold. To do this, send a CONS_dιsc message and wait its response... */ memset {(vo d * ) &vs_cons_dιsc_msg, 0, sizeof (CONS_DISC_CMD_S) ) ; vs_cons_dιsc_msg. log_dev = asp_bcsιr_data->orιg_log_dev_ιd, vs_cons_pass_thru = M_CALS_gen_passthru (asp_bcsm_data->common_data.pleg_ιd, 0,0), if (f_CONS_dιsc_async (vs_cons_ρass_thru, L_CONS_RET_ALL, &vs_cons_dιsc_msg) < 0) ( trFail CNISDN: TRGR: CONS dιsc_async ORIG ERR: %d, %s, BCSM: %d- errno, f_CONS_strerror (errno), asp_bcsm_data->common_data bcεm_ιd) , return (-1 ) ; ) memset ((void *) ivs_cons_dιsc_msg, 0, sizeo (CONS_DISC_CMD_S) ) , vs_cons_dιεc_msg. log_dev = asp_bcsm_data->term_log_dev_ιd; vs_cons_pass_thru * M_CALS_gen_pass hru (asp_bcsm_data->common_data.pleg_ιd, 0,0), if ( f_CONS_dιsc_async (vs_conε_pass_thru, L_CONS_RET_NONE, &vs_cons_dιsc_msg) < 0) { trFail CNISDN: TRGR: CONS dιsc_async TERM ERR: %d, %s, BCSM:%d" , errno, f_CONS_εtrerror (errno), aεp_bcεm_data->common_data bcεm_ιd) , return (-1) ; return (0) ; ThuJun 2718:12:011996 NISDN_twc_proc.c 4 Page 4 of 26 -43- ThuJun 2718:12:011996 f_twc_conn2party Page 5 of 26 * . * . * ... ******* Name Synopsis Description Author Date 1st released Input parameters Return value Revision history Date Owner Description ********** mt f_twc_con-2party (BCM_CALL_DATA_S *asp_bcsm_data) f C0NS_C0NN_CMD_S vs„cons_conn_msg; dword_t vs_cons_pass_thru; Send a CONS. connect message to recover the disconnected 2 party call vs_cons_conn_msg. log_dev_a = aεp_bcsm_data->orιg_log_dev_ιd; vε_cons_connjnsg. log_dev_b = asp_bcsm_data->teπrι_log_dev_ιd, vs_cons_conn_msg.way - L_WAY_T 0, vs_cons_pass_thru = M_CALS_gen_passthru (asp_bcsm_data->common_data. pleg_ιd, 0,0), if (f_CONS_conn_async (vs_cons_pass_thru, L_CONS_RET_AL , &vs_cons_conn_msg) < 0) ( trFail CNISDN: TRGR: CONS conn_async ERR:%d,%s", errno, f_CONS_strerror (errno) ) , return (-1) ; ) return (0) ; Thu un 2718:12:011996 NISDN_twc_proc.c 5 Page 5 of 26 8/07094 -44- ThuJun 2718:12:011996 f_twc_send_msg2assocCS Page 6 of 26 /* * Name * Synopsis * Description * Author * Date 1st released * Input parameters * Return vaiue * Revision history * Date Owner Description ************* ********** ******* int fi_t c_ββnd_mβg2a»βoccS ( BCM_CALL_DATA_S *asp_bcsm_data, int aι_ιndιcatιon) ( bcp_msg_t *vsp_bcp_msg; Send indication to associated CS */ if ( (vsp_bcp_mεg = f_CALS_alloc_msgbuf (I) == NULL) ( trFail C ISDN: TRGR:CALS alloc_msgbuf ERR: *d, BCSM: %d" , errno, asp_bcεm_data->common_data .bcsm_ιd) ; return (-1) ; ) else ( vsp_bcp_msg->msg_type = BCP_INTRN_CS_MSG; vsρ_bcp_msg->un. ιntrn_cs_mεg. ind_typ = aι_ιndιcatιon; if (f_CALS_send_msg_to_aεsoc_CS (asp_bcsm_data->common_data . cs_ιd, vsp_bcp_msg, S0FT ARE_ERR0R_PRI0RITY) < 0) ( trFail C ISDN: TRGR: CALS send_msg_to_assocCS ERR. Id. BCSM %d". errno, asp_bcεm_data->common_data . bcsm_ιd) , if (f_CALS_free_msgbuf (vsp_bcp_msg) < 0) ( trFail ("NISDN:TRGR:CALS free_msgbuf failed"), return -1) ; ) return (0) ; ThuJun 2718:12:011996 NISDN_twc_proc.c 6 Page 6 of 26 98/07094 -45- ThuJun 2718:12:011996 fJwc_send_msg2peerCS Page 7 of 26 /' ******* ********** ' Name ' Synopsis ' Description * Author * Date 1st released " Input parameters * Return value * Revision history ' Date Owner Description ******** ************* ******* int f_twc_ββnd_ ag2pββrCS (BCM_CALL_DATA_S *asp_bcsm_data, int ai_ιndιcatιon) ( bcp_msg_t *vsp_bcp_msg, Send indication to peer CS '/ if ( (vsp_bcp_msg = f_CALS_alloc_msgbuf ()) NULL) trFail CNISDN: TRGR: CALS alloc_msgbuf ERR: %d. BCSM:%d" , errno, asp_bcsm_data->coιπmon_data .bcεm_ιd) ; return (-1); ) else ( vεp_bcp_msg->msg_type = BCP_INTRN_CS_MSG; vsp_bcp_msg->un. mtrn_cs_msg. ιnd_tyρ = aι_mdιcatιon; lf (f_CALS_send_mεg_to_peer (asp_bcsm_data->common_data .pleg_ιd, vsp_bcp_msg, DEFAULT_PRIORITY) < 0) ( trFail C ISDN: TRGR: CALS send_msg_to_peer ERR: %d, BCSM: *d" , errno, asp_bcεm_data-?coιranon_data. bcsm_ιd) , if (f_CALS_f ree_msgbuf (vsp_bcp_msg) < 0) { trFail CNISDN: TRGR: CALS free_msgbuf failed"), ) return (-1) ; ) return (0) ; ThuJun 2718:12.011996 NISDN_lwc_proc.c 7 Page 7 of 26 ThuJun271812011996 f_twc_cons_conn_response Page 8 of 26 ********** Name Synopsis Description Author Date 1st released Input parameters Return value Revision history Date Owner Description ********** ********* ********* ******** int f_twc_conβ_conn_raaponββ ( BCM_CALL_DATA_S *asp_bcsm_data) ( C0NS_MSG_S *vεp_conε_msg vsp_cons_msg = (C0NS_MSG_S *) &( (asp_bcsm_data->bcp_msg_ptr) ->un ιpc_msg datafO] ) trInfoCNISDN TRGR CONS msg rcvd 0x%x BCSM %d" vεp_cons_msg->pπm_ιd aεp_bcεm_data->coπιmon_da a bcεm_ιd) if (vsp_cons_msg->prιm_ιd CONS CONN ACK) ( trInfoCNISDN TRGR CONN ACK for BCSM(%d)" aεp_bcsm_data->comm on_data bcsm_ιd) return (0) ) else if (vsp_cons_msg->pπm_ιd == CONS_CONN_NACK ) ( trInfoCNISDN TRGR CONN NACK for BCSM(%d)" aεp_bcsm_data->common_data bcsm_ιd) trFail CNISDN TRGR CONS conn_nack ERR %d DIAG %d for BCSM(%d)" vsp_cons_msg->data conn_nack err_code vsp_cons_msg->data conn_nack diag asp_bcsm_data->common_da bcεm_ιd) return (-1) , ) ThuJun271812011996 NISDN_twc_proc c 8 Page 8 of 26 ThuJun 2718:12:011996 f_1wc_cons_orig_call Page 9of 26 j ******************* ************* ********* Name Synopsis Description Author Date 1st released Input parameters Return value Revision history Date Owner Description ********** ************ int f_twc_cons_orig_call (BCM_CALL_DATA_S * asp_bcsm_data) ( CONS_MSG_S *vsp_cons_msg, CALS_CS_ID assoc_cs_ιd; CALS_BCSM_POINT_S vs_bcsm_poιnt ; bcp_msg_t *vsp_bcp_msg; MEDS_MSG_S *vsp_meds_msg; IPCmεg_t vε_ιpc_msg; vsp_cons_msg = (CONS_MSG_S *) 4 ( (asp_bcsm_data->bcp_msg_ptr ) ->un. ιpc_msg.data[0] ) trInfo("NISDN:TRGR:CONS msg rcvd: 0x%x, BCSM: %d" , vsp_cons_mεg->prιm_ιd, asp_bcεm_data->common_data.bcsm_ιd) , if (vsp_cons_msg->prim_ιd == CONS_DISC_ACK) ( trInfoCNISDN: TRGR: DISC ACK for BCSM(%d)", aεp_bcsm_data->common_data . bcsm_ιd) ; asp_bcsm_data->trgr_data. ιnt_state = L_TWC_TRGR_DISC_FIRΞT_CALL; /' Send digit collection request to switch '/ vsp_medε_msg = (MEDS_MSG_S * )& (vs_ιpc_msg .data(0] ) ; emεet ((void * ) sp_meds_msg, 0, sizeof (MEDΞ_MSG_Ξ) ) , vsp_meds_msg->prιm_ιd = MEDS_COLL_DIG_CMD; vsp_meds_msg->log_dev = asp_bcsm_data->orιg_log_dev_ιd, vsp_meds_msg->pass_thru = M_CALS_gen_passthru (asp_bcsm_data->common_da a.pleg_ιd, 0,0): vsp_meds_msg->rep_cntrl = L_RET_ALL, vεp_meds_mεg->msg_data.coll_dιg_cmd. tone_type = L_TT_DTMF_TYPE; vsp_meds_msg->msg_data.coll_dig_cmd.mode = L_MODE_TERM_CHAR; vsp_meds_msg->msg_data.coll_dιg_cmd.dιg_cnt = L_MAX_DIG_CNT; vsp_meds_mεg->msg_data.coll_dιg_cmd. rm_char_cnt = 1, vεp_medε_msg->mεg_data.coll_dιg_cmd. trm_char_val [01 = OxOf; vsp_meds_msg->msg_data.coll_dig_cmd. fιrst_dιg_tmr = Oxff; vεp_meds_msg->msg_data.coll_dιg_cmd. ιnter_dιg_tmr = Oxff; vsp_meds_msg->msg_data. coll_dig_cmd.complete_tmr = Oxff, if ( f_MEDΞ_sndCmdMsg (&vs_ιpc_mεg) < 0) ( trFail CNISDN:TRGR :MEDS sndCmdMsg ERR: %d, BCSM: %d" , errno, asp_bcεm_data->coπunon_data .bcsm_ιd) ; return (-1) ; return (0) ; ) else if (vsp_cons_msg->prim_ιd == CONS_DISC_NACK) { trInfo("NISDN:TRGR:DISC NACK for BCSM(%d)" , asp_bcsm_data->common_data . bcsm_ιd) ; trFail ("NISDN: TRGR: CONS disc nack ERR:%d DIAG:%d for BCSM(%d) ThuJun 2718:12:011996 NISDN wc_proc.c 9 Page 9 of 26 8/07094 -48- Thu un 2718:12:011996 f_twc_cons_oπg_call Page 10 of 26 vsp_cons_msg->data . ιsc_nack . err_code, vsp_cons_msg->data . ιsc_nack .dia , asp_bcsm_data->common_data bcsm_ιd) , return (-1) ,- Thu Jun 27 18:12:01 1996 NISDN_t c_proc.c 10 Page 10 of 26 Thu un 2718:12:011996 f_twc_meds_coll_dιgιts Page 1 of 26 /*" *************** ******* *************** ********* Name Synopsis Description Author Date 1st released Input parameters Return value Revision history Date Owner Description ********* int I_twc_j-βdβ_coll_digits (BCM_CALL_DATA_S "asp_bcsm_data, int aι_trgr_ιd) MEDS_MSG_S *vsp_meds_msg ; IPCmsg_t "vsp_ιpc_msg; BCM_NON_ISDN_LINE_DATA_ *vsp_data_ptr; char dιgιts(30] ; nt vι_cn ; CALΞ_BCSM_POINT_S vs_bcεm_poιn , CALS_CS_ID assoc_cs_ιd; bcp_msg_t *vsp_bcp_msg, IPCmsg_t vs_ιpc_msg; vsp_ιpc_msg = & (asp_bcsιr_data->bcp_msg_ptr->un . ιpc_msg) , vεp_meds_msg = (MEDS_MΞG_S * ) & (vεp_ιpc_msg->data [ 0] ) ; trInfo("NIΞDN:TRGR:MEDS msg recvd: 0x%x, CS : %d, CLEG : %d, BCSM: %d" , vsp_meds_msg->prιm_ιd, asp_bcsm_data->coirunon_da a.cs_id, asp_bcsm_data->common_data . cleg_ιd, asp_bcsm_data->common_data . bcsm_ιd) ; switch (vsp_meds_msg->prim_id) ( case MEDS_COLL_DIG_ACK . /• Connect dial tone '/ vsp_meds_msg = (MEDS_MSG_S * ) & (vs_ιpc_msg. datalO] ) ; memset ((void * )vsp_meds_msg, 0, sizeof I EDΞ_MSG_S) ) ; vsp_meds_msg->prιm_ιd = MEDΞ_CONN_TONE_CMD, vsp_meds_msg->log_dev = asp_bcsm_data->orιg_log_dev_ιd, vsp_meds_msg->pass_thru = M_CALS_gen_passthru (asp_bcsm_data->common_data.pleg_id, 0,0) vsp_meds_msg->rep_cntrl = L_RET_NONE; vsp_meds_msg->msg_data.conn_tone_cmd. tone = L_TONE_DIALTONE; if ( f_MEDS_εndCmdMsg (4vs_ιpc_msς) < 0) ( trFail CNISDN: TRG :MEDS sndC dMsg ERR: %d, BCSM: %d" , errno, asp_bcsm_data->common_data.bcsm_ιd) ; return (-1) ; ) return ( 0 ) ; case MEDS_COLL_DIG_NACK: case MEDS_COLL_ERR_IND: return (-1) ,- break; case MEDΞ_COLL_DIG_IND: vsp_data_ptr = (BCM_NON_ISDN_LINE_DATA_Ξ *) & (asp_bcsm_data->εpecf_data(0] ) ; /* Copy all but the pound digit vεp_data_ptr->stagel_count = VSP meds msσ->mso data. coll dig ind.len - 1: ThuJun 2718:12:011996 NISDN wc_proc.c 11 Page 11 of 26 Thu un 2718:12:011996 f_twc_mβds_coll_dιgιls Page 12 of 26 memcpy (& (vsp_data_ptr->stagel_dιg[01 ) , 4vsp_medε_msg->msg_data.coll_dig_ιnd.dιgιts [0 ] , vsp_data_ptr->stagel_count) , / » Get a copy of the digits received for tracing */ M_DN_convert (vsp_data_ptr->stagel_dιg, vsp_data_ptr->stagel_coun , digits, vi_cn ) ; trInfo("NISDN:TRGR:Dιgιts rcvd <%s> , BCSM= d" , digits, asp_bcsm_data->common_data . bcεm_ιd) ; Create a new Call Segment associated with current Call Segment '/ aεp_bcεm_data->trgr_data. ιnt_state = L_TWC_TRGR_START_SCND_CALL; vs_bcsm_poin .currently_ιn = CALS_IN_PIC; vs_bcsm_point . bcsm_poιnt = 4; vs_bcsm_point .bcεm_sub_poιnt = 0; if ( (assoc_cs_ d = f_CALS_create_assoc_CS (asp_bcεm_data->common_data.bcεm_ιd. &vε_bcsm_poιnt) ) < 0) ( trFail ("NISDN: RGR: CALS create_assoc_CS ERR. %d, BCSM: %d" . errno, aεp_bcsm_data->common_data .bcεm_ιd) ; return (-1) ; asp_bcεm_data->trgr_data.ιnt_state = L_TWC_TRGR_ASSOCIATED; Create an Event msg to activate call processing of associated CS V if ( (vsp_bcp_msg = f_CALS_alloc_msgbuf ( ) ) == NULL) ( trFail ( "NIΞDN:TRGR:CALS alloc_msgbuf ERR: %d, BCSM- d" , errno, asp_bcsm_data->common_data . bcsm_ιd) ; return (-1) ; ) vsp_bcp_msg->mεg_type = BCP_EVENT_MΞG; vsp_bcp_msg->leg_ιd = asp_bcεm_data->common_data. cleg_id; vεp_bcp_msg->un.event_msg .event_generated = AIN_0_INFORMATION_COLLECTED , if ( f_CALS_CS_put_queue (assoc_cs_ιd. vsp_bcp_msg, DEFAULT PRIORITY) < 0) ( trFail CNISDN: TRGR; CALS CS_put_queue f iled"); if ( f _CALS_f ree_msgbuf (vεp_bcp_msg) < 0) ( trFail ("NISDN:TRGR:CALS free_mεgbuf failed"), ) return (-1) ; if (f_NISDN_send_slp_msg (aι_trgr_ d, asp_bcsm_data->comιnon_data. cε_ιd, assoc_cs_id, asp_bcsm_data- >common_data . pleg_ιd , AIN OPER_SUCCESS_OUTCOME) < 0) ( trFail CNISD : TRGR :ΞUCCESS_OUTCOME msg send failed"), return (-1) ; ) return (0) ; ThuJun 2718:12:011996 NISDN_t c_proc.c 12 Page 12 of 26 ThuJun 2718:12:011996 f_twc_cons_merge_call Page 1 of 26 vsp_cons_msg->data.dιsc_nack. err_code, vsp_cons_msg- >data . dιsc_nack . diag, asp_bcsm_data->common_data .bcsm_ιd) ; return (-1) , ThuJun 2718:12:011996 NISDN_twc_proc.c 14 Page 14 of 26 ThuJun 2718:12:011996 f_twc_cons_conf_response Page 15 ol 26 /' ******** * Name * Synopsis * Description * Author ' Date 1st released * Input parameters ' Return value * Revision history Date Owner Description **************** ****************** ********* , mt f_twc_cono_con£_rβaponaβ ( BCM_CALL_DATA_S *asp_bcsm_data, CONS_MSG_S *vsp_cons_msg; bcp_mεg_t *vsp_bcp_msg; vsp_cons_msg = (CONS_MSG_S *) (asp_bcsm_data->bcp_msg_ptr) ->un ιpc_msg.data[0] ) , trInfoCNISDN TRGR:CONΞ msg rcvd: Ox%x, BCSM %d", vsp_cons_mεg->prιm_ιd, asp_bcsm_data->common_data bcsm_ιd) , if (vsp_cons_msg->prιm_ιd CONΞ_CONF ACK) { trInfo("NISDN:TRGR.CONF NACK rcvd"), asp_bcsm_data->trgr_data.ιnt_state = L_TWC_TRGR_CONFERENCE , if (f_NISDN_send_εlp_msg (aι_trgr_ιd, asp_bcsm_data->common_data cs_ιd, L_INVALID_CS_ID, asp_bcsm_data->common_data pleg_ιd, AIN_OPER_SUCCESS_0UTCOME) < 0) ( trFail ("NISDN:TRGR SUCCESS_OUTCOME msg send to SLP failed"), if I f_CALS_merge_call (asp_bcsm_data->common_data cs_ιd) < 0) ( /* Conferencing successful but CALS failed to update the Connection view . Nothing to do Error handlers will clear the call */ trFail ( "NIΞDN:TRGR. CALS merge_call ERR %d.BCΞM *d", errno, asp_bcsm_data->comιτιon_data.bcsm_ιd) , } else { asp_bcsm_data->trgr_data. t_state = L_TWC_TRGR_MERGED_1 , Something to be done to make the other BCSM exit MIDCALL "/ if ( (vsp_bcp_msg = f_CALS_alloc_msgbuf ()) == NULL) ( trFail ("NISDN: TRGR: CALS alloc_msgbuf ERR %d,BCSM:%d", errno, asp_bcsm_data->common_data .bcsm_ιd) ; return (0) ; vsp_bcp_msg->mεg_type = BCP_INTRN_CS_MSG, vsp_bcp_msg->un. ιntrn_cε_msg. ιnd_typ = L_TRGR_MSG_TWC_SUCCESS ; if (f_CALS_dιstrιbute_mεg (aεp_bcεm_data->corrarιon_data.bcsm_ιd, asp_bcsm_data->common_data .cs_ιd, vsp_bcp_msg, ASSOC CS MSO RIORITY) < 0) ThuJun 2718:12:011996 NISDN_t c_proc.c 15 Page 15 of 26 -54- ThuJun 2718:12:011996 f_twc_cons_conf_response Page 16 of 26 ( trFail CNISDN:TRGR:CALS dιstribute_msg failed, CV not updated"); if (f_CALS_free_msgbuf (vsp_bcp_msg) < 0) ( trFail CNIΞDN:TRGR:CALS free_msgbuf failed"); ) return (0) ; ) else if (vεp_cons_ιnsg->prιm_ιd == CONΞ_CONF_NACK ) ( trInfo("NISDN:TRGR:CONF NACK for BCSM(%d)", asp_bcsm_data->coπ_rιon_data.bcsm_ιd) ; trFail C ISDN: RGR: CONS conf_nack ERR:4d DIAG:%d for BCSM(%d)" vsp_cons_msg- >data . conn_nack . err_code, vεp_cons_msg->data . conn_nack . diag , asp_bcsm_data->common_data.bcεm_id) ; return (-1) ; ThuJun 2718:12:011996 NISDN_twc_proc.c 16 Page 16 of 26 Thu un 2718:12:011996 f_1wc_error_clear_all Page 17 of 26 /' * Name ' Synopsis " Description " Author ' Date 1st released " Input parameters * Return value * Revision history Date Owner Description t f_twc_βrror_clβar_all ( BCM_C ALL_DATA_S "asp_bcεm_data) bcp_mεg_t *vεp_bcp_mεg ; int vι_return = 0; IPCmεg_t vs_ιpcmεg; MEDS_MSG_S *vsp_medε_mεg; /' First disconnect the tone that has been connected m EXCEPTION "/ memset ((void *) 4vs_ιpcmsg.data|0] , 0, sizeo (MEDS_MΞG_S) ) ; vsp_meds_msg = (MEDS_MSG_S *) k (vs_ιpcmsg . dat [ 0 ] ) ; vsp_meds_msg->pπm_ιd = MEDS_DISC_TONES_CMD, vεp_meds_msg->pass_thru = M_CALS_gen_paεεthru(asp_bcsm_data->common_data.pleg_ιd, 0,0) ; vsp_meds_msg->log_dev = asp_bcsm_data->oπg_log_dev_ιd; vεp_meds_msg->rep_cntrl = L_RET_NONE; if (f_MEDS_sndCmdMsg(rlvs_ιpcmsg) < 0) { trFail CNISDN: TRGR: MEDS εndCmdMsg ERR: %d, BCSM: %d" , errno, asp_bcsm_data->common_data .bcsm_id) ; vι_return = -1; ) /* Send indication to associated CS to clear the call on hold '/ if (f_twc_send_msg2assocCS (asp_bcsm_data, L_TRGR_MSG_T C_CLEAR ) < 0) ( trFail ("NISDN:TRGR:send_msg2assocCS (CLEAR) failed"); vι_return = -1; Do move_leg of Controlling Leg and Disassociate V if (f_CALS_move_and_disassoc (asp_bcsm_data->common_data. cs_id) < 0) ( trFail CNISDN: TRGR: CALS move_and_dιsassoc ERR: %d, BCSM:%d" , errno, asp_bcsm_data->common_data.bcsm_id) ; vι_return = -1; ) return (vi_return) ; ThuJun 2718:12:011996 NISDN_twc_proc.c 17 Page 17 of 26 ThuJun 2716.12.011996 ι_t c error recoverjirst Page 18 of 26 /' ******** ********* ******** ' Name ' Synopsis * Description * Author * Date 1st released * Input parameters * Return value * Revision history Date Owner Description ****************************** ******* int £_twc_βrror_rβcovβr_firat ( BCM_CALL_DATA_S *asp_bcsm_data) ( int vι_return = Or bcp_msg_t *vsp_bcp_msg, IPCmsg_t vs_ιpcπtsg; MEDS_MSG_S *vsp_meds_msg, /* First disconnect the tone that has been connected in EXCEPTION '/ memset ((void *) &vs_ιpcmsg .data[0) , 0, sizeof (MEDS_MΞG_S) ) , vsp_meds_msg = (MEDS_MSG_S *) 4 (vs_ipcmsg.data(0 ) ) , vsp_meds_mεg->prιm_ιd = MEDS_DISC_TONES_CMD, vεp_meds_mεg->paεs_thru = M_CALS_gen_passthru (asp_bcsm_data->common_data pleg_ιd, 0,0), vεp_meds_msg->log_dev = asp_bcsm_data->ong_log_dev_ιd, vsp_meds_msg->rep_cntrl = L_RET_NONE, if ( f_MEDS_sndCmdMsg(r5r.vs_ιpcmsg) < 0) { trFail CNISDN.TRGR:MEDS sndC dMsg ERR:%d,BCSM %d" , errno, asp_bcsm_data->coπunon_data bcsm_ιd) , vι_return = -1, ) /* Send indication to associated CS to reconnect first call back */ if ( f_twc_εend_msg2assocCS (asp_bcsm_data, L_TRGR_MSG_TWC_RECONNECT ) < 0) ( trFaιl("NISDN:TRGR:send_msg2assocCΞ (RECONNECT) failed"), vι_return = -1; ) /* Do move ^ leg of Controlling Leg and Disassociate •/ if ( f_CALS_move_and_dιsassoc (asp_bcεm_data->common_data. cs_ιd) < 0) ( trFail ("NISDN: TRGR: CALS move_and_dιsasεoc ERR %d. BCSM- %d" , errno, asp_bcsm_data->common_data bcsm_ιd) , vι_return = -1; ) return (vι_return), ThuJun 2718:12:011996 NISDN Jwc_proc.c 18 Page 18 of 26 -57- ThuJun 2718:12:011996 f_twc_clβar_all_on_error Page 19 of 26 **************************** *********** ***************** * Name " Synopsis * Description * Author * Date 1st released * Input parameters * Return value ' Revision history » Date Owner Description ******************** ******** *********** ****** ******/ int £_twc_clβar_all_on_βrror ( BCM_CALL_DATA_S *asp_bcsm_data ) ( bcp_msg_t *vsp_bcp_msg; t vι_return = 0; Send indication to TERM CS for ERROR */ if (f_twc_εend_msg2peerCS (asp_bcεm_data, BCM_0RIG_TERMmsgSW_ERROR) < 0) ( trFail CNISDN: TRGR: send_msg2peerCS (SW_ERR0R) failed"), vι_return = -1; ) /* Send indication to associated CS to clear the call on hold '/ if (f_twc_send_mεg2aεεocCS (asp_bcsm_data, L_TRGR_MSG_TWC_ERROR ) < 0) ( trFail CNISDN:TRGR:εend_msg2assocCΞ (ERROR) failed"), vι_return = -1; ) /* Do move_leg of Controlling Leg and Disassociate V if ( _CALS_move_and_dιεassoc (asp_bcsm_dαta->con-non_data cs_ιd) < 0) ( trFail CNISDN: TRGR: CALS move_and_dιsassoc ERR: %d, BCSM: d" , errno, asp_bcsm_data->common_data .bcsm_ιd) ; vι_return = -1; ) return (vι_return) ; ThuJun 2718:12:011996 NISDN_twc_proc.c 19 Page 19 of 26 -58- Thu Jun 2718:12:011996 1 c_dιsc_all Page 20 of 26 Name Synopsis Description Author Date 1st released Input parameters Return value Revision history ' Date Owner Description int f_twc_diβc_all (BCM_CALL_DΛTA_Ξ • asp_bcsm_data ) ( bcp_msg_t *vsp_bcp__msg; CΛLS_LEG_CV_INFO_S vs_leg_cv_ιn£o, int vι_return = 0; /• Get Connection View of the BCSM '/ if ( _CALΞ_get_l p g_cv_ιnfo (asp_bcsm_da a->common_da a cleg_ιd, &vs_leg_cv_ιn£o) < 0) ( trFail CHISD1!.TRGR:CΛLS get_lcg_cv_ιnto ERR VI. BCSM : I " , errno, asp_bcsm_dαtΛ->common_dnta bcsm_ιd) , return ( -1 ) ; ) if ( £,_leg_cv_ιnf o . assoc_cs_ιd L_INVALID_CS_ID) Send indication to associated CS to clear the call on hold • / if ( f_twc_send_msq2as3θcCS I Λsp_bcsm._datα , trFail CNISDN:TRGR:Send_msg2asεocCS (CLEAR) tailed-) , vι_ιeturn = - 1 , ) / • Do move_leg of Controlling Leg and Disassociate • / if ( _CΛLS_move_and_dιsassoc (asp_bcsm_data->common_data cs_ιd) < 0) ( trFail ("NISDN: RGR:CALS move_and_dιsassoc ERR:ld, BCSM. lύ~ . errno, asp_bcsm_data->common_data ,bcsm_ιd) , vι_return = -1; ) ) else ( /• Send indication to other leg to clear • / if ( (vsp_bcp_msg = £_CΛLS_alloc_msgbuf ()) == NULL) ( trFail CNISDN: TRGR: CALS alloc_msgbuf ERR: lύ. BCSM: %d" , errno, asp_bcsm_data->common_data.bcsm_ιd) , vι_return = -1; ) else ( vsp_bcp_msg->msg_type = BCP_EVENT_MSG, vsp_bcp_msg->un . event_msg . event_generated = ΛIN_0_DISCONNECT_CONTROLLINC . vsp_bcp_msg->un.event_msg.event_ac ion = CALΞ_EVENT_ACT_EXIT. if (f_CALS_dιstrιbute_msg (asp_bcsm_data->common_dat .bcsm_ιd, .111, i oso bcsm data->common data.es id Thu Jun 2718:12.011996 NISDN_twc_proc.c 20 Page 20 of 26 -59- Thu Jun 2718:12:011996 f_t c_dιsc_all Page 21 of 26 vsp_bcp_msg , ASSOC_CS_MSG_PRIORITY) < 0) trFail CNISDN: TRGR. CALS dιstπbute_msg ERR: %d, BCSM: %d" errno, asp_bcsm_data->common_data.bcsm_ιd) ; if (f_CALS_free_msgbuf (vsp_bcp_msg) < 0) ( trFail CNISDN. TRGR. CALS free_msgbuf failed"); ) vι__return = -1, ) return (vι_return); Thu Jun 2718:12:011996 NISDNJ c_proc.c 21 Page 21 of 26 Thu Jun 2718:12:011996 f_t c_clear_scnd_call Page 22 of 26 *********** ******* ************ ******* Name Synopsis Description Author Date 1st released Input parameters Return value Revision history Date Owner Description *********** ******** int f_twc_olβar_βcnd_call (BCM_CALL_DATA_S *asp_bcsm_data) ( bcp_msg_t *vsp_bcp_mεg; int vι_ιndιcatιon, Send indication to TERM CS for DISCONNECT V if (asp_bcsm_data->call_sιde == L_BCMcsORIGINATING) vι_ιndιcatιon = BCM_ORIG_TERMmsgT_DISCONN_PAΞSIVE, elεe vl_ιndιcatlon = BCM_TERM_ORIGmsgO_DIΞCONN_PASSIVE, 1129 if ( f_t c_send_mεg2peerCS (asp_bcεm_data, 1130 vι_ιndιcatιon) < 0) 1131 2 f 1132 2 trFail ("NISDN:TRGR:send_msg2peerCS (DISCONNECT) failed"), 1133 2 return (-1) ; 1134 1 ) 1135 1 return (0) ; 1136 Thu Jun 2718.12:011996 NISDN_lwc_proc.c 22 Page 22 of 26 | -61- Thu Jun 2718:12:011996 f twc orror_scnd call Page 23 of 26 ******* ******* Name Synopsis Description Author Date 1st released Input parameters Return value Revision history Date Owner Description int £_twc_arror_«cnd_call ( BCM_CALL_DATA_S *asp_bcsm_data) ( bcρ_msg_t *vsρ_bcp_mεg; int vi indication, Send indication to TERM CS for DISCONNECT '/ if (asp_bcsm_data->call_sιde == L_BCMcsORIGINATING) vι_ιndιcatιon = BCM_ORIG_TERMmsgSW_ERROR; else vι_ιndlcatιon = BCM_TERM_0RIGmsgΞ _ERROR, if (f_t c_send_msg2peerCS (asp_bcεm_data, vι_ιndιcatιon) < 0) ( trFail CNISDN. RGR:send_mεg2peerCS (ERROR) failed") return (-1) ; ) return (0) , Thu Jun 2718:12:011996 NISDNJwc_proc.c 23 Page 23 of 26 8/07094 -62- Thu Jun 2718:12:011996 c_usc_leg Page 24 of 26 .. ************ * Name ' Synopsis * Description ' Author * Date 1st released * Input parameters * Return value ' Revision history * Date Owner Description *********** ******************* ,.. / t £_t c_disc_lβg ( BCM_CALL_DATA_S *asp_bcsrn_data) ( bcp_msg_t *vsp_bcp_msg; CALΞ_LEG_CV_INFO_S vs_leg_cv_ιn o, int vi return = 0; /• Get Connection View of the BCSM if (f_CALS_get_leg_cv_ιnfo (asp_bcsra_data->cornmon_data .cleg_ιd, 4vs_leg_cv_ιn o) < 0) ( trFail CNISDN: TRGR: CALS get_leg_cv_mf o ERR: %d, BCSM:%d" , errno, asp_bcsm_data->common_data.bcsrn_ιd) , return (-1) ; ) if (vs_leg_cv_in o. assoc_cs_ιd L_INVALID CS_ID) ( Send indication to associated CS to get ready for a FLASH ' / if (f_t c_send_msg2assocCΞ (asp_bcsm_data, L_TRGR_MSG_TWC_ AIT) 0) ( trFail ( "NIΞDN:TRGR:εend_msg2assocCS (WAIT) failed"), vi_return = -1; ) /* Do move_leg of Controlling Leg and Disassociate "/ if (f_CALS_move_and_dιsassoc (asp_bcsm_data- common_data . cs_ιd) < 0) ( trFail CNISDN: TRGR: CALS move_and_dιεassoc ERR %d.BCSM:%d", errno, asp_bcsm_data->common_data.bcεm_ιd) ; vι_return = -1; ) return (vi_return) ; Thu Jun 2718:12:011996 NISDN wc_proc.c 24 Page 24 of 26 Thu Jun 2718:12:011996 f_twc_release_on_waιt Page 25 of 26 ********* *********** Name Synopsis Description Author Date 1st released Input parameters Return value Revision history Date Owner Description ****************** ******** int £_twc_rβlβaββ_on_wait (BCM_CALL_DATA_S *asp_bcεm_data ) ( bcp_mεg_t *vsp_bcp_msg, /* Send indication to TERM CS for RELEASE */ if ( f_twc_send_msg2peerCS (asp_bcsm_data, BCM_ORIG_TERMmsgT_DISCONN_PASΞIVE) < 0) 1255 2 ( 1256 2 trFail CNISDN: TRGR :send_msg2peerCS (DISCONNECT) failed"), 1257 2 return (-1) , 1258 1 ) 1259 1 return (0) ; 1260 Thu Jun 2718:12:011996 NISDN_twc_proc.c 25 Page 25 of 26 -6k- Thu Jun 2718:12:011996 Uwc_clear_party_on_hold Page 26 of 26 ******** Name Synopsis Description Author Dace 1st released Input parameters Return value Revision history " Date Owner Description ****************** ********* mt £_twc_clβar_party_on_hold (int aι_trgr_ιd, BCM_CALL_DATA_S *asp_bcsm_data) ( CALS_LEG_CV_INFO_S vs_leg_cv_ f o; CALS_CS_ID assoc_cε_ιd; if (f_CALS_get_leg_cv_ιnfo (asp_bcsm_data->common_data.cleg_id, &vs_leg_cv_ιnfo) < 0) ( trFail CNISDN: TRGR: CALS get_leg_cv_ιnfo ERR: %d, BCSM: *d" , errno, asp_bcsm_data->common_data.bcsm_ιd) ; ) if (asp_bcsm_data->common_data.cs_ιd == ■ vs_leg_cv_ιnfo. cs_ιd) aεεoc_cε_ιd = vs_leg_cv_ιnfo.assoc_cs_ιd; else aεεoc_cs_ιd = vs_leg_cv_ιnfo.cs_ιd; if ( _NISDN_send_slp_msg (aι_trgr_id. 1295 asp_bcsm_data->common_data. cs_ιd, 1296 assoc_cs_id, 1297 asp_bcsm_data->common_da a . p1eg_ιd, 1298 AIN_OPER_FAILURE_OUTCOME) < 0) 1299 { 1300 trFail CNIΞDN:TRGR: εend_εlp_msg failed, BCSM: %d" , 1301 asp_bcsm_data->common_data bcsm_ιd) , 1302 ) 1303 if ( f_CALS_dιsassocιate (asp_bcsm_data->common_data.cs_ιd) < 0) 1304 { 1305 trFail C ISDN: TRGR: CALS disassociate ERR : %d, BCSM: %d" , 1306 errno, asp_bcsm_data->common_data.bcsm_ιd) , 1307 return (-1) ; 1308 ) 1309 return (0) ; 1310 Thu Jun 2718:12:011996 NISDN_twc_proc.C 26 Page 26 of 26 Thu Jun 2718:11:341996 Page 1 of 50 static char rcsidf ) ="$Id: NISDN_orιg_pιcs .c, v 1.9 1996/06/06 22 03.21 de ir Exp $ Copyright (c) NewNet" ******** Copyright (c) NewNet, Inc. All rights reserved. Th s document contains confidential and proprietary information of NewNet lo and any reproduction, disclosure, or use in whole or m part is expressly prohibited, except as may be specifically authorized by prior written agreement or permission of NewNet. ************************************************ ******* VERSION . $Revιsιon. 1.9 $ DATE . SDate. 1996/06/0622:03:21 $ MODULE NAME . $RCSfιle: NISDN_oπg_pιcs .c, v $ AUTHOR DESCRIPTION : DATE 1st REL . REV. HIST. Date Owner Description ' RESTRICTED RIGHTS LEGEND * Use, duplication, or disclosure by Government Is Subject to restrictions as * set forth m subparagraph (c) (1) (n) of the Rights in Technical Data and " Computer Software clause at DFARS 252.227-7013 * ****************************************************************************** Kinclude <stdιo.h> Kinclude <stdlιb.h> ((include <sys/tιme.h> Kinclude <errno.h> #include <apι.h> ftinclude <sccp_scpa.h> #include <tcap.h> Kinclude <ADAP_G.h> Kinclude <SYS_G_types .h> Kinclude <SYS_G_access .h> Kinclude <SYS_G_mςrmc_states.h> Kinclude <SYS_G_mεgtypes .h> Kinclude <Db.h> Hinclude <DB_G_feature_defs .h> Kinclude <DB_G_group .h> Hinclude <CONS_G_H CI_ιf .h> Kinclude <CONS_G_CP_i .h> Kinclude <IBSΞ_G_CP_ f .h> Kinclude <MEDS_G_CP_l .h> Kinclude <AIN02_G_oper .h> Kinclude <CALS_G_cv_defs .h> Kinclude <CALS_G_cm_msg.h> Kinclude <CALS_G_cm_defs .h> Kinclude <CALS_G_slp_i c.h> Kinclude <CALS_G_cm_apι .h> Kinclude <CALS_G_TB_apι . h> Kinclude <BCM_G.h> Kinclude <BCM_G_ιf.h> Kinclude <NISDN_L_line.h> l ******* ************ Thu Jun 2718:11:341996 NISDN_oπg_pιcs.c 1 Page 1 of 50 Thu Jun 2718:11:341996 nisdn o null Page 2 of 50 Function Prototypes ************* ********** ****************** void f_bcm_oerror_handler (BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ; / * * * * *********** ******* Name Synopsis Description Author Date 1st released Input parameters Return value Revision history * Date Owner Description ********* ************ int f_ni«dn_o_null (CALS_BCSM_POINT_S *asp_curr_pt , CALS_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_S *asp_call_data, bcp_msg_t *asp_msg) ( BCM_CALL_DATA_S *vsp_bcm_call_data , byte_t vb_event; int vι_return = FAIL; trInfoCNISDN > 0_NULL PIC, CS : *d, CLEG: %d, BCSM: %d" , asp_call_data->bcsm_hdr . cs_ιd, asp_call_data->bcsm_hdr . cleg_ιd, asp_call_data->bcsm_hdr .bcεm_ιd) , vsp_bcm_call_data = ( BCM_CALL_DATA_S • ) asp_call_data, vsp_bcm_call_data->bcp_msg_ptr = asp_msg, if ( (asp_msg->msg_tyρe == BCP_EXTRN_CS_MSG) && (asp_msg->un. ιpc_msg.msgenv.msgtyp == L_IBΞS_SPM_MT) ) ( vb_event = f_proc_msg_fr_ιbss (Sr.(asp_msg->un ιpc_msg) , vsp_bcm_call_data) , if (vb_event == L_BCMevIBSS_INSEIZE) ( if ( f_bcm_oprocl (vsp_bcm_call_data) == 0) ( asp_result->ret_act on = CALS_EXIT_PIC, asp_result->event_generated = AIN_0_ORIG_ATTEMPT; vι_return = SUCCESS, > if (vι_return == FAIL) ( trFail CNISDN:0_NULL PIC func failed, CS:%d, CLEG. %d, BCSM: %d" asp_call_data->bcsm_hdr . cε_ιd asp_c 1 l_data->bcεm_hdr . c1eg_ιd, asp_call_data->bcsm_hdr .bcsm_ιd) , asp_result->ret_action = CALS_ERR_IN_PROCESSING, asp_result->event_generated = AIN_UΞR_DEF_0_ERROR, ) return (vι_return) , Thu un 2718:11:341996 NISDN_orιg_pιcs.c 2 Page 2 of 50 Thu Jun 2718:11.341996 ι_nιsdn_o_auth_ong_at10 Page 3 of 50 ******* ************** *********** Name Synopsis Description Author Date 1st released Input parameters Return value Revision history ' Date Owner Description ******* ************ ********** ********* *•/ mt f_nlβdn_o_auth_orig_attO (CALS_BCSM_POINT_S * asp_curr_pt , CALS_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_S *aεp_call_data, bcp_msg_t *asp_msg) ( BCM_CALL_DATA_S '*vsp_bcm_call_data , byte_t vb_event, mt vι_return = FAIL, trInfoCNISDN > 0_ORIG_ATTEMPT PIC SUBO.CS %d,CLEG %d,BCSM %d" asp_call_data->bcsm_hdr cs_ιd, asp_call_data->bcsm_hdr cleg_ιd asp_call_data->bcεm_hdr bcεm_ιd) , vsp_bcm_call_data = (BCM_CALL_DATA_S * )asp_call_data, vsp_bcm_call_data->bcp_msg_ptr = asp_msg switch (asp_msg->msg_type) ( case BCP_EVENT_MSG if (aεp_mεg->un. event_msg event_generated == AIN_0_ORIG_ATTEMPT) aεp_result->ret_actιon = CALS_CONTINUE_W_INTERACT vι_return = SUCCESS, ) break, caεe BCP_EXTRN_CS_MSG switch (asp_mεg->un. ιpc_msg msgenv msgtyp) ( caεe L_IBSS_SPM_MT vb_event = f_proc_msg_fr_ιbss (4 (asp_msg->un ιpc_msg), vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevIBSS_RELEASE asp_result->ret_actιon = CALS_EXIT_PIC asp_result->event_generated = AIN_0_ABANDON, vι_return = SUCCESS, break, ) brea ; case L_CONS_SPM_MT vb_event = f_proc_msg_fr_cons (& (asp_msg->un ιpc_msg) vεp_bcm_call_data) , switch (vb_event) ( case L_BCMevCONS_OOS_STATE asp_result->ret_actιon = CΛLS_EXIT_PIC, asp_result->event_generated = AIN_0_ABANDON, vι_return = SUCCESS, break. if (vι_return == FAIL) ( trFailCNISDN 0_ORIG_ATTEMPT PIC SUBO failed, CS *d,CLEG %d,BCSM %d" -IS asp call data->bcsm hdr.cs d. Thu Jun 2718:11341996 NISDN_ong_pιcs c 3 Page 3 of 50 Thu Jun 27 18:11-34 1996 <_nιsdn_o_auth_orιg_att0 Page 4 of 50 217 asp_call_data->bcsm_hdr cleg_ιd, 218 aεp_call_data->bcsm_hdr bcsm_ιd) , asp_reεult->ret_actιon = CALS_ERR_IN_PROCESSING, asp_result->event_generated = AIN_USR_DEF_0_ERROR, ) return (vι_return) , Thu Jun 27 18:11 34 1996 NISDN_oπg_pιcs.c 4 Page 4 of 50 Thu Jun 27 18:11:34 1996 f_nιsdn_o_auth_ong_att 1 Page 5 of 50 f_niβdn_o_auth_oriβ_attl (CALS_BCSM_POINT_S *asp_curr_p , CALS_BCSM_FUNC_RET_S *asp_resul t . CALS_BCSM_INFO_S *aεp_cal l_data , bcp_msg_t *asp_msg ) BCM_CALL_DATA_S *vsp_bcm_call_data , byte_t vb_event , int v _return = FAIL, trInfo CNISDN > 0_ORIG_ ATTEMPT PIC SUBl . CS %d, CLEG %d, BCSM %d" asp_call_data->bcεm_hdr cs_ιd , asp_call_data->bcsm_hdr cleg_ιd asp_call_data->bcsm_hdr bcsm_ιd) , vsp_bcm_call_data = ( BCM_CALL_DATA_S * ) asp_cal l_data , vεp_bcm_call_data->bcp_msg_ptr = aεp_mεg , switch ( asp_msg- >mεg_type ) ( caεe BCP_EXTRN_CS_MSG switch (asp_msg->un. ιpc_mεg msgenv mεgtyp) ( case L_CONS_SPM_MT vb_event = f_proc_msg_fr_cons (4 (asp_msg->un ιpc_msg) vsp_bcm_call_data) switch (vb_event) ( case L_BCMevCONS_MAP_LOG_TO_MEM_ACK if (f_bcm_oproc2 (vsp_bcm_call_data) 0) asp_result->ret_actlon = CALS_CONTINUE_W_INTERACT, vι_return = SUCCESS; ) break, case L_BCMevCONS_MAP_LOG_TO_MEM_NACK asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_0_ORIG_DENIED, vι_return = SUCCESS, break, case L_BCMevCONS_0OS_STATE asp_result->ret_actιon = CALS_EXIT_PIC, aεp_result->event_generated = AIN_0_ABANDON, vι_return = SUCCESS; break; default trFail ("NIΞDN:Unknown CONS msg"), break; ) break, case L_IBSS_SPM_MT vb_event = f_proc_msg_fr_ιbsε (4 (aεp_msg->un ιpc_msg) , vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevIBSS_RELEASE asp_result->ret_actιαn = CALS_EXIT_PIC, asp_result->event_generated = AI _0_ABANDON, vι_return = SUCCESS; break, } } if (vι_return FAIL) ( trFail (" ISDN : 0_ORIG_ATTEMPT PIC SUBl failed, CS.Ϊd, CLEG. %d, BCSM %d" asp_call_data->bcsm_hdr cs_ιd, asp_call_data->bcsm_hdr .cleg_ιd, asp_call_data->bcsm_hdr bcsm_ιd) , asp_result->ret_act on = CALS_ERR_IN_PROCESSING, asp_result->event_generated = AIN_USR_DEF_0_ERROR, ) return (vι_return) , Thu Jun 27 18:11 :34 1996 NISDN_oπg_pιcs.c 5 Page 5 of 50 j -70- Thu Jun 27 18:11:34 1996 f_nιsdn_o_auth_oπg_att2 Page 6 of 50 int f_nisdn_o_auth_orig_att2 (CALS_BCSM_POINT_S "asp_curr_pt, CALS_BCSM_FUNC_RET_S *aεp_result , CALS_BCSM_INFO_S *asp_call_data , bcp_msg_t *asp_msg) ( BCM_CALL_DATA„S *vsp_bcm_ca11_da a; byte_t vb_event; int vι_return = FAIL , mt fcn_ret; trinfo CNISDN : > 0_ORIG_ATTEMPT PIC SUB2 , CS: %d , CLEG : %d, BCSM: %d" asp_call_data->bcsm_hdr . cs_ιd , asp_call_data->bcεm_hdr . cleg_ιd. asp_call_data-- bcsm_hdr . bcsm_ιd) , vsp_bcm_call_data = I BCM_CALL_DATA_S * ) asp_cal l_data, vsp_bcm__call_data->bcp_mεg_ρtr = asp_msg; εwitch (asp_msg->msg_type) ( case BCP_EXTRN_CS_MSG- switch (asp_msg->un . ιpc_ms .msgenv .msgtyp) ( case L_CONS_SPM_MT: vb_event = f_proc_msg_fr_cons (4 (asp_msg->un. ιpc_mεg) , vsp_bcm_call_data) ; switch (vb_even ) ( case L_BCMevCONS_ MARK_BUSY_ACK : if ( (fcn_ret = f_bcm_oproc4 (vsp_bcm_call_data) ) == 0) ( asp_result->ret_actιon = CALS_EXIT_PIC; asp_reεult->event_generated = AIN_0_ORIG_ATTEMPT_AUTHORIZED; vι_return = SUCCESS, else if (fcn_ret 1) ( asp_result->ret_actιon = CALS_EXIT_PIC, aεp_result->event_generated = AIN_0_ORIG_DENIED, vι_return = SUCCESS; ) break; case L_BCMevCONS_MARK_BUSY_NACK . asp_result->ret_actιon = CALS_EXIT_PIC ; asp_result->event_generated = AIN_0_ORIO_DENIED; vι_return = SUCCESS ; break; case L_BCMevCONΞ_OOS_STATE : asp_result->ret_actιon = CALS_EXIT_PIC , asp_result->event_generated = AIN_0_ABANDON, vι_return = SUCCESS ; break ; ) break; case L_IBΞS_SPM_MT : vb_event = f_proc_msg_fr_ιbss (4 (asp_msg->un . ιpc_msg) , vsp_bcm_call_data ) ; switch (vb_event) ( case L_BCMevIBSS_RELEASE : asp_result->ret_actιon = CALS_EXIT_PIC , asp_result->event_generated = AIN_O_ABAND0N, vι_return = SUCCESS; break ; } i f (vι_return == FAIL) { trFail CNISD : 0_ORIG_ATTEMPT PIC SUB2 fai led, CS : %d, CLEG : %d, BCSM : %d" , asp_call_data->bcsm_hdr . cs_ιd, asp_cal l_data->bcsm_hdr . cleg_id, asp_cal l_data- >bcsm_hdr . bcsm_ι ) ; Thu Jun 27 18:11:34 1996 NISDN_orιg_pιcs.c 6 Page 6 of 50 -71- Thu Jun 27 18:11:34 1996 f_nisdn_o_auth_orig_att2 Page 7 of 50 asp_result->ret_action = CALS_ERR_IN_PROCESSING; 376 2 asp_result->event_generated = AIN_USR_DEF_0_ERROR; 377 1 ) 378 1 return (vi_return) ; 379 Thu Jun 27 18: 11:34 1996 NlSDN_orig_pics.c 7 Page 7 of 50 Thu Jun 27 18:11:34 1996 f nisdn o coll infoO Page 9 of 50 if (vι_return == FAIL) ( trFail ("NISD :0_COLL_INFO PIC SUBO failed, CS : %d, CLEG : %d, BCSM: %d" , asp_call_data->bcsm_hdr . cs_ιd, asp_call_data->bcsm_hdr . cleg_ιd, asp_call_data->bcsm_hdr .bcsm_ιdl ; asp_result->ret_act on = CALS_ERR_IN_PROCESSING; asp_result->event_generated = AIN_UΞR_DEF_0_ERROR; ) return (vι_return) ; Thu Jun 27 18:11 :34 1996 NISDN_ong_pics.c 9 Page 9 of 50 Thu Jun 27 18: 11:34 1996 nιsdn_o_coll_jnfol Page 10 of 50 t £_niβdn_o_coll_in£ol (CALS_BCSM_POI T_S *asp_curr_pt , CALS_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_S *aεp_call_data, bcp_msg_t *asp_msg) BCM_CALL_DATA_S *vsp_bcm_call_data; byte_t vb_event int vι_return = int fcn_ret; trinfo CNISDN: > O_COLL_INF0 PIC SUBl.CS : »d, CLEG:%d. BCSM: %d" , asp_call_data->bcsm_hdr . cs_ιd, asp_call_data->bcsm_hdr .cleg_ιd, asp_call_data->bcsm_hdr .bcsm_ιd) , vsp_bcm_call_data = (BCM_CALL_DATA_S * )asp_call_data; vεp_bcm_call_data->bcp_msg_ptr = asp_msg; switch (asp_msg->msg_type) ( case BCP_EXTRN_CS_MSG - εwitch (asp_msg->un . ιpc_msg .msgenv .msgtyp) ( case L_IBSS_SPM_MT : vb_event = f_proc_mεg_fr_ιbss (4 ( asp_msg- >un . ιpc_msg) , vsp_bcm_ cal l_data ) , switch (vb_event ) ( case L_BCMevIBSS_DIGITS : case L_BCMevIBSS_DIGITS_ERR : if ( ( fcn_ret = f_bcm_oproc7 (vsp_bcm_cal l_data ) ) == 0 ) ( asp_result->ret_actιon = CALS_EXIT_PIC , asp_result->event_generated = AIN_0_INFORMATION_COLLECTED; vι_return = SUCCESS; elεe if i cn ret 1) { asp_result->ret_actιon - CALS_EXIT_PIC, asp_reεult->event_generated = AIN_0_COLLECT_TIMEOUT; vι_return = SUCCESS; ) break ; case L_BCMevIBSS_RELEASE: asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_0_ABANDON, vι_return = SUCCESS; break; ) break; case L_CONS_SPM_MT : vb_event = f_proc_msg_fr_cons (4 (asp_msg->un. ιpc_msg) , vsp_bcm_call_data) ; switch (vb_event) { case L_BCMevCONS_OOS_STATE : asp_result->ret_action = CALΞ_EXIT_PIC, asp_result->event_generated = AIN_0_ABANDON, vι_return = SUCCESS; break; > ) } if (vι_return == FAIL) ( trinfo CNISDN: O_COLL_INF0 PIC SUBl failed, CS. %d, CLEG:%d, BCSM: %d" , asp_call_data->bcsm_hdr . cs_ιd, asp_call_data->bcsm_hdr . cleg_ιd, asp_call_data->bcεm_hdr .bcεm_ιdi , asp_reεult->ret_action = CALS_ERR_IN_PROCESΞING, asp_result->event_generated = AIN_USR_DEF_0_ERROR, return (vi return) ; Thu Jun 27 18:11:34 1996 NISDN_ong_pιcs.c 10 Page 10 of 50 -75- Thu Jun 27 18:11:34 1996 f_nιsdn_o_coll_ιnfo 1 Page 11 of 50 ) Thu Jun 27 18:11:34 1996 NISDN_oπg_pιcs.c 11 Page 11 of 50 Thu Jun 27 18:11 :34 1996 f_nιsdn_o_analyze_ιnfo Page 12 of 50 * * * * * * * Name Synopsis Description Author Da te 1st released Input parameters Return value Revision history * Da te Owner Description *** * * * * * * * * * * * int f_πiβdn_o__nalyzβ_in£o (CALS_BCSM_POINT_S -asp_curr_pt , CALS_BCSM_FUNC_RET_S *asp_resul , CALS_BCSM_INFO_S *asp_call_data, bcp_msg_t *asp_msg) BCM_CALL_DATA_S *vεp_bcm_cal l_data; byte_t vb_event ; int vι_return = FAIL ; int fcn_ret, trInfo CNISDN . > 0_ANALYZE_INFO PIC, CS : %d , CLEG : %d. BCSM ■ %d" . aεp_call_data->bcεm_hdr . cs_ιd, asp_call_data->bcsm_hdr . cleg_ιd, asp_call_data->bcsm_hdr .bcsm_ιd) , vsp_bcm_call_data = (BCM_CALL_DATA_S * ) asp_call_data, vsp_bcm_cal l_data->bcp_msg_ptr = asp_msg , switch (asp_msg->msg_type) ( case BCP_EVENT_MSG: if (asp_msg->un.event_msg.event_generated == AIN_0_INF0RMATI0N_COLLECTED) ( if ( (fcn_ret = f_bcm_oprocβ (vsp_bcm_call_data) == 0) asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_0_INFORMATION_ANALYZED; vι_return = SUCCESS; ) elεe if (fcn_ret == 1) ( asp_result->ret_actιon = CALS_EXIT_PIC, aεp_result->event_generated = AIN_0_INVALID_INFORMATION , vι_return = SUCCESS ; ) break; } brea ; case BCP_EXTRN_CS_MSG : εwitch (asp_msg->un. ιpc_msg.rasgenv.msgtyp) ( case L_IBΞΞ_SPM_MT: vb_event = f_proc_msg_fr_ιbss (4 (asp_msg->un. ιpc_msg) , vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevIBSS_RELEASE: asp_result->ret_actιon = CALS_E IT_PIC, aεp_result->event_generated = AIN_0_ABANDON, vι_return = SUCCESS, break; ) break; caεe L_CONS_SPM_MT . vb_event = f_proc_msg_f r_conε (4 ( aεp_msg- >un . ιpc_mεg) , vsp_bcm_call_data ) ; switch (vb event ) Thu Jun 2718:11:341996 NISDN_oπg_pιcs.c 12 Page 12 of 50 -77- Thu Jun 27 18:11:34 1996 f_nιsdn_o_analyze_ιnfo Page 13 of 50 case L_BCMevCONS_O0Ξ_STATE : asp_result->ret_actιon = CALS_EXIT_PIC; asp_result->event_generated = AIN_0_ABANDON, vι_return = SUCCESS; break; ) break We should not expect an INTERNAL ROUTE BUSY msg here... case BCP_INTRN_CS_MSG: vb_event = f_proc_msg_fr_bcm (4 (asp_msg->un. ιntrn_cs_msg) , vsp_bcm_call_data) ; switch (vb_event) L_BCMevTBCM_ROUTE_BUSY : asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_0_INVALID_INFORMATION; asp_result->event_generated = AIN_0_INF0RMATION_ANALYZED; vι_return = SUCCESS; break ; break; Kendif ) if (vι_return FAIL) ( trInfo("NISDN:O_ANALYZE_INF0 PIC failed, CS . %d, CLEG. %d, BCSM: *d" asp_call_data->bcsm_hdr . cs_ιd. asp_call_data-*bcsm_hdr . cleg_ιd, asp_call_data->bcsm_hdr .bcsm_ιd) ; asp_result->ret_actιon = CALΞ_ERR_IN_PROCESSING; asp_result->event_generated = AIN_USR_DEF_0_ERROR, ) return (vι_return) ; Thu Jun 27 18:11:34 1996 NISDN_oπg_pιcs.c 13 Page 3 of 50 Thu Jun 2718:11:341996 f nιsdn_o_select_route Page 14 of 50 ******** ******* ******* Name Synopsis Description Author Date 1st released Input parameters Return value Revision history * Date Owner Description ************ ********* int f_niadn_o_aalact_routa (CALS_BCSM_POINT_S *asp_curr_p , CALS_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INF0_S *asp_call_data, bcp_mεg_t *asp_msg) BCM_CALL_DATA_S *vεp_bcm_call_data ; byte_t vb_event; int vi_return = FAIL; trinfo CNISDN: > 0_SELECT_ROUTE PIC, CS : %d, CLEG. %d, BCSM. %d" , asp_call_data->bcεm_hdr . cs_ιd, asp_call_data->bcsm_hdr . cleg_ιd, asp_call_da a->bcsm_hdr .bcsm_ιd) , vsp_bcm_call_data = (BCM_CALL_DATA_S * )asp_call_data, vsp_bcm_call_data->bcp_msg_ptr = aεp_msg; switch (aεp_msg->msg_type) ( case BCP_EVENT_MΞG. if (asp_msg->un.event_msg. event_generated == AIN_0_I FORMATION_ANAL ZED) ( asp_reεult->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_o_ROUTE_SELECTED; vι_return = SUCCESS; ) break ,- case BCP_EXTRN_CS_MSG: switch (asp_msg->un. ιpc_msg.mεgenv.msgtyp) ( case L_IBSS_ΞPM_MT. vb_event = f_proc_mεg_fr_ιbss (4 (asp_msg->un. ιpc_msg) , vsp_bcm„call_data) , switch (vb_event) ( case L_BCMevIBSS_RELEASE: asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_O_ABAND0N; vι_return = SUCCESS; brea ; } brea ; case L_CONS_SPM_MT: vb_event = f_proc_msg_fr_cons ( (asp_msg->un. ιpc_msg) , vsp_bcm_call_data) ; switch (vb_event) ( case L_BCMevC0NS_00Ξ_STATE : asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AI _0_ABANDON; vι_return = SUCCESS; break; ) if (vi_return == FAIL) ( 7 .? ; trFail CNISDN:0 SELECT ROUTE PIC failed. CS : *d, CLEG- »d . BCSM: %d" , Thu Jun 2718:11:341996 NISDN_ong_pιcs.c 14 Page 14 of 50 98/ -79- Thu Jun 27 18 11:34 1996 f_nιsdn_o_select_ route Page 15 of 50 730 asp_ca1l_data->bcsm_hdr . cs_ιd. 731 asp_call_data->bcεm_hdr .cleg_ιd, 732 asp_call_data->bcsm_hdr .bcsm_ιd) , 733 asp_result->ret_actιon = CALS_ERR_IN_PROCESSING, 734 asp_result->event_generated = AIN_USR_DEF_0_ERROR, 735 ) 736 return (vι_return) , 737 Thu Jun 27 18:11:34 1996 NISDN_ong_ριcs.c 15 Page 15 of 50 -81- Thu Jun 27 18-11.34 1996 f_nιsdn_o_aulh_call_setup Page 17 of 50 case L_BCMβvCONS_0OS_STATE asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_0_ABANDON, vι_return = SUCCESS, break, If (vι_return == FAIL) { trFail CNISDN.0_AUTH_CALL_SETUP PIC SUBO failed CS %d. CLEG. %d, BCSM %d", asp_call_data->bcsm_hdr cs_ιd, asp_call_data->bcsm_hdr cleg_ιd, asp_call_data->bcsm_hdr bcsm_ιd) asp_result->ret_actιon = CALΞ_ERR_IN_PROCESSING asp_result->event_generated = AIN_UΞR_DEF_0_ERROR, ) return (vι_return) ; Thu Jun 271811341996 NISDN_oπg_pιcs c 17 Page 17 of 50 Thu Jun 27 18:11:34 1996 f_nιsαn_o_send_callO Page 19 of 50 if (vι_return == FAIL) ( trFail CNISDN:0_SEND_CALL PIC SUBO failed, CS : %d, CLEG: %d, BCSM: %d" , asp_call_data->bcsm_hdr . cs_ιd, asp_call_data->bcsm_hdr . cleg_ιd, asp_call_data->bcsm_hdr -bcsm_id) ; f_bcm_oerror_handler (vsp_bcm_call_data) ; asp_result->ret_actιon = CALS_ERR_IN_PROCESΞING, asp_result->event_generated = AIN_USR_DEF_0_ERROR; } return (vι_return) ; Thu Jun 27 18:11:34 1996 NISDN_oπg_pιcs.c 19 Page 19 of 50 /07094 -84- Thu Jun 27 18:11:34 1996 f_nιsdπ o_send call! Page 20 of 50 int f_niadn_o_aβna_calll (CALS_BCΞM_POINT_S *asp_curr_pt , CALS_BCSM_FUNC_RET_S « asp_result , CALS_BCSM_INFO_S >asp_call_data, bcp_msg_t "aεp_msg) ( BCM_CALL_DATA_S * vsp_bcιrt_ca 1 l_da t a ; byte_t vb_event ; int vι_return = FAIL; t fcn_ret; trInfo CNISDN > 0_SEND_CALL PIC SUBl , CS . %d, CLEG : %d, BCSM - %d" , asp_call_data->bcsm_hdr . cs_ιd, asp_call_data- >bcsm_hdr . cleg_ιd , asp_cal l_data->bcsm_hdr , bcsm_ιd) , vsp_bcm_call_data = ( BCM_CALL_DATA_S * ) asp_call_data , vsp_bcm_cal l_data->bcp_msg_ptr = asp_msg, εwitch (asp_msg->msg_type ) ( case BCP_INTRN_CS_MSG : vb_event = f_proc_msg_fr_bcm ( (asp_msg- >un ιntrn_cs_msg) vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevTBCM_0_TERM_SEIZED, i f ( f_bcm_oprocl3 (vsp_bcm_call_data) 0) ( aεp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_0_TERM_SEIZED; vι_return = SUCCESS; ) break; case L_BCMevTBCM_RESRC_AVAIL: asp_reεult->ret_actιon = CALS_SUSPEND, vι_return = SUCCESS; break ; case L_BCMevTBCM_ROUTE_BUSY : asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_0_NETWORK_BUSY, vi_return = SUCCESS, break; caεe L_BCMevTBCM_0_CALLED_PARTY_BUSY : if ( f_bcm_oprocl6 (vsp_bcm_call_data) == 0) i asp_reεult->ret_actιon = CALS_EXIT_PIC, aεp_result->event_generated = AIN_0_CALLED_PARTY_BUSY, vι_return = SUCCESS, ) break; case L_BCMevTBCM_0_ANSWER . if ( f_bcm_oproc22 (vsp_bcm_call_data) == 0) ( asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_0_ANS ER, vι_return = SUCCESS; ) break ; caεe L_BCMevTBCM_SW_ERROR ■ asp_result->ret_actιon = CALΞ_EXIT_PIC, asp_result->event_generated = AIN_USR_DEF_0_ERR0R, vι_return = SUCCESS; break, ) break; case BCP_EXTRN_CS_MSG: switch (asp_msg->un. ιpc_msg.ιrιsgenv. sgtyp) ( case L_IBSS_SPM_MT : vb_event = f_proc_msg_fr_ιbss ( 4 ( asp_msg- >un . ιpc_msg) vsp_bcm_call_data) ; switch (vb_event ) ( i—t case L BCMevIBSS RELEASE : Thu Jun 27 18:11.34 1996 NISDN_orιg_pιcs.c 20 Page 20 of 50 -85- Thu Jun 27 18: 11:34 1996 f nisdn _o_send_call 1 Page 21 of 50 if (f_bcm_oproc42 (vsp„bcm_call_data) == 0) ( asp_reεult->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_0_ABANDON, vι_return = SUCCESS, ) break; ) break, case L_CONΞ_SPM_MT vb_event = f_proc_msg_fr_cons ( (asp_msg->un ιpc_msg), vsp_bcm_call_data) , switch (vb_event) { case L_BCMevCONS_O0S_STATE if ( _bcm_oproc42 (vsp_bcm_call_data) == 0) asp_reεult->ret_actιon = CALS_EXIT_PIC, asp_reεult->event_generated = AIN_0_ABANDON, vι_return = SUCCESS, ) break, ) i f (vι„return == FAIL) { trFail CNISDN 0_SEND_CALL PIC SUBl f ailed CS %d CLEG %d BCSM %d" asp_cal l_data->bcsm_hdr cs_ιd asp_call_data->bcsm_hdr cleg_ιd aεp_call_data->bcεm_hdr . bcsm_ιd) f_bcm_oerror_handler (vsp_bcm_call_data ) , asp_result->ret_actιon = CALS_ERR_IN_PROCESSING, asp_result->event_generated = AIN_USR_DEF_0_ERROR, ) return (vι_return) Thu Jun 27 18:11.34 1996 NISDN_ong_pιcs.c 21 Page 21 of 50 -87- Thu Jun 27 18:11:34 1996 f_nιsdn_o_alertιngO Page 23 of 50 ) break; case BCP_INTRN_CS_MSG: vb_event = f_proc_msg_fr_bcm ( (asp_msg->un. ιntrn_cs_msg) , vsp_bcm_call_data) ; switch (vb_event) ( case L_BCMevTBCM_SW_ERRO . asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_USR_DEF_0_ERR0R; vι_return = SUCCESS; break; me } if (vι_return == FAIL) ( trFail CNISDN.0_ALERTING PIC SUBO failed, CS : %d. CLEG: %d, BCSM: %d" asp_call_data->bcsm_hdr . cs_ιd, asp_call_data->bcsm_hdr . cleg_ιd, asp_call_data->bcsm_hdr .bcsm_ιd) , f_bcm_oerror_handler (vsp_bcm_call_data) ; asp_result->ret_actιon = CALS_ERR_IN_PROCESSING; l a aεp_result->event_generated = AIN_USP_DEF_0_ERROR, ) return (vι_return) Thu Jun 27 18: 11:34 1996 NISDN_oπg_pιcs.c 23 Page 23 of 50 / 70 ■ 88- T u Jun 27 18:11:34 1996 f_nιsdn_o_alertιng1 Page 24 of 50 int f_niβdn_o__lβrtingl (CALS_BCSM_POINT_S *asp_curr_pt , CALS_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_S *aεp_call_data, bcp_msg_t *asp_msg) ( BCM_CALL_DATA_S *vsp_bcm_cal l_data; byte_t vb_event; int vι_return = FAIL, trinfo CNISD : > 0_ALERTING PIC SUBl . CS : %d, CLEG : %d, BCSM : %d " , aεp_call_data->bcsm_hdr . cs_ιd, aεp_call_data->bcsm_hdr . cleg_ιd, asp_call_data->bcsm_hdr . bcsm_ιd ) , vεp_bcm_call_data = (BCM_CALL_DATA_S « ) asp_call_data , switch (asp_msg->msg_type) ( case BCP_INTRN_CS_MSG: vb_event = f_proc_msg_fr_bcm (4 ( asp_msg->un . ιntrn_cs_msg) , vεp_bcm_call_data) , switch (vb_event ) { case L_BCMevTBCM_0_ANSWE : if ( f_bcm_oρroc22 (vsp_bcm_call_data ) == 0 ) ( asp_result->ret_act on = CALS_EXIT_PIC, asp_result->event_generated = AIN_0_ANSWER, vι_return = SUCCESS; ) break; case L_BCMevTBCM_SW_ERROR . aεp_result->ret_actιon = CALS_EXIT__PIC, asp_result->event_generated = AIN_USR_DEF_o_ERROR, vι_return = SUCCESS, break; ) break ; case BCP_EXTRN_CS_MSG : switch (asp_msg->un. ιpc_msg.msgenv.mεgtyp) { case L_IBSS_SPM_MT : vb_event = f_proc_msg_fr_ιbss (4 (asp_msg->un. ιpc_msg) , vsp_bcm_call_data) ; switch (vb_event) ( case L_BCMevIBSS_RELEASE: if (f_bcm_oproc42 (vsp_bcm_call_data) == 0) ( asp_result->ret_actιon = CALS_E IT_PIC; asp_reεult->event_generated = AIN_0_ABANDON; vι_return = SUCCESS; ) break ; ) break,- case L_CONS_SPM_MT- vb_event = f_proc_msg_fr_cons (4 (asp_msg->un.ιpc_msg) , vεp_bcm_call_data) , switch (vb_event) { case L_BCMevCONΞ_OOS_STATE . if (f_bcm_oproc42 (vεp_bcm_call_data) 0) asp_result->ret_actιon = CALS_EXIT_PIC; asp_result->event_generated = AIN_0_ABANDON; vι_return = SUCCESS; ) break; case L_BCMevCONS_CONN_NACK . /* Error Handler "/ brea ; Thu Jun 27 18:11:34 1996 NISDN_oπg_pιcs.c 24 Page 24 of 50 -89- Thu Jun 27 18:11:34 1996 f_nιsdn_o_alertιng1 Page 25 of 50 break, case L_MEDS_SPM_MT- vb_event = f_proc_msg_fr_meds (4 (asp_msg->un ιpc_msg) , switch (vb_event) ( case L_BCMevMEDS_CONN_T0NE_NACK /* Error Handler */ break, ) if (vi return FAIL) ( trFail CNISDN 0_ALERTING PIC SUBl failed, CS %d CLEG . %d, BCSM: %d" asp_cal l_data->bcsm_hdr cs_ιd , asp_call_data->bcεm_hdr . cleg_ιd, aεp_call_data->bcsm_hdr bcsm_ιd) , f_bcm_oerror_handler (vsp_bcm_call_data ) , asp_result->ret_actιon = CALS_ERR_IN_PROCESSING, asp_result->event_generated = AIN_USR_DEF_0_ERROR, ) return (vι_return ) , Thu Jun 27 18:11 :34 1996 NISDN_ong_pιcs c 25 Page 25 of 50 Thu Jun 2718.11341996 f_nisdn_o_actιveO Page 26 of 50 ******************* Name Synop is Description Author Date 1st released Input parameters Return value Revision history Date Owner Description ******** ************* ********* int £_niβdπ_o_activβO (CALS_BCSM_POINT_S *aεp_curr_pt , CALS_BCSM_FUNC_RET_S *aεp_result CALS_BCSM_INFO_S » asp_call_data bcp__ιtιεg_t "asp_msg) BCM_CALL_DATA_S *vsp_bcm_cal l_data , byte_t vb_event, int vι_return = FAIL, int fcn_ret, trInfoCNISDN > 0_ACTIVE PIC SUBO.CΞ %d,CLEG %d,BCSM %d" aεp_call_data->bcεm_hdr cs_ιd aεp_call_data->bcsm_hdr cleg_ιd asp_call_data->bcsm_hdr .bcsm_ιd) , vsp_bcm_call_data = ( BCM_CALL_DATA_S * )asp_call_data vεp_bcm_call_data->bcp_msg_ptr = aεp_msg, switch (aεp_msg->msg_type) ( case BCP_EVENT_MSG if (asp_msg->un event_msg event_generated == AI _0_ANSWER) ( if ( (fcn_ret = f_bcm_oproc27 (vsp_bcm_call_data) ) == 0) ( asp_result->ret_actιon CALS_CONTINUE_W_INTERACT, vι_return = SUCCESS, ) else if (fcn_ret 1) ! asp_result->ret_actιon = CALS_SUΞPEND, vi return = SUCCESS, else if (asp_ sg->un.event_msg.event_generated == AIN_0_MID_CALL) ( aεp_result->ret_actιon = CALS_CONTINUE_ _INTERACT, aεp_reεult->pιc_subst = 2, vι_return = SUCCESS, ) Kendif break, case BCP_EXTRN_CS_MSG . switch (asp_msg->un ιpc_msg.msgenv msgtyp) { case L_IBSS_SPM_MT. vb_event = f_proc_msg_fr_ιbss ( (aεp_msg->un ιpc_mεg) vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevIBSS_RELEASE if (f_bcm_oproc43 (vsp_bcm_call_data) == 0) ( aεp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_0_DISCONNECT_CONTROLLING , vι_return = SUCCESS, Thu Jun 2718.11:341996 NISDN_oπg_pιcs.c 26 Page 26 of 50 Thu Jun 2718:11:341996 f rvsdno adiveO Page 27 of 50 break, ) break, case L_CONS_SPM_MT vb_event = f_proc_msg_fr_cons ( (asp_msg->un ιpc_mεg) vsp_bcm_call_data) , εwitch (vb_event) ( case L_BCMevCONS_OOΞ_STATE if (f_bcm_oproc43 (vsp_bcm_call_data) == 0) ( asp_result->ret_actιon = CALS_EXIT_PIC asp_result->event_generated = AIN_O_DISCONNECT_CONTR0LLING vι_return = SUCCESS break ) break, case L_MEDS_SPM_MT vb_event = f_proc_msg_fr_meds ( (asp_msg->un ιpc_msg) vεp_bcm_call_data) , switch (vb_even ) ( case L_BCMevMEDS_DISC_TONE_ACK if ( f_bcm_pproc26 (vsp_bcm_call_data) == 0) ( aεp_reεult->ret_actιon = CALS_C0NTINUE_W_lNTERACT, vι_return = SUCCESS ) break, caεe L_BCMevMEDS_DISC_TONE_NACK /* Error Handler */ break. ) ) break, case BCP_INTRN_CS_MSG vb_event = f_proc_msg_fr_bcm (4 (asp_msg->un mtrn_cs_msg) vsp_bcm_call_data) switch (vb_event) ( case L_BCMevTBCM_0_SUSPENDED asp_result->ret_actιon = CALS_EXIT_PIC asp_result->event_generated = AIN_0_SUSPENDED vι_return = SUCCESS, break, case L_BCMevTBCM_SW_ERROR asp_result->ret_actιon = CALS_EXIT_PIC asp_result->event_generated = AIN_USR_DEF_0_ERROR vι_return = SUCCESS break, ) i f (vι_return == FAIL) ( trFai l CNISDN 0_ACTIVE PIC SUBO fai led, CS %d CLEG %d BCSM %d" asp_call_data->bcsm_hdr cs_ιd asp_call_data->bcεm_hdr cleg_ιd asp_call_data->bcεm_hdr bcεm_ιd ) f_bcm_oerror_handler (vsp_bcm_cal l_data ) asp_result->ret_actιon = CALS_ERR_IN_PROCESSING, asp_result->event_generated = AIN_USR_DEF_0_ERROR return (vι_return ) , Thu Jun 27 18-11.34 1996 NISDN_oπg_pics c 27 Page 27 of 50 Thu Jun 27 18:11.34 1996 f_nιsdn_o_aclιve1 Page 28 of 50 1372 £_niβdn_o_aotivβl (CALS_BCSM_POINT_S *aεp_curr_pt , 1373 CALS_BCSM_FUNC_RET_S *asp_reεult, 1374 CALΞ_BCSM_INFO_≤ « asp_call_data 1375 bcp_msg_t *asp_mεg) 1376 1377 BCM_CALL_DATA_Ξ *vεp_bcm_cal l_data, 1378 byte_t vb_event, 1379 mt vι_return = FAIL; 1361 trInfo CNISDN > 0_ACTIVE PIC SUBl . CS . %d, CLEG %d. BCSM - %d" , 1382 aεp_call_data->bcsm_hdr cs_ιd 13 B3 aεp_call_data->bcsm_hdr cl eg_ιd 1384 asp_call_data->bcsm_hdr bcsm_ιd) , 1386 vsp_bcm_call_data = ( BCM_CALL_DATA_S * ) aεp_cal l_data 1387 vεp_bcm_call_data->bcp_msg_ptr = asp_msg, switch ( asp_msg->msg_type) ( caεe BCP_EXTRN_CS_MSG εwitch (asp_msg->un. ιpc_msg msgenv.msgtyp) ( case L_CONS_SPM_MT vb_event = f_proc_msg_fr_conε ( (asp_msg->un ιpc_msg) vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevCONS_CONN_ACK if ( f_bcm_oproc28 ( vεp_bcm_call_data) == 0) ( aεp_result->ret_actιon = CALS_CONTINUE_W_INTERACT, vι_return = SUCCESS, ) break, caεe L_BCMevCONS_CONN_NACK /• Error Handler '/ break, caεe L_BCMevCONS_OOS_ΞTATE if (f_bcm_oproc43 (vsp_bcm_call_data) == 0) ( asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_0_DISC0NNECT_C0NTROLLING, vι_return = SUCCESS, break. ) break, case L_IBSS_SPM_MT- vb_event = f_proc_msg_fr_ιbεs (4 (asp_msg->un ιpc_msg) vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevIBSS_RELEASE if ( f_bcm_oproc43 (vsp_bcm_call_data ) == 0 ) ( asp_result->ret_actιon = CALS_EXIT_PIC , asp_result- >event_generated = AIN__0_DISCONNECT_CONTROLLING vι_return = SUCCESS , ) break; ) break, ) break, case BCP_INTRN_CS_MSG . vb_event = f_proc_msg_fr_bcm (4(asp_msg->un ntrn_cε_msg) , vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevTBCM_S _ERROR asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_USR_DEF_0_ERROR , vι_return = SUCCESS; break, Thu Jun 27 18:11:34 1996 NISDN_ong_pιcs.c 28 Page 28 of 50 Thu Jun 2718:11:341996 f_nisdn_o_aclive1 Page 29 of 50 | case L_BCMevTBCM_0_SUSPENDED: asp_result->ret_actιon = CALS_EXIT_PIC; asp_result->event_generated = AlN_0_SUSPENDED; vι_return = SUCCESS ; break; if (vι_return == FAIL) ( trFail ("NISDN :0_ACTIVE PIC SUBl failed, CS : %d, CLEG : %d, BCS : %d " asp_call_data->bcεm_hdr . cε_ιd, aεp_call_da a->bcsm_hdr . cleg_ιd. asp_call_data - >bcsm_hdr . bcsm_ιd ) ; f_bcm_oerror_handler (vsp_bcm_call_data) , asp_result->ret_actιon = CALS_ERR_IN_PROCESSING, asp_result->event_generated = AIN_USR_DEF_o_ERROR, ) return (vι_return) Thu Jun 2718:11:341996 NISDN_orig_pics.c 29 Page 29 of 50 -9^4-- Thu Jun 271011341996 nisdn o_aclιve2 Pago 30 of 50 int f_nlnrln_o_octlvo2 (CΛLC_DCSM_POIirT_S • sp_ C urr_pt CALS_BCSM_rUNC_RET_S • αsp.result CΛLS_BCSM_II-IFO_S * αsp_cal l_dn t a bcp_msg_t "osp_m3gl BCM_CΛLI J _DATΛ_'3 " vsp_bc-n_ca 1 l_da 11 byte_t vh_event int vι_retuιιι 1 ΛIL trInfoCNISDN > 0_ΛCTIVX PIC ΞUB2 CS %d CLEG Id !)ι_SM 1 " asp_call_data->bcsm_hdr cs_ιd asp_call_data->bcsm_hdr cleg id asp_ca 1 l_da a - >bcsm_hdr bc-π_ 1 d ) vsp_bcm_call_data = (BC11_CΛLL_DATA_S * ) a-p_cdl l_dot a vsp_bcn_call_daLa->bcp_msg_ptι - asp_m^g switch (asp_τi3g- j τncg_type) ( case BCP_EXTRN_CS_MS swi c (asp_msg->un ιpc_πsg msgcnv msgtyp) ( case L_1BΞS_SPM_MT vb_eve-ιt - f_proc_msg_f-_ιbs , ϊ (t (asp_msg-->un ipc_msg) vsp_bcm call_dι a) switch (vb_αvent) ( case L_BCMevIBSS_ΛIιSV»πP_LRK /* Error Handler • / break, case L_BCMevIDSS_RDLEΛSE if ( £_bcm_oprod3 ( vsp_bcm_cal l_da_i ) - 0) ( asρ_resul t->rc _act ion CA I 11 I ic a-jp_result->evtnt_cjeneιatcc l Ol CO J IΓΓ CON TROLL IMC, vι_return = SUCCESS ) break case L_BCMevIBS5_FLΛSl' asp_result->ret_actιon = asp_rcsult->evcnt_gcnerated ΛI _o_ ID c\ -. vι_return - SUCCESS ) breaV case L_CONS_SPM_MT vb_evcnL = f_proc_m ,g_£r_conc (4 (asp_m_.cj- >\. n ι c_Ujgl switch (vb_event) ( case L_BCMevCONS_OOS_STΛTL if ( f_bcm_oprocl (vsp_bcm call_diι. ) )) ( asp_result->rct_actιon CΛLS_L I !_ΓIΓ asp_rosult->eve"it_genera cd ΛIN_0_DISC0N.1ECT_C0NTR0LLIIIG vι_return = SUCCESS ) ) ) break case BCP_INTRN_CS_M5G vo_ even - £_proc_msg_ r_bcn (4 (asp_msg->u i ιntrn_cs_nscj) vsp_bcm_c 1 l_data ) s«»tch (vb_evcnL) case L_BCMcvTBCtl_0_SUSPENDED asp_result->ret_actιon = CALS_r .IT_PIC asp_rcsult->event_generat_ed - ΛIN_0_5U5PΣ NDI D vι_return - SUCCLSS break case L_BCMevTBCM_SW_ERROP asp_result->ret_actιon = CΛLS_E'.IT_PIC asp_rosult->evenl_cιenerated = ΛIN_UΓR_DCI _0_CRROR vι_return = SUCCESS _i_i_ break., . Thu Jun 271811341996 NISDN_orιg_pιcs c 30 Pago 30 of 50 Thu Jun 27 18:11.34 1996 f nisdn o aclιve2 Page 31 of 50 ) break; case BCP_EVΕNT_MSG if (asp_msg->un.event_mεg event_actιon -- CALS_EVENT_ACT_EXIT) { asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = asp_msg->un event_msg. event_generated, vi return = SUCCESS, else ( if (asp_msg->un event_msg event_generated == AI!!_0_MID_CALL) ( asp_result->ret_actιon = CALS_ΞUSPEND, vι_return = SUCCESS, ) if (vι_return FAIL) ( trFail ("NISDN- 0_ACTIVE PIC SUB2 failed, CS %d,CLEG %d,BCSM: d" asp_call_data->bcsm_hdr cs_ιd, asp_call_data->bcsm_hdr . cleg_ιd asp_call_data->bcsm_hdr bcsm_ιd) f_bcm_oerror_handler (vsp_bcm_call_data) , asp_result->ret_actιon = CALS_ERR_IN_PROCEΞΞING asp_result->event_generated = AIN_USR_DEF_0_ERROR, ) return (vι_return) , Thu Jun 27 18:11:34 1996 NISDN_oπg_prcs.c 31 Page 31 of 50 Thu Jun 27 18.11 34 1996 f_nιsdn_o_suspendθdO Page 32 of 50 | * * * * * * * Name Synopsi Description Author Date 1st released Input parameters Return value Revision history Date Owner Description * * * * * * * * ** * * * * * int £_nlsdn_o_suspβndβdO (CALS_BCSM_POINT_S *asp_curr_pt CALS_BCSM_FUNC_RET_S *aεp_result CALΞ_BCSM_INFO_S « asp_call_data bcp_msg_t *asp_msg) BCM_CALL_DATA_S *vsp_bcm_call_data byte_t vb_event, int vι_return = FAIL, trInfo CNISDN > 0_SUSPENDED PIC SUBO . CS %d CLEG %d BCSM %d" asp_call_data->bcsm_hdr cs_ιd asp_call_data->bcsm_hdr cleg_ιd asp_call_data->bcsm_hdr bcsm_ιd ) vsp_bcm_call_data = ( BCM_CALL_DATA_Ξ * ) asp_call_data vsp_bcm_call_data->bcp_msg_ptr = asp_msg switch ( asp_msg->τnsg_type) ( case BCP_EVENT_MSG if (asp_msg->un event_msg event_generated == AIN_0_SUSPENDED) ( asp_result->ret_actιon = CALS_C0NTINUE_ _INTERACT vι_return = SUCCESS, ) break case BCP_EXTRN_CS_MSG switch (asp_msg->un ιpc_msg msgenv msgtyp) ( case L_IBSS_SPM_MT vb_event = f_proc_msg_fr_ιbss (& (asp_msg->un ιpc_msg) vsp_bcm_cal l_data ) switch (vb_event) { case L_BCMevIBSS_RELEASE if ( f_bcm_oproc43 (vsp_bcm_call_data) 0) asp_result->ret_actιon = CALΞ_EXIT_PIC asp_result->event_generated = AIN_0_DIΞCONNECT_CONTROLLING, vι_return = SUCCESS, ) break, case L_BCMevIBSS_FLAΞH asp_result->ret_actιon = CALS_SUSPEND, v _return = SUCCESS break, ) break, case L_CONS_SPM_MT vb_event = f_proc_msg_fr_cons (& (asp_msg->un ιpc_msg) vsp_bcm_ca11_data) switch (vb_event) { case L_BCMevCONS_OOS_STATE if ( f_bcm_oproc4 (vsp_bcm_call_data) == 0 ) ( asp_result->ret_actιon = CALS_EXIT_PIC _____ asp result->event generated = ATN O DISCONNECT CONTROLLING . Thu Jun 27 18.11 34 1996 NISDN_origj)ics c 32 Page 32 of 50 Thu Jun 27 18:11:34 1996 f_nιsdn_o_suspendedO Page 33 of 50 vι_return SUCCESS ; ) } break, case BCP_INTRN_CS_MSG : vb_event = f_proc_msg_fr_bcm (£. (asp_msg->un. ιntrn_cs_msg) , vsp_bcm_call_data) ; switch (vb_event) ( case L_BCMevTBCM_S _ERROR asp_result->ret_actιon CALS_EXIT_PIC, asp_result->event_generated AIN_USR_DEF_0_ERROR , vι_return = SUCCESS; > ) if (vι_return == FAIL) ( trFail CNISDN :0_SUSPENDED PIC SUBO failed, CS : %d,CLEG- %d, BCSM:%d" asp_call_data->bcεm_hdr cs_ιd, asp_call_data->bcsm_hdr .cleg_ιd, asp_call_data->bcsm_hdr .bcsm_ιd) ; f_bcm_oerror_handler (vsp_bcm_call_data) ; asp_result->ret_actιon = CALS_ERR_IN_PROCESSING, asp_result->event_generated = AIN_USR_DEF_0_ERROR ) return (vι_return) , Thu Jun 27 18:11 :34 1996 NISDN_orig_pιcs.c 33 Page 33 of 50 Thu Jun 27 18:11:34 1996 f_nisdn_o_suspended1 Page 34 of 50 int f_ni«dn_o_«uspβndedl (CALS_BCSM_POINT_S *asp_curr_p , CALS_BCSM_FUNC_RET_S *asp_result. CALS_BCSM_INFO_S *asp_call_data, bcp_msg_t *asp_msg) BCM_CALL_DATA_S *vsp_bcm_call_data ; byte_t vb_event; int vι_return = FAIL, trinfo CNISDN: > 0_SUSPENDED PIC SUBl, CS :%d, CLEG: d, BCSM: %d" , asp_call_data->bcsm_hdr .cs_ιd, asp_call_data->bcεm_hdr .cleg_ιd, asp_call_data->bcsm_hdr . bcsm_ιd) ,- vsp_bcm_call_data = (BCM_CALL_DATA_S *)asp_call_data, vsp_bcm_call_data->bcp_msg_ptr = asp_msg, switch (asp_msg->msg_type) { case BCP_INTRN_CS_MSG : vb_event = f_proc_msg_fr_bcm (& (asp_msg->un . ιntrn_cs_msg) , vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevTBCM_0_DISC_PASSIVE: asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_0_DISCONNECT_PASSIVE; vι_return = SUCCESS; break; case L_BCMevTBCM_CALLED_PARTY_RECON : / • NOT IMPLEMENTED */ asp_result->ret_actιon = CALS_SUΞPEND, break; case L_BCMevTBCM_SW_ERROR : asp_result->ret_action = CALS_EXIT_PIC, asp_result->event_generated = AIN_USR_DEF_O_ERR0R; vι_return = SUCCESS; break ,- ) break; case BCP_EXTRN_CS_MSG: switch (asp_msg->un . ιpc_msg.msgenv.msgtyp) ( case L_IBSS_SPM_MT: vb_event = f_proc_msg_fr_ιbss (& (asp_msg->un ιpc_msg) , vsp_bcm_call_data) ,- switch (vb_even ) ( case L_BCMevIBSΞ_RELEASE : if ( f_bcm_oproc43 (vsp_bcm_call_data) == 0) ( asp_reεult->ret_action = CALS_EXIT_PIC; asp_reεult->event_generated = AIN_0_DISCONNECT_CONTROLLING; vi_return = SUCCESS; ) break; case L_BCMevIBSS_FLASH: asp_result->ret_actιon = CALS_SUΞPEND, vi_return = SUCCESS; break; ) break ; case L_CONΞ_SPM_MT: vb_event = f_proc_msg_fr_cons (& (asp_msg->un. ιpc_msg) , vsp_bcm_call_data) ; switch (vb_event) ( case L_BCMevCONS_O0S_STATE : if (f_bcm_oproc43 (vsp_bcm_call_data) == 0) { asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_0_DISCONNECT_CONTROLLING; - • '17 vi return = SUCCESS: Thu Jun 27 18:11:34 1996 NISDN_oπg_pics.c 34 Page 34 of 50 Thu Jun 27 18:11:34 1996 f_nιsdn_o_suspended1 Page 35 of 50 ) ) break; case BCP_EVENT_MSG : if (asp_msg->un.event_msg.event_actιon == CALS_EVENT_ACT_EXIT) ( asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = asp_msg->un . event_msg . event_generate ; vι_return = SUCCESS ; ) if (vι_return == FAIL) { trFail (" ISDN :0_SUSPENDED PIC SUBl failed, CS : %d , CLEG : %d , BCS : %d" asp_call_data->bcsm_hdr . cs id. asp_call_data->bcsm_hdr . cleg_ιd, asp_call_data->bcsm_hdr .bcsm_ιd) ,- f_bcm_oerror_handler (vsp_bcm_call_data) ; asp_result->ret_actιon = CALS_ERR_IN_PROCESSING; asp_result->event_generated = AIN_USR JEF_0_ERROR; } return (vι_return) ; Thu Jun 27 18:11:34 1996 NISDN_orig_pιcs.c 35 Page 35 of 50 CTUS97/13998 -100- Thu Jun 2718:11:341996 f nlsdn o free deviceO Page 37 of 50 if (vι_return FAIL) ( trFail (" ISDN :0_FREE_DEVICE PIC SUBO failed, CS:%d,CLEG %d,BCSM:%d" asp_call_data->bcs-_hdr .cs_ιd, asp_cal l_data- >bcsm_hdr . cl eg_ιd , asp_ca 1 l_data- >bcsm_hdr . bcεm_ιd ) ; f_bcm_oerror_handler (vsp_bcm_call_data) , asp_result->ret_actιon = CALS_ERR_IN_PROCESSING; asp_reεult->event_generated = AIN_USR_DEF_0_ERROR, ) return (vι_return); Thu Jun 2718:11:341996 NISDN_ong_pιcs.c 37 Page 37 of 50 Thu Jun 27 18:11 :34 1996 f_nisdn_o_free_device1 Page 39 of 50 1934 return (vi_return) i 1935 Thu Jun 27 18:11:34 1996 NISDN_orig_piCS.C 39 Page 39 of 50 8/07094 -104- ThuJun2718:11:341996 f_nιsdn_o_exceplιon0 Page 40 of 50 **************** Name Synopsis Description Author Date 1st released Input parameters Return value Revision history Date Owner Description ************ int f_niacto_o_-uce«jptionO (CALS_BCSM_POINT_S *aεp_curr_pt, CALS_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_S *asp_call_data, bcp_msg_t *asp_msg) { BCM_CALL_DATA_S *vsp_bcm_call_data; byte_t vb_event; int vι_return = FAIL; trinfo ("NISDN. > 0_EXCEPTION PIC SUBO, CS : *d, CLEG. %d, BCSM %d" asp_cal l_data->bcsm_hdr . cs_ιd, asp_call_data->bcsm_hdr .cleg_ιd. asp_call_data->bcsm_bdr .bcsm_ιd) , vsp_bcm_call_data = (BCM_CALL_DATA_Ξ * ) asp_call_data vsp_bcm_call_data->bcp_msg_ptr = asp_msg; εwitch (asp_msg->msg_type) ( case BCP_EVENT_MSG: switch (asp_msg->un event_msg event_generated) ( case AIN_0_COLLECT_TIMEOUT case AIN_0_INVALID_INFORMATION case AIN_0_NET ORK_BUSY: case AIN_0_AUTHORIZATION_FAILURE : if ( f_bcm_oproc48 (vsp_bcm_call_data) == 0) ( asp_result->ret_actιon = CALS_CONTINUE_W_INTERACT, i return = SUCCESS, ) break; case AIN_0_CALLED_PARTY_BUSY: if (f_bcm_oproc49 (vsp_bcm_call_data) == 0) ( aεp_result->ret_actιon = CALS_CONTINUE_W_INTERACT, vi return = SUCCESS, ) break; ) break ; case BCP_INTRN_CS_MSG: vb_event = f_proc_msg_fr_bcm (i (asp_msg->un ιntrn_cs_msg) , vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevTBCM_S _ERRO : asp_result->ret_actιon = CALS_EXIT_PIC asp_result->event_generated = AIN_USR_DEF_0_ERROR , vι_return = SUCCESS; break; ) ) if (vι_return == FAIL) ( trFail CNISD -0_EXCEPTION PIC SUBO failed, CS. %d, CLEG: *d, BCSM- %d" , asp_cal l_data- >bcsm_hdr . cε_ιd , tni ... asp call data->bcsm hdr.cleα d. ThuJun 2718:11:341996 NISDN_ong_pιcs.c 40 Page 40 of 50 - 105- Thu Jun 27 18:11:34 1996 f_nιsdn_o_exceρtιonO Page 41 of 50 asp_call_data->bcsm_hdr . bcsm_ιd) , f_bcm_oerror_handler ( vsp_bcm_call_data) , asp_result->ret_act ιon = CALS_ERR_IN_PROCEΞSING, asp_resul t->event_generated - AIN_USR_DEF_0_ERROR, ) return (vι_return) , Thu Jun 27 18:11:34 1996 NISDN_oπg_pιcs.c 41 Page 41 of 50 Thu Jun 27 18:11:34 1996 f_nisdn_o_exceρtιon 1 Page 42 of 50 int £_niadι»_o_βxcβptionl (CALS_BCSM_POINT_S *asp_curr_pt , CALS_BCSM_FUNC_RET_S *asp_resul , CALS_BCSM_INFO_S *asp_call_data , bcp_msg_t *asp_msg) ( BCM_CALL_DATA_S *vsp_bcm_call_data ,- byte_t vb_event; int vi_return = FAIL; trinfo CNISD :> 0_EXCEPTION PIC SUBl , CS . %d, CLEG : %d, BCSM: %d" , asp_call_data->bcεm_hdr . cε_ιd, asp_call_data->bcsm_hdr .cleg_ιd, asp_call_data->bcsm_hdr .bcsm_ιd) , vsp_bcm_call_data = (BCM_CALL_DATA_S * )asp_call_data; vεp_bcπ_,call_data->bcp_msg_ptr = asp_msg; switch (asp_msg->msg_type) { case BCP_EXTRN_CS_MSG : switch (asp_msg->un. ιpc_msg.mεgenv. msgtyp) ( caεe L_IBSS_SPM_MT: vb_event = f_proc_msg_fr_ibss (i (asp_msg->un. ιpc_msg) vsp_bcm_call_data) ; switch (vb_event) ( case L_BCMevIBSS_RELEASE: aεp_reεult->ret_actιon = CALΞ_EXIT_PIC; asp_result->event_generated = AIN_USR_DEF_0_CHAN_RELEASED; vi_return = SUCCESS; break; case L_BCMevIBSS_FLASH : asp_result->ret_actιon = CALS_EXIT_PIC; asp_result->event_generated = AIN_0_MID_CALL, vi_return = SUCCESS; ) break; case L_CONS_SPM_MT: vb_event = f_proc_msg_fr_cons (4 (asp_msg->un. ιpc_msg) , vsp_bcm_call_data) ; switch (vb_event) { case L_BCMevCONS_OOΞ_STATE : asp_result->ret_actιon = CALS_EXIT_PIC; asp_result->event_generated = AIN_USR_DEF_0_CHAN_RELEASED; vi_return = SUCCESS; break; ) break; case L_MEDS_SPM_MT: vb_event = f_proc_msg_fr_meds (& (asp_msg->un. ιpc_msg) , vsp_bcm_call_data) ; switch (vb_event) ( case L_BCMevMEDS_CONN_T0NE_NACK : /* Error Handler */ brea ; ) break; caεe BCP_INTRN_CS_MSG: vb_event = f_proc_msg_ r_bcm ( 4 ( aεp_msg->un . ιntrn_cs_msg ) , vsp_bcm_call_data ) , switch (vb_event) { case L_BCMevTBCM_SW_ERROR asp_result->ret_actιon CALΞ_EXIT_PIC ; aεp_reεult->event_generated AIN USR_DEF_0_ERROR; vi_return = SUCCESS ; break; ) ) i f (vi return — FAIL) Thu Jun 27 18:11:341996 NISDN_orig_pιcs.c 42 Page 42 of 50 Thu Jun 27 18:11:34 1996 f_nιsdn_o_exceptιon1 Page 43 of 50 ( trFail CNISD :0_EXCEPTION PIC SUBl failed, CS. %d, CLEG: %d, BCSM: *d" asp_call_data->bcεm_hdr . cε_ιd, asp_call_data->bcsm_hdr .cleg_ιd, asp_call_data->bcεm_hdr .bcεm_ιd) ; f_bcm_oerror_handler (vsp_bcm__call_data) ; asp_result->ret_actιon = CALΞ_ERR_IN_PROCESSING; asp_reεult->event_generated = AIN_USR_DEF_0_ERROR, ) return (vι_return) ; Thu Jun 27 18:11 :34 1996 NISDN_oπg_pιcs.c 43 Page 43 of 50 8/07094 -108- -109- Thu Jun 27 18:11:34 996 f_nisdn_o_releaseO Page 45 of 50 if (vι_return FAIL) ( trFail ( "NISDN : 0_RELEASE PIC SUBO failed, CS : %d, CLEG : %d, BCSM: %d " aεp_call_data->bcsm_hdr . cs_ιd, asp_call_data->bcsm_hdr . cleg_ιd , asp_ca 1 l_data - >bcεm_hdr . bcsm_ιd ) ; f_bc~_oerror_handler (vsp_bαn_call_data ) ; aεp_result->ret_actιon = CALS_ERR_IN_PROCESSING, aεp_result->event_generated = AIN_USR_DEF_0_ERROR; } return (vι_return) ; Thu Jun 27 18:11:34 1996 NISDN_oπg_pιcs.c 45 Page 45 of 50 Thu Jun 27 18:11 :34 1996 f_nιsdn_o_release1 Page 46 of 50 int f_niadn_o_rβlβasβl (CALS_BCSM_POINT_S «asp_curr_pt , CALS_BCΞM_FUNC_RET_S *asp_resul , CALS_BCΞM_INFO_S *asp_cal l_data , bcp_msg_t *asp_msg) ( BCM_CALL_DATA_S *vsp_bcm_call_data; byte_t vb_event; int vι_return = FAIL, int fcn_ret; trinfo CNISDN. > 0_RELEASE PIC SUBl . CS : %d, CLEG : %d, BCSM: d" , asp_call_da a->bcsm_hdr ,cs_ιd asp_call_data->bcsm_hdr . cleg_ιd, asp_call_data->bcsm_hdr .bcsm_ιd) , vsp_bcm_call_data = (BCM_CALL_DATA_Ξ * ) sp_call_data, vsp_bcm_call_data->bcp_mεg_ptr = asp_msg, switch (asp_msg->msg_type) ( case BCP_EXTRN_CS_MSG: switch (asp_msg->un. ιpc_msg.msgenv.msgtyp) case L_IBSS_SPM_MT: vb_event = f_proc_msg_fr_ιbss (4 (asp_msg->un ιpc_mεg), vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevIBSS_REL_CNF asp_result->ret_actιon = CALS_SUSPEND, vι_return = SUCCESS; break; case L_BCMevIBSS_RELEASE. aεp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_USR_DEF_0_CHAN_RELEASED, vι_return = SUCCESS, break; case L_BCMevIBΞS_RELEASE_ERR. /* Error HAndler » / break ,- case L_BCMevIBSS_FLASH: asp_result->ret_actιon = CALS_ΞUSPEND, vι_return = SUCCESS, break; ) ) break; caεe BCP_INTRN_CS_MSG : vb_event = f_proc_mεg_fr_bcm 14 (asp_msg->un ιntrn_cs_msg) , vsp_bcm_call_data ) , switch (vb_event) ( case L_BCMevTBCM_SW_ERROR aεp_reεult->ret_actιon = CALS_EXIT_PIC ; aεp_result->event_generated = AIN_USR_DEF_0_ERROR , vι_return = SUCCESS , break; ) if (vι_return == FAIL ) ( trFail CNISDN : 0_RELEASE PIC SUBl failed , CS ■ %d, CLEG . id , BCSM: %d " , aεp_cal l_data- >bcsm_hdr . cs_ι , asp_call_da a->bcsm_hdr . cleg_ιd, asp_cal l_data- >bcεm_hdr . bcsm_ιd ) , f_bcm_oerror_handler (vsp_bcm_call_data) ; asp_result->ret_actlon = CALS_ERR_IN_PROCESSING . asp_result->event_generated = AIN_USR_DEF_0_ERRO , ) return (vι_return) ; Thu Jun 27 18:11:34 1996 NISDN_oπg_pics.c 46 Page 46 of 50 Thu Jun 27 18:11:34 1996 f_nιsdn_o_err_hndlerO Page 47 of 50 2265 * * * * * * * * * 2266 Name Synopsis Description Author Date 1st released Input parameters Return value Revision history Date Owner Description * * * * * * * * * £_niβdn_o_βrr_hndlβrO (CALΞ_BCSM_POINT_S *aεp_curr_pt , CALS_BCSM_FUNC_RET_S *aεp_reεult , CALS_BCΞM_INFO_S *asp_call_data, bcp_msg_t *asp_msg) BCM_CALL_DATA_S *vsp_bcm_call_data , byte_t vb_event, int vι_return = FAIL, trInfo CNISDN > 0_ERROR_HNDLER PIC SUBO . CS %d PLEG %d BCSM: %d" , asp_call_data->bcsm_hdr . cs_ιd, asp_call_data->bcsm_hdr pleg_ιd . asp_call_data->bcεm_hdr bcεm_ιd ) , vsp_bcm_call_data = ( BCM_CALL_DATA_S * ) asp_cal l_data, vsp_bcm_call_data->bcp_msg_ptr = asp_msg , switch (asp_mεg->mεg_type) { case BCP_EVENT_MSG: if (asp_msg->un event_mεg event_generated == AIN_UΞR_DEF_0_ERROR) ( if ( f_bcm_oproc52 (vsp_bcm_call_data) == 0) ( asp_result->ret_actιon = CALS_CONTINUE_W_INTERACT, vι_return = SUCCESS, ) ) break; case BCP_INTRN_CS_MSG: vb_event = f_proc_msg_fr_bcm (4 (asp_msg->un ιntrn_cs_mεg) , vεp_bcm_call_data) , switch (vb_event) ( case L_BCMevTBCM_SW_ERROR if (f_bcτn_oproc52 (vsp_bcm_call_data) == 0) asp_result->ret_actιon CALS_CONTINUE_ _INTERACT, vι_return = SUCCESS, ) break; ) if (vι_return == FAIL) ( /* If Error Handler PIC fails, */ trFail CNISDN. O_ERR0R_HNDLER PIC SUBO failed, CS . %d, PLEG. %d, BCSM: %d" asp_call_data->bcsm_hdr . cs_ιd, asp_call_data->bcεm_hdr .pleg_ιd, aεp_call_data->bcεm_hdr .bcεm_ιd) ; asp_result->ret_actιon = CALS_CONTINUE_ _INTERACT , } return (vι_return) ; Thu Jun 27 18:11:34 1996 NISDN_ong_pιcs.c 47 Page 47 of 50 -113- Thu Jun 27 18:11:34 1996 f_nιsdn_o_err_hndler1 Page 49 of 50 asp_call_da a->bcsm_hdr .bcsm_ιd) ; asp_result-?ret_actιon = CALS__SUSPEND; ) return (vι_return) ; Thu Jun 27 18:11:34 1996 NISDN_oπg_pιcs.c 49 Page 49 of 50 ThuJun 2718:11:341996 f_bcm_oerror_handler Page 50 of 50 ********** *************** ******** Name Synopsis Description Author Date 1st released Input parameters Return value Revision history Date Owner Description ****************** void £_bc-._oarror_haadlβr ( BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( bcp_msg_t *vs_bcp_mεg_ptr ,- trinfo ("LINE: (O] in oerror_handler, BCSM: %d" , a_bcm_call_data_ptr->common_data.bcεm_ιd) , /' need to inform the other side of the call that the originating side is clearing up. */ if ( (vs_bcp_msg_ptr = f_CALS_alloc_msgbuf ( ) ) == NULL) ( trFail CNISDN: (O)CALS alloc_msgbuf ERR: %d, BCSM: %d" , errno, a_bcm_call_data_ptr->common_data .bcεm_ιd) ; return ; ) vs_bcp_msg_ptr->ιnsg_type = BCP_INTRN_CS_MSG; vε_bcp_msg_ptr->un. ιn rn_cs_msg.orιg_bcsm_id = a_bcm_call_data_ptr->common_data . bcsm_ιd; vs_bcp_msg__ptr->un.intrn_cs_msg. ind_typ = BCM_ORIG_TERMmsgS _ERROR, if ( f_CALS_send_msg_to_peer (a_bcm_call_data_ptr->common_data ,pleg_ιd, vs_bcp_msg_ptr , S0FTWARE_ERR0R_PRIORITY) < 0) < trFail CNISDN: [O) CALS send_mεg_to_peer ERR- %d, BCSM: %d" , errno, a_bcm_call_data_ptr->common_data. bcεm_ιd) ; if ( f_CALS_free_msgbuf (vs_bcp_msg_ptr ) < 0) ( trFail CNISDN: CALS free_msgbuf failed"). ) Thu Jun 2718:11:341996 NISDN_orιg_pics.c 50 Page 50 of 50 Thu un 27 18:11 :44 1996 f nlsdn I null Page 2 of 30 Function Prototypes * * * * * * * * * * void f_bcm_terror_handler (BCM_CALL_DATA_S *a_bcm_call_data_ptr ) /* * * * * * * * * Name Synopsis Description Author Date 1st released Input parameters Return value Revision history Date Owner Description * * * * * * * int f_niad-_t_null (CΛLS_BCΞM_POINT_S *asp_curr_p , CALS_BCSM_FUNC_RET_S *asp_result. CALΞ_BCSM_INFO_S » asp_call_data , bcp_msg_t *asp_msg) BCM_CALL_DATA_S *vsp_bcm_call_data , byte_t vb_even ; int vι_return = FAIL; trinfo CNISDN: > T_NULL PIC, CS : %d, CLEG: %d, BCSM: *d" , aεp_call_data->bcεm_hdr .cε_ιd, aεp_call_data->bcsm_hdr .cleg_ιd, aεp_call_data->bcsm_hdr .bcεm_ιd) , vsp_bcm_call_data = (BCM_CALL_DATA_S • ) aεp_call_data , vsp_bcm_call_data->bcp_msg_ptr = asp_msg, switch (asp_msg->msg_type) ( caεe BCP_INTRN_CS_MSG: vb_event = f_proc_msg_fr_bcm (& (asp_msg->un ιntrn_cs_mεg) , vεp_bcm_call_data) , switch (vb_event) ( case L_BCMevOBCM_TERM_ATTEMPT : if (f_bcm_tprocl (vsp_bcm_call_data) == 0) aεp_result->ret_actιon = CALS_EXIT_PIC; asp_result->event_generated = AIN_T_TERM_ATTEMPT ,- vι_return = SUCCESS; ) brea ; ) if (vι_return == FAIL) ( trFail ("NISDN :T_NULL PIC failed, CS :%d, CLEG. %d, BCSM:%d' , asp_call_data->bcεm_hdr . cs_ιd, aεp_call_data->bcεm_hdr . cleg_ιd, asp_call_data->bcsm_hdr .bcsm_id) , f_bαn_terror_handler (vsp_bcm_call_data) ; asp_result->ret_actιon = CALS_ERR_IN_PROCESSING; aεp_reεult->event_generated = AIN_USR_DEF_T_ERROR, return (vi^eturn) , Thu Jun 27 18:11:44 1996 NISDNJerm_pics.c 2 Page 2 of 30 - 117- Thu Jun 27 18:11 :44 1996 f /iisdn t auth term Page 3 of 30 Wame Synopsis Description Author Date 1st released Input parameters Return value Revision history Dat Owner Description int £_niadn_t_auth_tβa-α (CALS_BCSM_POINT_S *asp_curr_pt, CALS_BCSM_FUNC_RET_S *asp_resul , CALS_BCSM_INFO_S * asp_cal l_data , bcp_mεg_t "aεp_mεg) BCM_CALL_DATA_S *vsp_bcm_call_data ; byte_t vb_event; int vι_return = FAIL; int fcn_ret; trinfo CNISDN: > T_AUTH_TERM PIC, CS : %d, CLEG : %d. BCSM : d " , asp_call_da a->bcsm_hdr .cs_ιd, asp_call_data->bcsm_hdr .cleg_ιd, asp_call_data->bcsm_hdr . bcsm_ιd) ; vεp_bcm_call_data - (BCM_CALL_DATA_S * ) asp_cal l_data , vsp_bcm_call_data->bcp_mεg_ptr = asp_msg; switch (asp_msg->msg_type) ( case BCP_EVENT_MSG: if (asp_mεg->un. event_msg.event_generated == AIN_T_TERM_ATTEMPT) ( if ( (fcn_ret = f_bcm_tproc2 (vsp_bcm_call_data) ) == 0) ( aεp_result->ret_actιon = ■ CALS_EXIT_PIC, aεp_reεult->event_generated = AI _T_CALL_PRESENTED, vi_return = SUCCESS; ) else if (fcn_ret == 1) ( asp_result->ret_actlon = CALS_EXIT_PIC; aεp_reεult->event_generated = AIN_T_TERM_DENIED, vi_return = SUCCESS; } break; caεe BCP_INTRN_CS_MSG : vb_event = f_proc_msg_fr_bcm (4 (asp_msg->un. ιntrn_cs_msg) vεp_bcm_call_data) ; εwitch (vb_event) case L_BCMevOBCM_T_ABANDON: asp_reεult->ret_action = CALS_E I _PIC; asp_result->event_generated = AI _T_ABANDON; vi_return = SUCCESS; break; case L_BCMevOBCM_SW_ERROR: asp_result->ret_actιon = CALS_EXIT_PIC; asp_result->event_generated = AIN_USR_DEF_T_ERROR; vι_return = SUCCESS; break; } if (vι_return == FAIL) ( trFail ("NISDN:T_AUTH_TERM PIC failed, CS: %d, CLEG: %d, BCSM: %d" , ____ asp call data->bcsm hdr.cs id. Thu Jun 27 18:11:44 1996 NISDN erm_pics.c 3 Page 3 of 30 Thu Jun 27 18:11:44 1996 f_nisdn_t„authjerm Page 4 of 30 aεp_call_data->bcεm_hdr . cleg_ιd, asp_call_data-'-bcsm_hdr . bcsm_ d) ; f_bcm_terror_handler (vεp_bcm_cal l_data) , asp_result->ret_actιon = CALS_ERR_IN_PROCESSING, asp_result->event_generated = AIN_USR_DEF_T_ERROR, ) return (v _return) , Thu Jun 27 18:11:44 1996 NISDN_term_pιcs.c 4 Page 4 of 30 - 119- Thu Jun 27 18:11:44 1996 f_nιsdn_t_sel_facιlιtyO Page 5 of 30 Name Synopsis Description Author Date 1st released Input parameters Return value Revision history Owner Description * * * * * * * * * int £_niadn_t_sβl_facllityO (CALS_BCSM_POINT_S *asp_curr_pt, CALS_BCSM_FUNC_RET_Ξ *aεp_result, CALS_BCSM_INFO_S *asp_call_data, bcp_msg_t *asp_msg) BCM_CALL_DATA_S *vsp_bcm_call_data ; byte_t vb_event; int vι_return = FAIL ; trInfo CNISDN . ? T_SELECT_FAC PIC SUBO , CS . %d , CLEG : %d, BCSM : %d" , asp_call_data->bcsm_hdr . cs_ιd , asp_call_data- >bcsm_hdr . cleg_ιd. aεp_call_data->bcsm_bdr . bcsm_ιd) , vsp_bcm_call_data = ( BCM_CALL_DATA_S * ) asp_call_data ; vεp_bcm_call_data->bcp_mεg_ptr = asp_mεg , switch ( aεp_mεg~>mεg_type ) ( caεe BCP_EVENT_MSG : i f ( asp_msg->un . event_msg . event_generated == AIN_T_CALL_PRESENTED) ( if ( f_bcm_tproc3 (vsp_bcm_call_data ) == 0 ) ( asp_result->ret_actιon = CALS_CONTINUE_W_INTERACT; vι_return = SUCCESS; } ) break; caεe BCP_INTRN_CS_MSG: vb_event = f_proc_mεg_fr_bcm (4 (asp_msg->un. ιntrn_cs_msg) , vεp_bcm_call_data) ; εwitch (vb_event) case L_BCMevOBCM_T_ABANDON: aεp_result->ret_actιon = CALS_EXIT_PIC; asp_result->event_generated = AIN_T_ABANDON; vι_return = SUCCESS; break; case L_BCMevOBCM_≤W_ERR0R: asp_result->ret_actlon = CALS_EXIT_PIC; aεp_result->event_generated = AIN_UΞR_DEF_T_ERROR; vι_return = SUCCESS ; brea ; if (vi_return == FAIL) ( trFail CNISDN:T_SELECT_FAC PIC SUBO failed, CS: %d, CLEG: %d, BCSM: %d" asρ_call_data->bcsm_hdr .cε_ιd, asp_call_data->bcsm_hdr . cleg_ιd, asp_call_data->bcsm_hdr . bcsm_ιd) , f_bcm_terror_handler (vsp_bcm_call_data) ,- aεp_reεult- ret_actιon = CALS_ERR_IN_PROCESSING; asp_result->event_generated = AIN_USR_DEF_T_ERROR; ) return (vi return) .- Thu Jun 27 18:11:44 1996 NISDN_lerm_pιcs.c 5 Page 5 of 30 ThuJun2718:11:441996 f_nisdn _sel_facilityO Page 6 of 30 > Thu Jun 2718:11:441996 NISDN_tenm_pics.c 6 Page 6 of 30 98/07094 - 121- Thu Jun 27 18:11:44 1996 f_nιsdn_t_sel_faαlιty1 Page 7 of 30 int f_niadn_t_ββl_£acilityl (CALS_BCSM_POINT_S « asp_curr_pt , CALS_BCSM_FUNC_RET_S *asp_result. CALS_BCSM__INFO_S *asp_call_data, bcp_msg_t *asp_mεg) BCM_CALL_DATA_S *vεp_bcm_cal l_data ,- byte_t vb_event, int vι_return = FAIL; trInfo CNISDN: > T_SELECT_FAC PIC SUBl , CS • %d, CLEG: %d. BCSM. %d" asp_call_data->bcsm_hdr . cε_ιd, asp_call_data->bcsm_hd . cleg_ιd , asp_call_data->bcsm_hd . bcsm_ιd) , vsp_bcm_call_data = ( BCM_CALL_DATA_S * ) aεp_call_data , vsp_bcm_call_data->bcp_msg_ptr = asp_msg , εwitch (asp_msg->mεg_type) ( caεe BCP_EXTRN_CS_MSG : switch (asp_msg->un. ιpc_msg.msgenv. εgtyp) { case L_CONS_SPM_MT: vb_event = f_proc_msg_fr_cσns (4 (asρ_msg->un. ιpc_mεg) , vsp_bcm_call_data) ; switch (vb_event) ( case L_BCMevCONS_MARK_BUSY_ACK . if ( f_bcm_tproc4 (vsp_bcm_call_data) == 0) ( asp_reεult->ret_actιon = CALΞ_EXIT_PIC, asp_reεult->event_generated = AIN_T_TERM_P.ESOURCE_AVAILABLE, vi.return = SUCCESS; ) break, caεe L_BCMevCONS_MARK_BUSY_NACK if (f_bcm_tproc5 (vsp_bcm_call_data) = = 0) { asp_result->ret_actιon = CALS_EXIT_PIC asp_result->event_generated = AIN_τ_BUSY, vi return = SUCCESS; ) ) break; case BCP_INTRN_CS_MSG: vb_event = f_proe_mεg_fr_bcm ( (asp_msg->un . ιntrn_cs_msg) , vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevOBCM_T_ABANDON • asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_T_ABANDON, vι_return = SUCCESS; brea ; caεe L_BCMevOBCM_S _ERROR : asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_USR_DEF_T_ERROP , vι_return = SUCCESS; break; ) } if (vι_return == FAIL) ( trFail CNISDN :T_SELECT_FAC PIC SUBl failed, CS %d, CLEG: %d, BCSM: %d" asp_call_data->bcsm_hdr . cs_ιd, asp_call_data->bcsm_hdr ,cleg_ιd. asp_call_data->bcsm_hdr . bcεm_ιd) , f_bcm_terror_handle (vsp_bcm_call_data) , asp_reεult->ret_actιon = CALS_ERR_IN_PROCESSING, asp_result->event_generated = AIN_USR_DEF_T_ERROR, ) -221 retvrn (vi return) ; Thu Jun 27 18:11:44 1996 NISDN_lerm_pιcs.c 7 Page 7 of 30 • 122- ThuJun 2718:11.441996 f_nιsdn_l_sel_facιlιly1 Page 8 of 30 Thu Jun 2718:11:441996 NISDNjerm_pics.c 8 Page 8 of 30 Thu Jun 2718: 11441996 f_nιsdn_t_present_callO Page 9 of 30 ********* ******* Name Synopsis Description Author Date 1st released Input parameters Return value Revision history Date Owner Description ************ mt f_niβdn_t_prβaβnt_callO (CALS_BCSM_POINT_S *a≤p_curr_pt CALS_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_S *asp_cal l_data bcp_mεg_t *asp_mεg) ( BCM_CALL_DATA_S * vsp_bcm_call_data, byte_t vb_event, int vι_return = FAIL, trInfoCNISDN > T_PRESENT_CALL PIC SUBO.CS %d,CLEG %d,BCSM %d" asp_call_data->bcsm_hdr cε_ιd asp_call_data->bcsm_hdr cleg_ιd, aερ_call_data->bcεm_hdr bcsm_ιd) , vsp_bcm_call_data = ( BCM_CALL_DATA_S * ) asp_cal l_data, vsp_bcm_call_data->bcp_msg_ptr = asp_msg, switch (asp_rαsg->msg_type) ( caεe BCP_EVENT_MSG if (asp_msg->un event_msg event_generated == AIN_T_TERM_RESOURCE_AVAILABLE) ( if (f_bcm_tproc6 (vsp_bcm_call_data) == 0) ( asp_result->ret_actιon = CALS_CONTINUE_W_INTERACT, vι_return = SUCCESS, ) ) break, case BCP_INTRN_CS_MSG vb_event = f_proc_mεg_fr_bcm ( (asp_msg->un ιntrn_cs_msg) , vsp_bcm_call_data) switch (vb_event) ( caεe L_BCMevOBCM_T_ABANDON asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_T_ABANDON, vι_return = SUCCESS, brea ; case L_BCMevOBCM_SW_ERROR asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_USR_DEF_T_ERROR, vι_return = SUCCESS, break; ) break; ) if (vι_return == FAIL) ( trFail CNISDN:T_PRESENT_CALL PIC SUBO failed CS %d,CLEG %d.BCΞM %d" aεp_call_data->bcεm_hdr .cs_ιd, asp_call_data->bcsm_hdr .cleg_ιd, asp_call_da a->bcsm_hdr .bcsm_ιd) , f_bc _terror_handler (vεp_bcm_call_data) , asp_result->ret_actιon = CALΞ_ERR_IN_PROCESSING, ____ asp result->event generated = AIN USR DEF T ERROR. Thu Jun 2718-11:441996 NISDN_term_pιcs.c 9 Page 9 of 30 - 1?Λ- Thu Jun 27 18:11:44 1996 f_nisdn_t_present_callO Page 10 of 30 ) return (vi_return) ; Thu Jun 27 18:11:44 1996 NISDN_term_pιcs.c 10 Page 10 of 30 -127- Thu Jun 2718:11:441996 f_nisdn_t_alertιng1 Page 13 of 30 t £_niβdn_t_alβrtingl (CALS_BCSM_POINT_S * aεp_curr_pt , CALS_BCSM_FUNC_RET_S * asp_result , CALS_BCSM_INFO_S "asp_call_data , bcp_msg_t *asp_msg) BCM_CALL_DATA_S *vsp_bcm_cal l_data ; byte_t vb_event ; int vι_return = FAIL; trinfo ( "NISD :> T_ALERTING PIC SUBl , CS : %d, CLEG : %d, BCSM: %d" , asp_call_data->bcsm_hdr . cs_ιd, asp_call_data->bcεm_hdr.cleg_ιd, asρ_call_data->bcsm_hdr .bcεm_ιd) ; vsp_bcm_call_data = (BCM_CALL_DATA_S * ) asp_call_data; vsp_bcm_call_data->bcp_msg_ptr = asp_msg; switch (asp_msg->msg_type) ( caεe BCP_EXTRN_CS_MSG: εwitch (aεp_msg->un. ipc_msg.msgenv. sgtyp) ( case L_IBSS_SPM_MT: vb_event = f_proc_msg_fr_ιbss ( (asp_msg->un . ιpc_mεg) , vsp_bcm_call_data! ; εwitch (vb_event) case L_BCMevIBSS_ANSWER . if (f_bcm_tproclO (vsp_bcm_call_data) 0) asp_result->ret_actιon - CALS_EXIT_PIC; aεp_reεult->event_generated = AIN_T_ANSWER; Vi_return = SUCCESS; ) break; case BCP_INTRN_CS_MSG: vb_event = f_proc_msg_fr_bcm (4 (asp_msg->un . ιntrn_cs_msg) , vsp_bcm_cal l_data) , switch (vb_eventl ( case L_BCMevOBCM_T_ABANDO : asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_T_ABANDON, vι_return = SUCCESS; break; case L_BCMevOBCM_SW_ERROR . asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event__generated = AIN_USR_DEF_T_ERRO , vι_return = SUCCESS; break; ) break; ) if (vι_return == FAIL) ( trFail ("NISDN:T_ALERTING PIC SUBl failed, CS : %d, CLEG: %d, BCSM: %d" asp_call_data->bcsm_hdr . cs_ιd, asp_call_data->bcsm_hdr .cleg_ιd, asp_call_data->bcsm_hdr .bcsm_ιd) ; f_bcm_terror_handler (vsp_bcm_call_data) ; aεp_result->rec_actιon - CALS_ERR_IN_PROCESSING; asp_result->event_generated = AIN_USR_DEF_T_ERROR ; ) return (vι_return); Thu Jun 2718:11:441996 NISDN_term_pιcs.c 13 Page 13 of 30 Thu Jun 2718:11:441996 f nisdn l activeO Page 14 of 30 ********* ******** ******* Name Synopsis Description Author Date 1st released Input parameters Return value Revision history * Date Owner Description ****************** ********* f_niβdn_t_activβO (CALS_BCSM_POINT_S *asp_curr_pt , CALS_BCSM_FUNC_RET_S *asp_result, CALΞ_BCSM_INFO_S *asp_cal l_dat , bcp_mεg_t *asp_msg) BCM_CALL_DATA_S *vsp_bcm_call_data ; byte_t vb_event int vι_return = FAIL; trinfo CNISDN: > T_ACTIVE PIC SUBO , CS : %d, CLEG : %d, BCSM. %d' asp_call_data->bcsm_hdr . cr._ιd, asp_call_data->bcsm_hdr . cleg_ιd, asp_call_data->bcsm_hdr . bcsm_ιd) , vεp_bcm_call_data = (BCM_CALL_DATA_S * ) asp_cal l_data , vsp_bcm_call_data->bcp_mεg_ptr = aεp_msg; switch (asp_mεg->mεg_type) ( case BCP_EVENT_MSG: if (asp_msg->un . even _ms . event_gener ed AIN_T_ANSWER) ( asp_result->ret_actιon CALS_CONTI UE_ INTERACT, vi.return = SUCCESS; break; caεe BCP_INTRN_CΞ_MΞG • vb_event = f_proc_msg_fr_bcm ( (asp_msg->un ιntrn_cs_msg) , vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevOBCM_T_DISC_PASSIVE: asp_result->ret_actιon = CALS_EXIT_PIC, aεp_result->event_generated = AIN_T_DISCONNECT„PAΞSIVE, vι_return = SUCCESS; brea ; caεe L_BCMevOBCM_SW_ERROR : aεp_result->ret_actιon = CALS_EXIT_PIC, asp_reεult->event_generated = AIN_USR_DEF_T_ERROR, vi_return = SUCCESS; break; ) break; ) if (vι_return == FAIL) { trFail ("NISDN :T_ACTIVE PIC SUBO failed, CS: %d, CLEG: %d, BCSM: %d" asp_call_data- >bcsm_hdr . cs_ιd , asp_call_data->bcsm_hdr .cleg_ιd, asp_call_da a->bcsm_hdr .bcsm_ιd) , f_bcm_terror_handler (vεp_bcm_call_data) ; aεp_result->ret_aCtιon = CALS_ERR_IN_PROCESSING, asp_result->event_generated = AIN_USR_DEF_τ_ERROR; ) return (vi_return) ; Thu Jun 2718:11:441996 NISDN_tβrm_pιcs.c 14 Page 14 of 30 Thu Jun 27 18-11 44 1996 f nisdn t activel Page 15 of 30 | int f_niβdn_t_activβl (CALS_BCSM_POINT_S *asp_curr_pt CALS_BCSM_FUNC_RET_S *aεp_result CALS_BCSM_INFO_S *asp_call_data bcp_mεg_t *aεp_msg) ( BCM_CALL_DATA_S *vsp_bcm_call_data , byte_t vb_event, int vι_return = FAIL, trinfo ("NISDN- > T_ACTIVE PIC SUBl.CS %d,CLEG %d BCSM %d\ asp_call_data->bcsm_hdr cs_ιd asp_call_data->bcsm_hdr cleg_ιd aεp_call_data->bcsm_hdr bcsm_ιd) vsp_bcm_call_data = (BCM_CALL_DATA_Ξ * ) asp_cal l_data vsp_bcm_call_data->bcp_msg_ptr = asp_msg, switch (aεp_mεg->msg_type) ( case BCP_EXTRN_CS_MSG: switch (asp_msg->un. ιpc_msg msgenv mεgtyp) ( case L_IBSS_SPM_MT vb_event = f_proc_msg_f r_ιbεs ( 4 ( asp_msg- >un ιpc_msg ) vsp_bcm_cal l_data ) εwitch (vb_event ) ( case L_BCMevIBSS_RELEASE if ( f_bcm_tprocl2 (vsp_bcm_call_data) == 0) { asp_result->ret_actιon = CALS_EXIT_PIC, asp_reεult->event_generated = AIN_T_SUSPENDED vι_return = SUCCESS, ) break, caεe L_BCMevIBSS_FLASH asp_result->ret_act on = CALS_EXIT_PIC asp_result->event_generated = AI _T_ ID_CALL vι_return = SUCCESS break, ) ) break, case BCP_INTRN_CS_MSG vb_event = f_proc_mεg_fr_bcm (4 (asp_msg->un ιntrn_cs_msg) vεp_bcm_cal l_data ) switch (vb_event) ! case L_BCMevOBCM_T_DISC_PASSIVE asp_result->ret_actιon = CALS_EXIT_PIC asp_result->event_generated = AIN_T_DISCONNECT_PASSIVE vι_return = SUCCESS, break, case L_BCMevOBCM_SW_ERROR asp_result->ret_action = CALS_EXIT_PIC, asp_result->event_generated = AIN_USR_DEF_T_ERROR, vι_return = SUCCESS break, ) brea ; caεe BCP_EVENT_MSG: if (asp_msg->un event_msg event_generated == AIN_T_MID_CALL) ( asp_result->ret_actιon = CALS_SUSPEND, vι_return = SUCCESS, ) i f (vι_return == FAIL) ( trFail CNISDN T_ACTIVE PIC SUBl failed, CS %d, CLEG %d, BCSM. %d" asp_call_data->bcsm_hdr cs_ιd , asp_cal l_data->bcsm_hdr cleg_ιd asp_call_data->bcsm_hdr . bcsm_ιd) , Thu Jun 27 18 11.44 1996 NtSDN erm_pιcs c 15 Page 15 of 30 Thu Jun 27 18:11:44 1996 1_nisdn_t_aclive1 Page 16 of 30 f_bcm_terror_handler (vsp_bcm_call_data) ; asp_result->ret_action = CALΞ_ERR_IN_PROCESSING; asp_reεult->event_generated = AIN_USR_DEF_T_ERROR; ) return (vi_return) ,- Thu Jun 27 18:11 :44 1996 NISDNJerm_pics.c 16 Page 16 of 30 Thu Jun 27 18:11:44 1996 f_nιsdn_t_suspendedO Page 17 of 30 /• * Warns * Synopsis * Description ' Author ' Date 1st released * Input parameters " Return value * Revision history Date Owner Description * * * * * * * * * * * * * * * * * * * * * * * * * * * .. / mt f_niβdn_t_βuspβndβdO (CALS_BCSM_POINT_S * asp_curr_pt , CALS_BCSM_FUNC_RET_S *asp_result . CALS_BCSM_INFO_S « asp_cal l_data, bcp_msg_t *asp_msg) ( BCM_CALL_DATA_S *vsp_bcm_call_data ; byte_t vb_event , int vι_return = FAIL, trInfo("NISDN:> T_SUSPENDED PIC SUBO , CS : %d. CLEG: %d, BCSM: %d" asp_call_data->bcsm_hdr cs_ιd, asp_call_data->bcsm_hdr . cleg_ιd, asp_call_data->bcsm_hdr bcεm_ιd) , vsp_bcm_call_data = (BCM_CALL_DATA_S * ) asp_call_data . vsp_bcm_call_data->bcp_mεg_ptr = asp_msg, εwitch (aεp_mεg->mεg_type) { case BCP_EVENT_MSG if (asp_msg->un.event_msg. event_generated AIN_T_SUΞPENDED) if ( f_bcm_tprocl4 (vsp_bcm_call_data) == 0) { asp_result->ret_actιon = CALS_CON INUE_W_INTERACT, vι_return = SUCCESS; ) ) break; case BCP_INTRN_CS_MSG vb_event = f_proc_msg_fr_bcm (4 (asp_msg->un. ιntrn_cs_msg) , vεp_bcm_call_data) , εwitch (vb_event! ( case L_BCMevOBCM_SW_ERRO • aεp_result->ret_actιon = CALΞ_EXIT_PIC, aεp_result->event_generated = AIN_UΞR_DEF_ _ERROR , vι_return = SUCCESS; break; ) ) if (vι_return -= FAIL) ( trFail CNISD : T_SUSPENDED PIC SUBO failed, CS : %d, CLEG - %d, BCSM : %d" aεp_call_data->bcsm_hdr . cε_ιd, aεp_call_data->bcsm_hdr . cleg_ιd, asp_call_data->bcsm_hdr . bcsm_ιd) , f_bcm_terror_handler (vsp_bcm_call_data ) ; asp_result->ret_actιon = CA S_ERR_IN_PROCESSING; asp_result->event_generated = AIN_USR_DEF_T_ERROR, ) return (vι_return ) ; Thu Jun 27 18:11:44 1996 NISDN_1erm_pιcs.c 17 Page 17 of 30 - 13-+- ι Thu Jun 27 18 11 44 1996 f_nιsdn_t_free_devιce1 Page 20 of 30 1045 mt £_niβd-_t_£r»β_dβvicβl ( CALS_BCSM_POINT_S *asp_curr_pt CALS_BCSM_FUNC_RET_S *asp_reεult CALS_BCSM_INFO_S * aεp_cal l_data bcp_msg_t * aεp_mε ) BCM_CALL_DATA_S *vεp_bcm_call_data , I 1051 byte_t vb_event , int vι_return = FAIL , I 1054 trInfo CNISDN > T_FREE_DEVICE PIC SUBl . CS %d CLEG %d BCSM %d" asp_cal l_data->bcsm_hdr cs_ιd asp_cal l_data->bcsm_hdr cleg_ιd asp_cal l_data->bcsm_hdr bcsm_ιd) vsp_bcm_call_data = ( BCM_CALL_DATA_S * ) asp_call_data vεp_bcm_call_data->bcp_msg_ptr = asp_msg , switch (asp_msg->msg_type) ( case BCP_EXTRN_CS_MSG switch (asp_msg->un ιpc_msg msgenv msgtyp) { case L_CONS_SPM_MT vb_event = f_proc_msg_fr_cons (4 (asp_msg->un ιpc_msg) , vsp_bcm_call_data) switch (vb_event) ( caεe L_BCMevCONS_MARK_IDLE_ACK asp_result->ret_actιon = CALS_EXIT_PIC, asp_result->event_generated = AIN_USR_DEF_T_DONE vι_return = SUCCESS break, case L_BCMevCONS_MARK_IDLE_NACK /* Call Error Handler */ break, ) break, ) break case BCP_INTRN_CS_MSG vb_event = f_proc_msg_fr_bcm (4 (asp_msg->un ιntrn_cs_msg) vsp_bcm_call_data) switch (vb_event) ( case L_BCMevOBCM_SW_ERROR asp_result->ret_actιon = CALS_SUSPEND, vι_return = SUCCESS break, ) break, case BCP_TIMER_MSG vb_event = f_proc_tιmer_msgs ( (CALS_TIMER_MSG_S * ) (asp_msg->un ιpc_msg data|0]) vsp_bcm_call_data) , switch (vb_event) { case L_BCMevTBCM_SUSPEND_TIMER if (f_CALS_delete_tιmer (vsp_bcm_call_data->cε term suspend_tιmer ) < 0) ( trFailCNISDN (T]CALS delete_tιmer ERR %d,BCSM-%d" errno, asp_call_data->bcsm_hdr bcsm_ιd) } asp_result->ret_actιon - CALΞ_SUSPEND vι_return = SUCCESS, break, ) if (vι_return == FAIL) ( trFail CNISDN T_FREE_DEVICE PIC SUBl failed, CS %d CLEG %d, BCSM %d" asp_call_data->bcsm_hdr cs_ιd asp_call_data->bcεm_hdr cleg_ιd 111? ,. 2 aεp cal l data->bcεm hdr .bcsm id) . Thu Jun 27 18.11 44 1996 NISDN_term_pιcs.c 20 Page 20 of 30 Thu Jun 27 18:11:44 1996 f nisdn_t_free_device1 Page 21 of 30 f_bcm_terror_handler (vsp_bcm_ca1l_data ) ; asp_result->ret_actιon = CALΞ_ERR_IN_PROCESSING; asp_result->event_generated = AIN_USR_DEF_T_ERRO ; ) return (vι_return) ; Thu Jun 27 18:11:44 1996 NISDN erm Dics.c 21 Page 21 of 30 Thu Jun 27 18:11:44 1996 f_nιsdn_t_releaseO Page 23 of 30 ) if (vι_return == FAIL) { trFail CNISDN . T_RELEASE PIC SUBO failed, CS : %d, CLEG %d, BCSM . %d" asp_call_data->bcsm_hdr . cs_ιd , asp_call_data->bcsm_hdr . cleg_ιd, asp_call_data->bcsm_hdr . bcsm_ιd) , f_bcm_terror_handler (vsp_bcm_call_data) , asp_result->ret_actιon = CALS_ERR_IN_PROCESSING, asp_result->event_generated = AIN_USR_DEF_T_ERROR, } return (vι_return) ; Thu Jun 27 18:11:44 1996 NISDN_term_pιcs.c 23 Page 23 of 30 -138- Thu Jun 27 18.11-44 1996 nιsdnj_release1 Page 24 of 30 int £_niadn_t_rβlβaaβl (CALS_BCSM_POINT_S *asp_curr_pt, CALS_BCSM_FUNC_RET_S *asp_result CALS_BCSM_INFO_S *asp_call_data bcp_msg_t *asp_msg) { BCM_CALL_DATA_S *vsp_bcm_ca1l_data, byte_t vb_event, int vι_return = FAIL , trInfo CNISDN > T_RELEASE PIC SUBl , CS . %d, CLEG . %d, BCSM %d" , asp_call_data->bcsm_hdr cs_ιd, asp_cal l_data->bcsm_hdr cleg_ιd asp_call_data->bcεm_hdr bcεm_ιd) vεp_bcm_call_data = ( BCM_CALL_DATA_S * ) asp_call_data, vsp_bcm_call_data->bcp_msg_ptr = asp_mεg , εwitch (aεp_mεg->mεg_type) ( caεe BCP_EXTRN_CS_MSG εwitch (asp_msg->un. ιpc_msg msgenv.msgtyp) ( caεe L_IBΞS_SPM_MT vb_event = f_proc_msg_fr_ιbss ( (asp_msg->un ιpc_msg) vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevIBSS_RELEASE asp_reεult->ret_actιon = CALS_EXIT_PIC asp_result->event_generated = AIN_USR_DEF_T_CHAN_RELEASED, vι_return = SUCCESS, break, case L_BCMevIBSS_RELEASE_ERR /* Call Error Handler */ break, case L_BCMevIBSS_REL_CNF case L_BCMevIBSS_FLASH asp_result->ret_actιon = CALS_SUSPEND vι_return = SUCCESS, break; ) ) break, caεe BCP_INTRN_CS_MSG vb_event = f_proc_mεg_fr_bcm (4 (asp_msg->un ιntrn_cs_mεg) vsp_bcm_cal l_data ) εwitch (vb_event) ( caεe L_BCMevOBCM_S _ERROR asp_result->ret_actιon = CALS_EXIT_PIC aεp_result->event_generated = AIN_USR_DEF_T_ERROR vι_return = SUCCESS, break, ) if (vι_return FAIL) ( trFail CNIΞDN:T_RELEASE PIC SUBl failed, CS . %d CLEG %d,BCSM %d" asp_call_data->bcεm_hdr cs_ιd aεp_call_data->bcεm_hdr cleg_ιd asp_call_data->bcsm_hdr bcsm_ιd) f_bcm_terror_handler (vsp_bcm_call_data) , asp_result->ret_actιon = CALS_ERR_IN_PROCESSING asp_result->event_generated = AIN_USR_DEF_T_ERROR ) return (vι_return) , Thu Jun 27 18. 1 44 1996 NISDN erm_pιcs c 24 Page 24 of 30 -140- Thu Jun 27 18:11:44 1996 f_nisdn_t_exceplιon Page 26 of 30 return (vi_return) ; Thu Jun 27 18:11:44 1996 NISDN_term_pιcs.c 26 Page 26 of 30 Thu Jun 27 18:11:44 1996 f_nιsdn_l_err_hndlerO Page 27 of 30 * * * * * * * * * * * * * * * * ** * * Name Synopsis Description Author Date 1st released Input parameters Return value Revision history * Date Owner Description int £_niβdn_t_βrr_hndlβrO (CALS_BCSM_POINT_S *asp_curr_pt , CALS_BCSM_FUNC_RET_S *asp_reεult, CALS_BCSM_INF0_Ξ * aεp_cal l_data, bcp_mεg_t *asp_msg) BCM_CALL_DATA_S *vsp_bcm_call_data; byte_t vb_event; int vι_return = FAIL; trinfo CNISDN :> T_ERR_HNDLER PIC SUBO, CS . %d, CLEG : %d, BCSM- %d" , asp_call_data->bcsm_hd .cs_ιd, aεp_call_data->bcsm_hdr -cleg_id. asp_call_data->bcεm_hdr .bcsm_ιd) ; vsp_bcm_call_data = (BCM_CALL_DATA_S * ) asp_call_data, vsp_bcm_call_data->bcp_msg_ptr = asp_msg; switch (asp_msg->msg_type) { case BCP_EVENT_MSG : if ( asp_msg->un . event_msg . even _generated AI _UΞR_DEF_T_ERROR) ( if (f_bcm_tproc28 (vsp_bcm_call_data) 0) ( asp_result->ret_actιon = CALS_CONTINUE_W_INTERACT; vι_return = SUCCESS; ) ) break,- caεe BCP_INTRN_CS_MSG: vb_event = f_j?roc_mεg_fr_bcm (4 (asp_msg->un. ιntrn_cs_msg) , vsp_bcm_call_data) , switch (vb_event) ( case L_BCMβvOBCM_SW_ERROR : if (f_bcm_tproc28 (vsp_bcm_call_data) == 0) ( asp_result->ret_actιon = CALS_CONTINUE_W_INTERACT; vι_return = SUCCESS; ) if (vι_return == FAIL) ( trFail ( "NISD :T_ERR_HNDLER PIC SUBO failed, CS :%d, CLEG :%d, BCS :%d" asp_call_data->bcsm_hdr .cs_ιd, asp_cal l_data->bcεm_hdr . cleg_ιd . asp_call_data->bcsm_hd .bcsm_ιd) ,- f_bcm_terror_handler (vsp_bcm_call_data) ; asp_result->ret_actιon = CALS_CONTINUE_ _INTERACT, ) return (vι_return) ; Thu Jun 27 18:11:44 1996 NISDN_term_pιcs.c 27 Page 27 of 30 Thu Jun 27 18:11:44 1996 f_nιsdn_t_err_hndler1 Page 28 of 30 int f_niβdn_t_βrr_hndlβrl (CALS_BCSM_POINT_S * asp_curr_pt , CALS_BCSM_FUNC_RET_S *asp_result. CALS_BCSM_INFO_S *asp_call_data, bcp_msg_t *asp_msg) BCM_CALL_DATA_S *vsp_bcm_call_data ; by e_t vb_event; int vι_return = FAIL, trInfo CNISDN. > T_ERR_HNDLER PIC SUBl . CS %d, CLEG %d, BCSM: %d' , asp_call_data->bcsm_hdr cs_ιd, asp_call_data->bcsm_hdr . cleg_ιd, aεp_cal l_data->bcεm_hdr bcsm_ιd) , vεp_bcm_call_data = ( BCM_CALL_DATA_S * ) asp_cal l_data vsp_bcm_cal l_data->bcp_msg_ptr = asp_msg , switch (asp_msg->msg_type ) ( case BCP_EXTRN_CS_MSG . switch (asp_msg->un. ιpc_msg msgenv msgtyp) ( caεe L_IBSS_SPM_MT: vb_event = f_proc_msg_fr_ιbss ( (asp_msg->un. ιpc_mεg) , vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevIBSS_REL_CNF : case L_BCMevIBSS_RELEASE_ERR aεp_result->ret_actιon = CALS_SUSPEND, vι_return = SUCCESS; break; case L_BCMevIBSS_RELEASE if (f_bαn_tproc26 (vsp_bcm_call_data) == 0) ( asp_result->ret_actιon = CALS_EXIT_PIC, asp_reεult->event_generated = AIN_USR_DEF_T_DONE, vι_return = SUCCESS, ) break; ) break; caεe L_CONS_SPM_MT. vb_event = f_proc_msg_fr_cons (4 (asp_msg->un ιpc_msg) , vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevCONS_OOS_STATE if (f_bcm_tproc26 (vsp_bcm_call_data) * «■ 0) { asp_result->ret_actιon = CALS_EXIT_PIC, aεp_result->event_generated = AIN_USR_DEF_τ_DONE , vι_return = SUCCESS; } brea ; ) } break; case BCP_INTRN_CS_MSG vb_event = f_proc_msg_fr_bcm ( (asp_msg->un. ιntrn_cs_msg) , vsp_bcm_call_data) , switch (vb_event) ( case L_BCMevOBCM_S _ERROR. asp_result->ret_actιon = CALS_SUSPEND, vι_return = SUCCESS; break, ) ) if (vι_return == FAIL) { trFail CNISDN. T_ERR_HNDLER PIC SUBl failed, CS %d, CLEG : %d, BCSM : %d" , asp_call_data->bcsm_hdr . cs_ιd, liti 2 asp call da a->bcsm hdr . cleα id. Thu Jun 27 18:1 .44 1996 NISDNJerm_pics.c 28 Page 28 of 30 Thu Jun 27 18:11:44 1996 f_nisdn_t_err_hndler1 Page 29 of 30 asp_call_data->bcsm_hdr .bcsm_id) ; f_bcm_terror_handler (vsp_bcm_call_data) ; asp_result->ret_action = CALS_ERR_IN_PROCESSING; asp_reεult->event_generated = AIN_USR_DEF_T_DONE; ) return (vi_return) ; Thu Jun 27 18:11:44 1996 NISDN_term_pics.c 29 Page 29 of 30 ThuJun2718:11-441996 Lbcm_terror_handler Page 30 of 30 /* ******* ********** ********* ' Name * Synopsis * Description * Author * Date 1st released * Input parameters ' Return value ' Revision history ' Date Owner Description *************** ******* ******** ********** ******* void £_bα-_tβrror_handlβr(BCM_CALL_DATA_ε *a_bcm_call_data_ptr) ( bcp_msg_t *vs_bcp_msg_ptr , trFailCNISDN. |T] in terror_handler ID=%d", a_bcm_call_data_ptr->common_data bcsm_ιd) need to inform the other side of the call that the terminating side is clearing up if ( (vε_bcp_msg_ptr = f_CALS_alloc_msgbuf ( ) ) == NULL) ( trFailCNISDN (O)CALS alloc_msgbuf ERR %d,BCSM %d" errno, a_bαn_call_data_ptr->common_data bcsm_ιd) , return, vs_bcp_msg_ptr->ιrιεg_type = BCP_INTRN_CS_MSG vs_bcp_msg_ptr->un mtrn_cs_msg orιg_bcsm_ιd = a_bcm_call_data_ptr->common_da a bcεm_ιd vs_bcp_msg_ptr->un ιπtrn_cε_msg md_typ = BCM_TERM_0RICmsgSW_ERROR, if ( f_CALS_send_mεg_to_peer (a_bcm_call_data_ptr->corrαnon_da a pleg_ιd vs_bcp_msg_ptr SOFTWARE_ERROR_PRI0RITY) < 0) ( trFailCNISDN (O)CALS send_msg_to_peer ERR %d,BCSM %d" errno a_bcm_call_data_ptr->common_data bcsm_ιd) , if ( f_CALS_free_msgbuf (vε_bcp_msg_ptr) < 0) ( trFail CNISDN. CALS free_msgbuf failed") Thu Jun 2718.11441996 NISDN_tβrm_pιcs.c 30 Page 30 of 30 Thu Jun 2718: 1:001996 Page 1 of 9 εtatic char rcsιd[ ]="$Id- NISDN_msg_proc . c , V 1.2 1996/05/09 13 50.08 demir Exp S Copyright (c) NewNet" *************** ******* ********* ******* ******** * Copyrigh t (c) NewNet, Inc. ' All rights reserved. This document contains confidential and proprietary information of NewNet and any reproduction, disclosure, or use in whole or m part is expressly prohibited, except as may be specifically authorized by prior written agreement or permission of NewNet VERSION SRevision. 1.2 $ DATE SDate: 1996/05/09 13:50:08 $ MODULE NAME SRCSfi 1 e ■ NISDN_msg_proc .c,v $ AUTHOR DESCRIPTION DATE 1st REL REV. HIST. * Date Owner Description 25 26 29 30 RESTRICTED RIGHTS LEGEND 31 Use, duplication, or disclosure by Government Is Subject to restrictions as set foith m subparagraph (c) (1) di) of the Rights in Technical Data and Computer Software clause at DEARS 252.227-7013 ******* ******* Hinclude <stdιo.h> Kinclude <εtdlιb.h> Hinclude <syε/tιme.h> Hinclude <apι.h> Hinclude <εccp_scpa.h> Hinclude <tcap.h> Hinclude <ADAP_G.h> Hinclude <SVS_G_types .h> Hinclude <SYS_G_access.h> Hinclude <SYS_G_msgtypeε . h> Hinclude <SYS_G_mgmt_states .h> Hinclude <Db.h> 53 Hinclude <DB_G_feature_defε .h> 54 Hinclude <DB_G_group.h> Hinclude <AIN02_G_oper .h> Hinclude <CALS_G_cv_defs .h> Hinclude <CALS_G_cm_msg . h> Hinclude <CALS_G_cm_defs .h> Hinclude <CALS_G_slp_ιfc.h> Hinclude <CALS_G_cm_apι . h> Hinclude <CA S_G_TB_apι . h> Hinclude <BCM_G.h> Hinclude <CONS_G_HWCI_ιf .h> Hinclude <CONS_G_CP_ιf .h> 67 Hinclude <CONS_G_error .h> 68 Hinclude <IBSS_G_CP_i .h> Hinclude <MEDS_G_CP_l .h> Hinclude <BCM_G_if.h> Hinclude <NISDN_L_lιne.h> 11 ****************** ******** ********** ******* ******* Thu Jun 2718:11:001996 NISDN_msg_proc.c 1 Page 1 of 9 -146- Thu Jun 271811.001996 f_proc_msg_fr_ιbss Page 3 of 9 ) trFail CNISDN: IBSS , err_msg err_code %d diag %d" vε_ιbss_mεg_param param error code , vs_ιbsε_mεg_param .param error diag ) , break, case IBSS_DIGITS_IND: vb_event = L_BCMevIBSS_DIGIlS, break, case IBSS_RELEAΞE_IND- vb_event = L_BCMevIBSS_RELEASE, break- caεe IBSS_ANSWER_IND vb_event = L_BCMevIBSS_ANSWER, break, case IBSS_INSEIZE_IND vb_event = L_BCMevIBSS_INSEIZE, break, case IBSS_FLASH_IND vb_event = L_BCMevIBSΞ_FLASH , break, caεe IBSS_OUTΞEIZE_CNF vb_event = L_BCMevIBSS_OUTS_CNF break, caεe IBSS_RELEASE_CNF: vb_event = L_BCMevIBSS_REL_CNF, break, default trFail CNISDN Unknown IBSS mεg Ox%x recvd , CS %d CLEG %d, BCSM %d" , vε_ιbεs_hdr prιm_ιd, a_bcm_cal l_data_ptr- >common_data cs_ιd , a_bcm_call_data_ptr->common_data cl eg_ιd, a_bcm_cal l_data_ptr- >common_data bcsm_ιd ) break, ) return (vb_event) , Thu Jun 27 18:11:00 1996 NISDN_msg_proc c 3 Page 3 of 9 Thu Jun 27 18:11 :00 1996 f_proc_msg_fr_cons Page 5 of 9 case C0NS_CONN_NACK : trFail ("NISDN:CONS conn_nack err_code:%d dιag:%d <%s>", vs_cons_msg_ptr->data. conn_nack. err_code, vs_cons_msg_ptr->data . conn_nack . diag , f_CONΞ_strerror (vs_cons_msg_ptr->data. conn_nack.err_code) ) ,- vh_event = L_BCMevCONS_CONN_NACK; break; caεe CONS_DISC_AC : vb_event = L_BCMevCONS_DISC_ACK; break; case CONS_DISC_NACK: trFail CNISDN: CONS dιsc_nack err_code:%d dιag:%d <%s>", vs_cons_msg_ptr->data.dlsc_nack .err_code, vs_cons_msg_ptr->data.dιεc_nack.dιag, f_CONS_strerror (vs_cons_msg_ptr->data.dιεc_nack.err_code) ) ; vb_event = L_BCMevCON≤_DISC_NACK; break; case CONS_OOS_STATE_IND: vb_event = L_BCMevC0NS_OOS_STATE; break; case CONS_MAP_LOG_TO_MEM_ACK : vb_event = L_BCMevCONS_MAP_LOG_TO_MEM_ACK, break; case CONS_MAP_LOG_T0_MEM_NACK : trFail CNISDN : CONS log_dev_to_grp_mem_nack err_code %d dιag : %d <%s> " vs_conε_msg_ptr->data . map_log_to_mem_nack . err_code, vs_cons_msg_ptr- >data . map_log_to_mem_nac . diag , f_CONS_strerror (vs_cons_msg_ptr- > data.map_log_to_mem_nack.err_code) ) ; vb_event = L_BCMevCONS_MAP_LOG_T0_MEM_NACK; brea ; default: trFail CNISDN: Unknown CONS msg.0x%x recvd. CS %d, CLEG : %d, BCSM: %d" , vs_cons_msg_ptr->prιm_ιd, a_bcm_call_data_ptr->common_data. cs_ιd, a_bcra_call_data_ptr->common_data. cleg_ιd, a_bcm_call_data_ptr->corr-non_data.bcsm_ιd) ; break; ) return (vb_event) ; Thu Jun 27 18:11:00 1996 NISDN_msg_proc.c 5 Page 5 of 9 Thu Jun 2718:11:001996 f_proc_msg_fr_bcm Page 6 of 9 ********* ******************************** ****** ' Name * Synopsis * Description Function to process messages received from BCM (other * side of the call) . " Author Paiman Nodoushani " Date 1st released Aug 11, 95 * Input parameters * Return value * Revision history * Date Owner Description ******** byte. t £_proc_ aa_fr_bc-ι (CALS_INTRN_CS_MSG_S *a_intrn_msg_ptr , BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( byte_t vb_event = L_BCMevMSG_N0T_PROCESSED; trinfo ("NiεDN: BCM msg recvd:%d,CS : %d, PLEG:%d, BCSM: %d" , a_intrn_msg_ptr->ind_typ, a_bcm_call_data_ptr->common_data. cs_id, a_bcm_call_data_ptr->coπuτιon_da a.ρleg_id. a_bcm_call_data_ptr->common_data .bcεm_id) εwitch (a_intrn_msg_ptr->ind_typ) I /* * From terminating to originating */ case BCM_TERM_ORIGmsgO_CALLED_PARTY_BUSY : vb_event = L_BCMevTBCM_0_CALLED_PARTY_BUSY; break ,- case BCM_TERM_ORIGmsgROUTE_BUS : vb_event = L_BCMevTBCM_ROUTE_BUSY ; break ,- case BCM_TERM_ORIGmsgTERM_RESOURCE_AVAIL : vb_event = L_BCMevTBCM_RESRC_AVAIL; break; caεe BCM_TERM_ORIGmεgO_TERM_SEIZED : vb_event = L_BCMevTBCM_0_TERM_SEIZED; break ; case BCM_TERM_ORIGmεgO_ANS ER: vb_event = L_BCMevTBCM_0_ANSWER; break; case BCM_TERM_ORIG-εgCALL_PROGRESS : vb_event = L_BCMevTBCM_CALL_PROGRESS; break; case BCM_TERM_ORIGmεgO_SUSPENDED: vb_event = L_BCMevTBCM_0_SUSPENDED; break; case BCM_TERM_ORIGmεgO_DISCONN_PASSIVE : vb_event = L_BCMevTBCM_0_DISC_PASSIVE; brea ; case BCM_TERM_0RIGmsgCALLED_PARTY_RECON : vb_event = L_BCMevTBCM_CALLED_PARTY_RECONN; break; case BCM_TERM_ORIGmsgS _ERROR: vb_event = L_BCMevTBCM_S _ERRO ; break; T u Jun 2718:11:001996 NISDN_msg_proc.c 6 Page 6 of 9 Thu Jun 2718:11:001996 f_proc_msg_fr_bcm Page 7 of 9 * From oπg-inatiπgr to terminating •/ case BCM_ORIG_TERMmsgTERMINATION_ATTEMPT . vb_event = L_BCMevOBCM_TERM_ATTEMPT ; break; case BCM_ORIG_TERMmsgT_ABANDON: vb_event = L_BCMevOBCM_T_ABANDO ; break; case BCM_ORIG_TERMmεgT_DISC0NN_PASSIV : vb_event = L_BCMevOBCM_T_DISC_PASSIVE, break; case BCM_ORIG_TERMmsgSW_ERROR: vb_event = L_BCMevOBCM_SW_ERROR; break; default: trFail ( "NISDN:Unknown BCM msg:%d recvd, CS. %d, PLEG %d,BCSM:%d", a_mtrn_msg_ptr->ιnd_typ, a_bcm_call_data_ptr->common_data.cs_ιd, a_bcm_call_data_ptr->conunon_data.pleg_ιd, a_bcm_call_data_ptr->common_data.bcsm_ιd) ; break, ) return (vb_event); Thu Jun 2718:11:001996 NISDN_msg_proc.c 7 Page 7 of 9 Thu Jun 27 18:11:00 1996 t_proc_msg_fr_meds Page 8 of 9 * * * * *** Name Synopsis Description Function to process messages received from MEDS Author Paiman Nodoushani Da te 1st released Aug 11. 95 Input parameters Return value Revision history Date Owner Description * * * * * * * * * * byte_t £_proc_mag_£r_mβdβ (IPCmsg_t *a_mεg_ptr, BCM_CALL_DATA_S *a_bcm_cal l_data_ptr ) byte_t vb_event = L_BCMevMSG_NOT_PROCESSED; MEDS_MSG_S *vs_meds_msg_ptr , * Cast the data potion of the IPC message to MED_MSG_S and ' look to see what the message is '/ vε_medε_msg_ptr = (MEDS_MSG_S * ) 4 (a_msg_ptr->data [0) ) , trinfo CNISDN:MEDS msg recvd: 0x%x, CS . %d, CLEG %d, BCSM %d", vs_meds_msg_ptr->prιm_ιd, a_bcm_call_data_ptr->common_data.cs_ιd, a_bcm_call_data_ptr->common_data cleg_ιd, a_bcm_call_data_ptr->common_da a.bcsm_ιd) , switch (vs_meds_msg_ptr->prιm_ιd) ( caεe MEDΞ_CONN_TONE_ACK • vb_event = L_BCMevMEDS_CONN_TONE_ACK, break; case MEDS_CONN_TONE_NACK. trFail ("NISDN-.MEDS msg conn_tone_nack err_code %d diag %d", vs_meds_mεg_ptr->mεg_dat . conn_tone_nack . err_code , vs_meds_msg_ptr- >msg_data . conn_tone_nack . dia ) , vb_event = L_.BCMevMEDS_CONN_TONE_.NACK , break; case MEDS_DIΞC_TONES_ACK vb_event = L_BCMevMEDS_DISC_TONE_ACK. break; case MEDS_DISC_TONES_NACK : trFail ("NISDN-.MEDS msg conn_tone_nack err_code.%d dιag-%d", vs_meds_msg_ptr->msg_data.dιsc_toneε_nack err_code, vs_ιneds_msg_ptr->msg_data.dιsc_toneε_nack diag) ; vb_event = L_BCMevMEDS_DISC_TONE_NACK; break; default trFail CNISDN: Unknown MEDS msg:0x%x) recvd, CS %d,CLEG %d,BCSM:%d vs_meds_msg_ptr->prιm_ιd, a_bcm_call_data_ptr->common_data.cs_ιd, a_bcm_call_data_ptr->common_data. cleg_ιd, a_bcm_call_data_ptr->common_data.bcsm_ιd) , break. return (vb_event); ThuJun 2718:11:001996 NISDN_msg_proc.c 8 Page 8 of 9 Thu Jun 2718:11:001996 f_proc_tιmer_msgs Page 9 of 9 ************ ******** ********** ******** Name Synopsis Description Function to process timer related messages Author Paiman Nodoushani Date 1st released Aug 11, 95 Input parameters Return value Revision history * Date Owner Description *********************************************************************** byte_t £_jproc_ti βr_mβ_rs (CALS_TIMER_MSG_S *as_tιmer_msg_ptr, BCM_CALL_DATA_S *a_bcm_call_data_ptr) ( byte_t vb_event = L_BCMevMSG_NOT_PROCESSED; εwitch (aε_tιmer_msg_ptr->tιmer_typ) ( case BCM_TERMtmsgSUSPEND_TIMER vb_event = L_BCMevTBCM_SUSPEND_TIMER, break, caεe BCM_TERMtmsgNOANS ER_TIMER vb_event = L_BCMevTBCM_NOANSWER_TIMER, break; default. trFail CNISDN: Unknown Timer mεg:%d recvd, CS .%d, PLEG %d,BCSM:%d" as_tιmer_msg_ptr->tιmer_typ, a_bcm_call_data_ptr->common_data cs_ιd, a_bcm_call_data_ptr->common_da a cleg_ιd, a_bcm_call_data__ptr->common_data bcsm_ιd) , break; ) return (vb_event), Thu Jun 2718:11.001996 NISDN_msg_proc.c & Page 9 of 9 Thu Jun 2718:11:231996 Page 1 of 29 char rcειd[ )="$Id: NISDN_oproc c.v 1.5 1996/06/06 22:03:17 demir Exp $ Copyright c ) NewNet " * Copyright (c) NewNet, Inc. ' All rights reserved. ' This document contains confidential and proprietary information of NewNet ' and any reproduction, disclosure, or use in whole or m part is expressly ' prohibited, except as may be specifically authorized by prior written ' agreement or permission of NewNet. ************** VERSION SRevision: 1.5 $ DATE $Date. 1996/06/06 22:03:17 $ MODULE NAME SRCSfile- NISDN_oproc . c , v $ AUTHOR Paiman Nodoushani DESCRIPTION Includes all the functions used m the state machine for the originating call portion DATE 1st REL REV. HIST ' Date Owner Description • RESTRICTED RIGHTS LEGEND * Use, duplication, or disclosure by Government Is Subject to restrictions as ' set forth m subparagraph (c) (1) (11) of the Rights m Technical Data and ' Computer Software clause at DFARS 252.227-7013 ******************************* , ***/ Hinclude <εtdιo.h> Hinclude <εtdlιb.h> Hinclude <εyε/tιme.h> Hinclude <errno h> Hinclude <apι.h> Hinclude <εccp_scpa.h> Hinclude <tcap.h> Hinclude <ADAP_G.h> Hinclude <SYS_G_types . h> Hinclude <SYS_G_access .h> Hinclude <SYS_G_mgmt_states .h> Hinclude <Db.h> Hinclude <DB_G_feature_defs .h> Hinclude <DB_G_group.h> Hinclude <CONS_G_HWCI_ιf .h> Hinclude <CONS_G_CP_lf .h> Hinclude <IBSS_G_CP_ιf .h> Hinclude <MEDS_G_CP_l .h> Hinclude <CONS_G_error .h> Hinclude <IBSS_G_error .h> Hinclude <MEDS_G_error .h> Hinclude <AIN02_G_oper .h> Hinclude <CALS_G_cv_defε .h> Hinclude <CALS_G_cm_mε . h> Hinclude <CALS_G_cm_defs ,h> Hinclude <CALS_G_slp_ιfc h> Hinclude <CALS_G_cm_apι.h> Hinclude <CALS_G_TB_apι.h> Hinclude <BCM_G.h> Hinclude <BCM_G_ιf.h> Hinclude <NISDN_L_lιne.h> extern int. ai cc NPA: Thu Jun 2718:11:231996 NISDN_oproc.c 1 Page 1 of 29 -155- ThuJun2718:11:231996 f_bcm_oproc1 Page 2 of 29 /" *************** ******* ' Name ' Synopsis ' Description ' Author Paiman Nodoushani ' Date 1st released Aug 11. 95 " Input parameters * Return value ' Revision history ' Date Owner Description ******** ************* ******** int £_bc-_oprocl (BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( IBSS_MSG_HDR_S vs_ιbεs_hdr ; IPCmsg_t *vs_ιpc_msg_ptr ,- DB_LINE_DATA_S vs_lιne_da a; DWORD vs_cons_pass_thru,- char orig_party_dn (L_BCM_SIZEOF_BCM_DIGS] int vι_cnt ; CALS_FTR_UPDATE_INFO_S vs_f tr_update_ιnfo; trInfoCNISDN: [0)ιn oprocl.CS: %d, CLEG: %d, PLEG: %d. BCSM: %d" , a_bcm_call_data_ptr->common_data.cs_ιd, a_bcm_call_data_ptr->common_data . cleg_ιd, a_bcm_call_data_ptr->common_data .pleg_ιd, a_bcm_call_data_ptr->coιrurton_data .bcsm_ιd) ; initialize any specific data to their default values a_bcm_call_data_ptr->cs -orιg.conn_rιng_back_f lag = FALSE; set call side to originating V a_bcm_call_data_ptr->call_sιde = L_BCMcsORIGINATING, There are no parameters m the INSEIZE_IND message, ust get the logical device id and save it in BCSM data vs_ιpc_msg_ptr = &( (a_bcm_call_data_ptr->bcp_msg_ptr ) ->un. ιpc_msg) ,- f_IBSS_getHdr (vs_ipc_msg_ptr, 4vs_ibss_hdr ) , a_bcm_call__data_ptr->orιg_log_dev_ιd = vs_ιbss_hdr . log_dev; a_bcm_call_data_ptr->orιg_access_type = SYS_ACCESS_N0N_ISDN,- trinfo ( "NISDN: [O] OGDEV: 0x%x, BCSM: %d" , vs_ibss_hdr . log_dev, a_bc-_call_data_ptr->common_data ,bcsm_ιd) ; Make CONS request for group id and wait for reply in the next pic. Use Passive Leg to make CONS request ... vs_cons_pass_th.ru = M_CALS_gen_passthru (a_bcm_call_data_ptr->common_data.pleg_ιd, 0,0), if ( f_CONS_log_to_grp_mem_async (vs_conε_pass_thru, L_CONS_RET_ALL , vs_ιbsε_hdr . log_dev) < 0) ( trFailCNISDN: (O)CONS log_dev_to_grp_mem ERR: %d, %s, BCSM: %d" , errno, f_CONS_strerror (errno) , a_bαn_call_data_jptr->common_data .bcεm_ιd) ,- return (-1) ; ) Thu Jun 2718:11:231996 NISDN_oproc.c 2 Page 2 of 29 ThuJi jn2718:11:231996 f_bcm_oproc1 Page 3 of 29 /* Get the line data from the database */ vs_lιne_data.log_dev = vs_ιbss_hdr . log_dev; if (f_CALS_fetch_lιneDB (4vs_lιne_data) < 0) { trFailCNISDN: (O)CALS fetch_lmeDB ERR: %d, BCSM: %d" , errno, a_bcm_call_data_ptr->common_data.bcεm_ιd) ,- return (-1) ; else { if (vs_lιne_data.dn_aεsιgned == TRUE) ( /' Store digits m BCSM data '/ memset (4 (a_bcm_call_data_ptr->callιng_party_ιd. digits [0) ) , 0, L_BCM_SIZEOF_BCM_DIGS) ; memcpy ( 4 ( a_bcm_call_data_ptr->callmg_party_ιd.dιgιts[0) ) . 4vs_lιne_data.dn[0] , vs_lιne_data.dn_len) , a_bcm_call_data_ptr->callιng_party_id.dιg_count = (byte_t) vs_lιne_data .dn_len; a_bcm_call_data_ptr->callιng_party_ιd_f lag = TRUE, M_DN_convert I vs_l ιne_data . dn , vs_l ιne_data . dn_len , orιg_party_dn, vι_cnt ) ; /• Update feature list of ORIG Party '/ memset (4vs_f r_update_ιnfo.un.wlιne_dιgιts, 0, sizeof (CALS_DIGITS_S) ) ; memcpy( (vs_f r_update_ιnfo.un.wlιne_dιg ts .digits 10) ) , 4vs_lιne_data.dn[0] , vs_lιne_data.dn_len) , vs_ftr_update_ιnfo.un.wlιne_dιgιts .dιg_count = (byte_t) vs_lιne_data.dn_len; if (f_CALS_update_ftr_lιst (a_bcm_call_data_ptr->common_data .cs_ιd, 4vε_ftr_update_ιnfo) < 0) ( trFailCNISDN: [OJCALS update_f tr_lιst ERR. d, BCSM: %d" , errno, a_bcm_call_data_ptr->common_data .bcεm_ιd) ) trinfo ( "NISDN: 10) ORIG_PARTY : <%ε> , LOGDE : 0x%x, BCSM : %d" , orιg_party_dn, vs_lιne_data. log_dev, a_bcm_call_data__ptr->common_data .bcεm_ιd) ; else ( a_bcm_call_data_ptr->callιng_party_ιd_ lag = FALSE; ) return (0) ; Thu Jun 2718:11:231996 NISDN_oproc.c 3 Page 3 of 29 Thu Jun 2718:11:231996 f_bcm_oproc2 Page 4 of 29 Wame Synopsis Description Author Paiman Nodoushani Date 1st released Aug 11, 95 Input parameters Return value Revision history ' Date Owner Description ******* int £_bc-_oproc2 (BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( CONS_MARK_BUSY_CMD_S vs_conε_mark_buεy_mεg , CONS_MΞG_S *vε_cons_msg_ptr; DWORD vs_cons_pasε_thru; trInfoCNISDN: [0] in oproc2,CΞ:%d,CLEG: %d, PLEG: %d, BCSM: %d" a_bcm_call_data_ptr->common_data . cs_ιd, a_bcm_call_data_ptr->common_data.cleg_ιd, a_bcm_call_data_ptr->common_data.pleg_ιd, a_bαn_call_data_ptr->common_data.bcsm_ιd) ; /* Store the group id m BCSM data vs_cons_msg_ptr = (CONS_MSG_S *) ( la_bcm_call_data_ptr->bcp_mεg_ptr )->un. ιpc_ms .data [0) ) ; a_bcm_call_data_ptr->ong_group_ιd = vs_cons_mεg_ptr- >data.map_log_to_mem_ack. roup ; a_bcm_call_data_ptr->orig_group_id_f lag = TRUE; trInfoCNISDN: [O)group_id: %d, BCSM:%d" , vs_cons_msg_ptr->data .map_log_to_mem_ack group, a_bcm_call_data_ptr->common_data. bcεm_ιd) , /* Send CONS_mark_busy messag ... Use Passive Leg to make CONS requests. '/ memset ((void * ) 4vs_cons_mark_busy_msg, 0, sizeof (CONS_MARK_BUSY_CMD_S) ) ; vs_cons_mark_busy_msg.dιr = L_DIR_INCOMING; vs_cons_mark_busy_msg. ype = L_TYPE_NORMAL_CALL, vs_conε_mark_busy_mεg . log_dev = a_bcm_call_data_ptr->orιg_log_dev_id; vε_cons_pass_thru = M_CALS_gen_passthru (a_bcm_call_data_ptr->common_data .pleg_ιd, 0,0), f ( f_CONS_mark_buεy_async (vs_cons_pasε_thru, L_CONS_RET_ALL, 262 1 4vε_cons_mark_busy_mεg) < 0) 261 ( 264 trFailCNISDN: [0] CONS mark_busy_async ERR: %d, %s, BCΞM:%d" , 265 errno, f_CONS_strerror (errno) , 266 a_bcm_call_data_ptr->common_data.bcεm_ιd) ,- 267 return (-1) ; 268 270 1 return (0) ; 271 Thu Jun 2718:11:231996 NISDN_oproc.c 4 Page 4 of 29 Thu Jun 2718:11:231996 f_bcm_oproc4 Page 5 of 29 /* ******* * Name * Synopsis ' Description * Author Paiman Nodousham * Date 1st released Aug 11, 95 " Input parameters * Return value * Revision history * Date Owner Description ***************** ******* int £_bc _oproc4 <BCM_CALL_DATA_S *a_bcm_call_data_ptr) ( DB_DN_DATA_S vε_dn_data; char oπg_party_dn[L_BCM_SIZEOF_BCM_DIGS] , trinfo ( "NISDN: [O] in oproc4, CS.%d,CLEG:%d, PLEG- %d, BCSM: %d" . a_bcm_call_data_ptr->coιrιmon_data. cs_ιd, a_bcm_call_data_ptr->coπuτιon_data. cleg_ιd, a_bcr-_call_data_ptr->common_data.pleg_ιd, a_bcm_call_data_ptr->common_data.bcsm_ιd) , /* Database was read m picl, verify that dn was assigned to the line '/ if (a_bcm_call_data_ptr->callιng_party_ιd_ lag == FALSE) ( return ( 1) ; ) elεe ( /* Read the dn_profιle database */ memset (4vε_dn_data, 0, sizeof (vs_dn_data) ) , memcpy ( (vs_dn_data.dn[0] ) , & (a_bcm_call_data_ptr->callιng__party_ιd digitε (0) ) , a_bcm_call_data_ptr->callιng_party_ιd.dιg_count ) ; 318 if (f_CALS_fetch_dn_prof ileDB (4vε_dn_data) < 0) 319 ( 320 M_DN_convert (a_bcm_call_data_ptr- >callmg_par ty_ι . digitε , 321 a_bcm_call_data_ptr->callιng_party_ d.dιg_coun , 322 ong_party_dn, vι_cnt) ; 323 trFailCNISDN: [OJCALS fetch_dn_prof ileDB ERR. %d,DN< %ε>,BCSM:%d" , 324 errno, orιg_party_dn, 325 a_bcm_call_data__ptr->common_data.bcsm_ιd) , 326 return (1) ; 327 328 elεe 329 ( 330 a_bcm_call_data_ptr->orιg_group_ιd = vε_dn_data .group, 331 a_bcm_call_data_ptr->orιg_group_ιd_flag = TRUE; 332 a_bcm_call_data_ptr->cε .orιg.orιg_authorιzat on = 333 vs_dn_data.orιg_auth; 334 Hif 0 335 a_bcm_call_data_ptr->carrιer id; 336 Hendif 337 338 ) 339 return (0) , 340 Thu Jun 2718:11:231996 NISDN_oproc.c 5 Page 5 of 29 -160- Thu Jun 27 18: 1:23 1996 f_bcm_oproc6 Page 7 of 29 return (0 ) ; Thu Jun 27 18:11:23 1996 NISDN_oproc.c 7 Page 7 of 29 -161- Thu un2718:11:231996 I_bc _oproc7 Page 8 of 29 ********** ******** ******** Name Synopsis Description Author Pai an Nodoushani Date 1st released Aug 11, 95 Input parameters Return value Revision history ' Date Owner Description ********** ********* int £_bcm_oproc7 (BCM_CALL_DATA_S *a_bcm_call_data_ptr) ( BYTE vb_contιnue; BYTE vb_dιgιt_εtatus = BCM_SUCCESS; IBSS_MSG_PRM_S vε_ibss_msg_param; IPCmεg_t *vε_ιpc_mεg_ptr , BCM_NON_ISDN_LINE_DATA_S *vs_data_ptr; char dιgιts(30) ; int vι_cnt; trInfoCNISDN: [0]m oproc7, CS : d, CLEG: %d, PLEG- d, BCSM: %d" , a_bcm_call_data_ptr->common_data.cs_ιd, a_bcm_call_data__ptr->common_data. cleg_ιd, a_bcm_cal l_data_ptr- >comιnon_da ta.pl eg_ιd, a_bcm_call_data_ptr->coιrrmon_data bcsm_ιd) , vs_ιρc_msg_ptr = 4 ( (a_bcm_call_data_ptr->bcp_msg_pt ) ->un. ιpc_msg) ; save the data received m the database '/ vb_contmue = TRUE; while (vb_contιnue) ( if (f_IBSS_getNextParam (vs_ιpc_msg_ptr, 4vs_ιbss_msg_param) < 0) ( trFail CNISDN: [01 IBSS getNextParam ERR:%d,%s", errno, f_IBSS_strerror (errno) ) ; return (-1) ; ) /* There should be only one stage of digits, pound terminated */ elεe ( εwitch (vs_ibss_msg_param.param_id) ( case L_PRM_EOP: vb_contιnue = FALSE; break; case L_PRM_SUP_FLD_1_DIGΞ . if (vε_ibεs_msg_param.param. εup_fld_l . code = EIOK) ( vb_digit_status = BCM_FAILURE, vb_contmue = FALSE; ) else ( /* Cast specific data portion of BCSM_DATA to LINE data */ vs_data_ptr = (BCM_NON_ISDN_LINE_DATA_S •) (a_bcm_call_data_ptr->εpecf_data [0] ) , / » Copy all but the pound digit */ vε_data_ptr->stagel_count = vs_ιbss_mεg_param.param.sup_fld_l len _i2____ memcpy(4(vs data ptr->staαel diαfOI). Thu Jun 2718:11:231996 NISDN_oproc.c 8 Page 8 of 29 ThuJun2718:11:231996 f_bcm_oproc7 Page 9 of 29 4vs_ιbss_msg_param.param.sup_fld_l .digits (0) , vs_data_ptr->stagel_count) ; /* get a copy of the digits received for tracing '/ M_DN_convert(vs_data_ptr->εtagel_dιg, vs_data_ptr->stagel_count , digits, vi_cnt) ; trinfo CNISDN: [OIDigitε rcvd <%s> , BCSM=%d' , digits, a_bcm_call_data_ptr->common_data .bcεm__ιd) ; ) break; default : vb_contιnue = FALSE; brea ; Verify the dialing plan, for now always verified If mter-digit timer had expired, get out with collect-timeout event if (vb_dιgιt_εtatus == BCM_FAILURE) ( return (1) ; elεe ( return (0) ; Thu Jun 2718:11:231996 NISDN_oproc.c 9 Page 9 of 29 Thu Jun 2718:11:231996 f_bcm_oproc8 Page 10 ol 29 ********** ********** ******** Name Synopsis Description Author Paiman Nodoushani Date 1st released Aug 11, 95 Input parameters Return value Revision history Date Owner Description *********** *************** mt f_b<-α_oprocβ ( BCM_C ALL_DATA_S *a_bcm_call_data_pt ) { BCM_NON_ISDN_LINE_DATA_S « vs_data_ptr ; char npa_str [5] ; char digits [30); int vι_cnt; trinfo ( "NISDN: [0)m oproc8 , CS : %d. CLEG : %d, PLEG: %d, BCSM: id" a_bcro_call_data_ptr->common_dat . cs_ιd, a_bcm_call_data_ptr->common_da . cleg_ιd, a_bcm_call_data_ptr->common_da a ,pleg_ιd, a_bcm_call_data_ptr->common_data . bcsm_ιd) ; Determine type of call, route index, carrier, etc. For lines it is very simple, figure out if its a long distance or local call and fill m the called party id appropriately */ vs_data__ptr = ( BCM_NON_ISDN_LINE_DATA_S *) 4 (a_bcm_call_data_ptr->specf_data [0) ) ; if (vε_data_ptr->εtagel_count == 7) ( sprintf (4npa_str [0] , "%d", gi_cc_NPA) ; a_bcm_call_data_ptr->called_party_ιd. digits [0) = npa_str[0] - '0' a_bcm_call_data_ptr->called_party_ιd. digits [ 1 ] = npa_εtr[l] - '0' a_bcm_call_data_ptr->called_party_ιd dιgιts[2) = npa_str[2) - '0' memcpy (4 (a_bcm_call_data_ptr->called_party_ id. digits [3 ) ) , 4(vs_data_ptr->stagel_dιg[0] ) , vs_data_ptr->stagel_count) , a_bcm_call_data_ptr->called_party_ιd.dιg_count =- vε_data_ptr->stagel_count + 3; a_bcm_call_data_ptr->called_party_ιd_flag = TRUE, return (0) ; ) else if (vs_data_ptr->stagel_count >= 11) { /• It's a long distance number, for called party id get rid of the first 1 m the mimjer */ memcp (4 (a_bcm_call_data_ptr->called_party_ιd. digits 10) ) , 4(vs_data_ptr->stagel_digll] ) , vs_data_ptr->stagel_count - 1); a_bcm_call_data_ptr->called_party_ιd.dιg_count = vs_data_ptr->stagel_count - 1 ; a_bαn_call_data_ptr->called_party_ιd_f lag = TRUE; return (0) ; ) elεe ( M_DN_conver (vs_data_ptr->stagel_dig, vs_data_ptr->stagel_count, digits, vι_cnt) ; trFailCNISDN: [0] Invalid Number <%s> dialed, BCSM:%d" . digits, a_bcm_call_data__ptr->common_data.bcsm_ιd) , Thu Jun 2718:11:231996 NISDN_oproc.c 10 Page 10 of 29 -16I+- Thu Jun 2718:11:231996 f_bcm_oproc8 Page 11 of 29 return (1 ) ; Thu Jun 2718:1 :231996 NISDN_oproc.c 11 Page 11 of 29 trinfo ( "NISDN: (0) in oprocll , CS : %d, CLEG: %d, PLEG : %d, BCSM: %d" a_bcm_call_data_ptr->cc -— on_data . cs_ιd, a_bcm_call_data_ptr->common_data . cleg_ιd, a_bcm_call_data_ptr->comraon_data .pleg_ιd, a_bcm_call_data__ptr->common_data .bcεm_ιd) , /" Look at the authorization field that was read from the database and decide on authorization I 634 */ i f ( a_bcm_call_data_ptr->cs . orιg .orιg_authorι zat ιon == AUTH_NOT_UΞED) ( return ( 0 ) ; else ( return ( 1 ) ; Thu Jun 27 18:11:23 1996 NISDN_oproc.c 12 Page 12 of 29 Thu Jun 2718:11:231996 f_bcm_oproc12 Page 13 of 29 ******* Λfame Synopsis Description Author Paiman Nodousham Date 1st released Aug 11, 95 Input parameters Return value Revision history Date Owner Description ************* ******* int f_bc _oprocl2 ( BCM_CALL_DATA_S * a_bcn_call_data.p i ) ( bcp_msg_t *vs_bcp_mεg_ptr ; CALS_CS_ID term.cε.id; CALS_BCSM_POINT_S vε_bcsm_poιn ,- CALS_CREATE_CS_INFO_S vs_cs_create_ιnf o ; BCM_ORIG_TERM_TERM_ATTEMPT *vsp_ιntrn_msg ; trInfoCNISDN: [0)m oprocl 2 ,CS.%d, CLEG:%d. PLEG. %d. BCSM. %d" a_bcm_call_data_ptr->common_data.cs_ιd, a_bcm_call_data_ptr->com-on_data.cleg_ιd. a_bcm_call_data_ptr->common_data.pleg_ιd, a_bcm_call_data_ptr->common_data .bcsm_ιd) ; Create the terminating side of the call */ s. .bcεm_po nt.currently_ιn = CALΞ_IN_PIC, vs_ bcεm__poιnt . bcsm_poιnt = 11; vs. ,bcsm_jpoint .bcsm_εub_poιnt = 0; /• For other access types need to know the term's group id */ vs_ _cs_create_info.access_type = SYS_ACCESS_NON_ISDN, vs_ _cε_create_info.cleg_εtatus = CALS_LEG_ST_PENDING; s. .cs_create_mfo.pleg_status = CALS_LEG_ΞT_JOINED, vε_ .cs.create.info. log_dev_ιd = SYS_LOG_DEV_ID_NULL s. .cs_create_lnf0.ad3_leg_.ld = L_INVALID_LEG_ID, if ( (term_cs_id = f_CALS_CS_create (4vs_cs_create_ιnfo. 4vs_bcsm_poιnt) ) < 0) ( trFailCNISDN: [OICALS CS.create ERR: %d, BCSM: %d' , errno, a_bcm_call_data_ptr->comιnon_data .bcsm.id) ; return (-1) ; ) if ( f_CALS_connect_CSs (a_bcm_call_data_ptr->comnϊon_data cs_ιd, trFail CNISDN: [0] CALS connect.CSs ERR :%d, BCSM: %d" , errno, a_bcm_call_data_ptr->comrnon_data. bcsm.id) ; return (-1) ; Send termination.a tempt.event to the terminating call segment V if ( (vs_bcp_msg_ptr = f_CALS_alloc_msgbuf ( ) ) == NULL) ( trFailCNISDN: [OJCALS alloc.msgbuf ERR: %d, BCSM:%d" , errno, a_bcm_call_data_jptr->common_data .bcsm.id) ; return (-1) ; 715 vs_bcp_mεg_ptr->msg_type = BCP_INTRN_CΞ_MΞG, 716 vs_bcp_msg_ptr->un. ιntrn_cs_msg.orιg_bcsm_ιd = 717 a_b_n_call__data__ptr->common_data. bcsm.i ; vs bcp msα ptr->un. intrn cs msα.ind tvp = BCM ORIG TERMmsαTERMINATION ATTEMPT: Thu Jun 2718:11:231996 NISDN.oprocc 13 Page 13 of 29 ThuJun2718:11.231996 f_bcm_oproc12 Page 1 of 29 vsp.intrn.msg (BCM_ORIG_TERM_TERM_ATTEMPT_S *) 4 (vε_bcp_mεg_ptr->un mtrn.cs. εg. ιnd_data[0) ) , 723 vεp_ιntrn_mεg->orιg_accesε_type = a_bcm_call_data_ptr->orιg_acceεε_type, 724 vεp_ιntrn_msg->orιg_log_dev_ιd = a_bcm_call_data_ptr->orιg_log_dev_ιd, 725 vsp_ιntrn_mεg->callιng_party_ιd = a_bcm_call_data_jptr->callιng_party_ιd, 726 vsp_ιntrn_msg->callιng_party_ιd_ lag = 727 a_bcm_call_data_ptr->callιng_party_ιd_ lag, 728 vεp_ιntrn_msg->called_party_ιd = a_bcm_call_data_ptr->called_party_ιd, 729 vsp_ιntrn_mεg->called_party_ιd_f lag = 730 a_bcm_call_data_ptr->called_party_ιd_f lag, 731 vεp.intrn.msg- >or ig.gr oup.id = a_bcm_call_data_ptr->orιg_group_ιd, 732 vεp_ιntrn_mεg->orιg_group_ιd_ lag = a_bcm_call_data_ptr->orιg_group_ιd_f lag, 733 vsp_ιntrn_msg->term_group_ιd = a_bcm_call_data_ptr->tenrr_group_ιd, 734 vsp_ιntrn_mεg->term_group_ιd_f lag = a_bcm_call_data_ptr->teιπι_.group_ιd_f lag, 736 if ( _CALS_εend_mεg_to_peer (a_bcm_call_data_ptr-> common.dat a. pi eg.id, 737 vε_bcp_mεg_pt r , 738 DEFAULT.PRIORITY) < 0) 739 740 trFailCNISDN [0]CALS εend_mεg_to_peer ERR %d BCSM %d", 741 errno, a_bcm_call_data_ptr->common_data bcεm.id), 742 if ( f.CALS.f ree.mεgbuf (vε_bcp_msg_ptr ) < 0) 743 ! 744 trFail CNISDN. CALS free.mεgbuf failed"), 745 ) 746 return (-1) , 747 749 return (0) , 750 Thu Jun 2718.11.231996 NISDN.oprocc 14 Page 14 ol 29 Thu Jun 2718:11:231996 f_bcm_oprocl3 Page 15 of 29 ************* ******* * Name * Synopsis * Description * Author Paiman Nodoushan * Date 1st released Aug 11, 95 * Input parameters ' Return value ' Revision history * Date Owner Des ription ********* int f_bc-_oprocl3 ( BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( IPCmsg_t vs_ιpc_msg; MEDS_MSG_S » vs_meds_msg_ptr , CONΞ_CONN_CMD_S vε_conε_conn_msg , BCM_TERM_ORIG_0_TERM_SEIZED_S *vsp_ιntrn_mεg ; dword.t vε_conε_pass_thru, trInfoCNISDN: [0)ιn oprocl3 ,CS : _d, CLEG: %d, PLEG: %d. BCSM: %d" , a_bcm_call_data_ptr->common_data.cs_ιd, a_bcm_call_data_ptr->common_data . cleg.id a_bcm_call_data_ptr->common_data pleg_ιd, a_bcm_call_data_ptr->common_data.bcεm_ιd) , /* copy the data sent from termination side in the database vsp_ιntrn_msg = (BCM_TERM_ORIG_0_TERM_SEIZED_Ξ *) ( (a_bcm_call_data_ptr->bcp_msg_ptr ) ->un. ιntrn_cε_ms . ιnd_data [0)1 a_bcm_call_data_ptr->terrr_accesε_type = vεp_mtrn_mεg->term_access_type, a_bαn_call_data_ptr->term_log_dev_ιd = vsp_ιntrn_msg->tenn_log_dev_ιd, 790 /* 791 If ringback is required send a conn_tone otherwise send a connect_lway 792 */ 793 if (a_bcm_call_data_ptr->term_access_type S YS_ACCESS_NON_ I SDN ) 794 ( 795 a_bcm_call_data_ptr->cs .orιg.conn_nng_back_f lag = TRUE, memset ((void * )4vε_ιpc_mεg.data[0] , 0, εizeof (MEDS_MSG_S) ) , vs_meds_msg_ptr = (MEDΞ_MSG_S * )4 (vs_ιpc_msg .data! 0) ) , vs_meds_msg_ptr->prιm_ιd = MEDΞ_CONN_TONE_CMD , 802 vs_meds_msg_ptr->pass_thru = 803 M_CALS_gen_passthru (a_bcm_call_data_ptr->common_data pleg.id, 0.0), 804 vs_meds_msg_ptr->log_dev = a_bcm_call_data_ptr->orιg_log_dev_ιd, 805 vε_medε_msg_ptr->rep_cntrl = L_RET_NACK, 806 vs_meds_mεg_ptr->msg_data.conn_tone_cmd. tone = L_TONE_RINGBACK; 808 if (f_MEDS_sndCmdMεg (4vε_ιpc_msg) < 0) 809 ( 810 trFailCNISDN: 101MEDS εndCmdMsg ERR. %d, %s, BCSM: d' , 811 errno, f_MEDS_strerror (errno) , 812 a_bcm_call_data_ptr->common_da a. bcsm.id) ; 813 return (-1) ; 814 ) 815 ) 816 else 817 ( 818 a_bcm_call_data_ptr->cs.orιg.conn_rιng_back_flag = FALSE; 819 /* 620 Send conn_lway message 821 '/ 822 memset ((void *)4vε_conε_conn_mεg, 0, εizeof (CONΞ_CONN_CMD_S ) ) ; vs_cons_conn_ms . log_dev_a = ______ a bcm call data r_tr->term loσ dev id: Thu Jun 2718:11:231996 NISDN.oprocc 15 Page 15 of 29 -I69- Thu Jun 2718:11:231996 f_bcm_oproc13 Page 16 of 29 vs_cons_conn_msg. log.dev.b = a_bcm_call_data_ptr->orιg_log_dev_ιd; vs_cons.conn_msg.way = L.WAY.ONE; vε_cons_pass_thru = M_CALS_gen_passthru(a_bcm_call_data_ptr->common_data.pleg_ιd, 0,0); if ( f_CONΞ_conn_async (vs_conε_pasε_thru, L_CONS_RET_ERR, 4vs_cons_conn_msg) < 0) ( trFailCNISDN: (OICONS conn.async ERR: d, %ε, BCSM: %d" , errno. f_CONS_ε trerror (errno), a_bcrrι_call_da a_ptr->common_data bcsm.id) return (-1) , return (0) ; Thu Jun 2718:11:231996 NISDN.oproc.c 16 Page 16 of 29 -170- ThuJun271811.231996 f_bcm_oproc16 Page 17 of 29 ******* Name Synopsis Description Author Paiman Nodoushani Date 1st released Aug 11, 95 Input parameters Return value Revision history Date Owner Description int £_bc-_ p-ocl6 ( BCM_CALL_DATA_S *a_bcm_call_data_ptr ) { trInfoCNISDN [0)ιn oprocl6,CS %d CLEG %d PLEG %d BCSM %d" a_bcm_call_data_ptr->com-on_data cs.id a_bcm_call_data_ptr->common_data cleg.id a_bcm_call_data_ptr->coπιmon_data pleg.id a_bcm_ca 1 l_da a_pt r - > common.da t a bcsm_ιd ) Save the data sent from term side and simply e i the pi '/ a_bcm_call_data_ptr->te3rm_access_type = ( (BCM_TERM_ORIG_0_CALLED_PARTY_BUSY_S • ) ( (a_bcm_call_data_ptr->bcp_msg_ptr) ->un ιntrn_cs_m_q md_data(0] ) ) - term_access_type 878 return (0) , 879 Thu Jun 2718.11.231996 NISDN_oprocc 17 Page 17 of 29 I Thu Jun 2718:11:231996 f_bcm_oproc22 Page 18 of 29 Wame Synop i Description Author Pai an Nodoushani Date 1st released Aug 11, 95 Input parameters Return value Revision history » Date Owner Description nt f_b-_oproc22 (BCM_CALL_DATA_S "a_bcm_call_data_ptr ) ( trInfoCNISDN: [O] in oproc22 , CS : %d, CLEG • %d, PLEG : %d BCSM:%d" a_bcm_call_data_ptr->common_data .cs_ιd, a_bcm_call_data_ptr->common_da a.cleg_ιd, a_bcm_call_data_ptr->common_da a .pleg_ιd, a_bcm_call_data_ptr->common_da a .bcεm_ιd) , Copy data sent from terminating side a_bcm_call_data_ptr->term_access_type = ( (BCM_TERM_ORIG_0_TERM_SEIZED_S *) 4 ( (a_bcrn_call_data_ptr->bcp_msg_ptr) ->un. ιn rn_cs_msς. ιnd_data[0] ) ) -> term_access_type , a_bcm_call_data_ptr->terrr_log_dev_id = ((BCM_TERM_ORIG_0_TERM_SEIZED_S •) 4 ( (a_bcm_call_data_ptr->bcp_msg_ptr ) ->un. ιn rn_cs_ms . ιnd_data(0) ) ) -> term_log_dev_ιd, return (0) ; Thu Jun 2718:11:231996 NISDN.oproc 18 Page 18 of 29 Thu Jun 2718:11:231996 f_bcm_oproc26 Page 19 of 29 /" » Name * Synopsis * Description * Author Pai an Nodoushani * Date 1st released Aug 11, 95 * Input parameters ' Return value * Revision history Date Owner Description ********* ********** int f_bcm_oproc26 (BCM_CALL_DATA_S *a_bcm_call_data__pt ) ( CONΞ_CONN_CMD_S vs_cons_conn_msg; dword.t vs_cons_paεε_thru, trInfoCNISDN: [Olm oproc26,CΞ: %d,CLEG:%d, PLEG %d,BCSM-%d", a_bcm_call_data_ptr->common_data .cs_ιd, a_bcm_call_data_ptr->common_data.cleg_ιd, a_bcm_call_data_ptr->common_data.pleg_ιd, a_bcm_call_data_ptr->common_data. bcsm.id) . /* Send conn_2way •/ memset ((void *) vs_cons_conn_msg, 0, sizeof (CONS_CONN_CMD_S) ) , vs_cons_pass_thru = M_CALS_gen_pasε hru (a_bcm_call_data_ptr->comrnon_data.pleg_ιd, 0. 0) , vs_cons_conn_msg. log_dev_a = a_bcm_call_data_ptr->orιg_log_dev_ιd, vs_cons_conn_msg log_dev_b = a_bcm_call_data_ptr->term_log_dev_ιd, vs_cons_conn_mεg .way = L_ AY_TW0, if f_CONS_conn_async (vs_cons_ρass_thru, L_CONS_RET_AL , 4vs_cons_conn_msg ) 0) trFail CNISDN: [OICONS conn_2_way_async ERR: »d, %s , BCSM : %d" errno, f_CONS_strerror (errno) , a_bcm_call_data_ptr->common_data.bcsm_ιd) return (-1) , return (0) , Thu Jun 2718:11:231996 NISDN_oproc.c 19 Page 19 of 29 Thu Jun 2718:11:231996 f_bcm_oproc27 Page 20 of 29 j Name Synopsis Description Author Paiman Nodoushani Date 1st released Aug 11, 95 Input parameters Return value Revision history Date Owner Description ********************* int f_bc-_oproc27 (BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( C0NS_C0NN_CMD_S vs_cons_conn_msg, MEDS_MSG_S *vs_meds_msg_pt , IPCmsg_t vε_ιpc_mεg, trinfo ( "NISD : [0) in oproc27 , CS : %d, LEG . %d, PLEG • %d, BCSM : %d" , a_bcm_call_data_ptr->common_data cs_ιd. a_b m_call_data_ptr->common_data. cleg_ιd. a_bcm_call_data_ptr->common_data.pleg_ιd, a_bcm_call_data_ptr->common_da a .bcsm_ιd) , /* Depending on whether we had sent a CONNECT_TONE or not (in case of term access being NON_ISDN line we send a connect tone) we need to disconnect the tonp before sending a connect 2way '/ f (a_bcm_call_data_ptr->cs .orιg.conn_rιng_back_flag == TRUE) ( /* send a disconn tone and wait for a response '/ memset ((void * )4vs_ιpc_msg.data(0) , 0, sizeof ( KEDS_MSG_≤ ) ) , vs_meds_msg_ptr = (MEDS_MSG_S * ) 4 (vs_ιpc_msg data[0]), vs_meds_msg_ptr->pπm_ιd = MEDS_DISC_T0NES_CMD, vs_meds_msg_ptr->pass_thru = M_CALS_gen_pass hru(a_bcm_call_data_ptr->common_data.pleg_ιd, 0,0), vs_meds_msg_ptr->log_dev = a_bcm_call_data_ptr->ong_log_dev_ιd, vs_meds_ιnεg_ptr->rep_cntrl = L_RET_ALL, if (f_MEDS_sndCmdMsg (4vs_ιpc_msg) < 0) ( trFailCNISDN.10]MEDS sndCmdMεg ERR »d.%s,BCSM %d" , errno, f_MEDS_εtrerro (errno) , a_bcm_call_data_ptr->coιt-non_data bcεm_ιd) , return (-1) ; return (1) ; ) /* Send conn_2way ■ / else ( return (f_bcm_oproc26 (a_bcm_call_data_ptr ) ) . ) Thu Jun 2718.11:231996 NISDN_oproc.c 20 Page 20 of 29 -17^- Thu Jun 2718:11:231996 f_bcm_oproc28 Page 21 of 29 ******** Name Synopsis Description Author Pai an Nodousham Date 1st released Aug 11, 95 Input parameters Seturn value Revision history Date Owner Description ************* int £_b~-_oproc2β ( BCM_CALL_DATA_Ξ *a_bcm_call_data_ptr ) ( IPCmεg_t vs_ιpc_msg; IBSS_MSG_HDR_S vs_ιbsε_msg_hdr , IBSS_MSG_PRM_S vs_ibsε_mεg_param; trinfo ( "NISDN: [0] in oproc2S , CS : %d, CLEG : %d, PLEG : %d, BCSM : %d" , a_bcm_call_data_ptr-?corrarιon_data . cs_ιd, a_bcm_call_data_ptr->corrurιon_data . cleg_ιd, a_bcm_call_data_ptr->coιranon_data.pleg_ιd, a_bcm_call_data_ptr->common_data.bcsm_ιd) , /* Send answer signalling and go to the next internal state memset ((void * ) 4vs_ibss_msg_hdr , 0, sizeof (IBSS_MSG_HDR_S) ) ; memset ((void * )4vε_ibεε_msg_param, 0, εizeof ( IBSS_MSG_PRM_S) ) ; vs_ιbss_msg_hdr.prim_id = IBSS_ANSWER_REQ; vs_ιbss_msg_hdr .paεs_thru = M_CALS_gen_paεsthru(a_bcm_call_data_jptr->common_data.pleg_ιd, 0,0): vs_ιbss_msg_hdr . log_dev = a_bcm_call_data_ptr->ong_log_dev_ιd; vs_ιbεs_msg_hdr.rep_cntrl = L_IBSS_RET_ERR; if ( f_IBSS_putHdr (4vs_ιpc_msg, 4vs_ibss_msg_hdr ) 0) ( trFailCNISDN: [O) IBSS putHdr ERR: %d, %S, BCSM: %d" , errno, f_IBSS_strerror (errno) , a_bc-_call_data_ptr->common_da a.bcsm_ιd) ; return (-1 ) ; ) vs_ιbsε_mεg_param.param_ιd = L_PRM_EOP; f (f_IBSS_putNextParam (4vε_ιpc_msg, 4vs_ιbss_msg_param) < 0) ( trFailCNISDN: [01 IBSε putNextParam ERR: %d, %ε, BCSM: %d" , errno, f_IBSS_strerror (errno) , a_bcm_call_data_ptr->coπ-non_data bcsm_ιd) , return (-1 ) ; ) if (f_IBSS_sndMsg(4vε_ιpc_msg) < 0) ( trFailCNISDN: [O) IBSS sndMsg ERR: %d, %s, BCSM. %d" , errno, f_IBSS_strerror (errno) , a_bcm_call_data_ptr->coιrαnon_data . bcsm_ιd) ; return (-1) ; return (0) , Thu Jun 2718:11:231996 NISDN_oproc.c 21 Page 21 of 29 -175- Thu Jun 2718: 11:231996 f_bcm_oproc35 Page 22 of 29 ******************** ********* Name Synopsis Description Author Paiman Nodousham Date 1st released Aug 11, 95 Input parameters Return value Revision history Date Owner Description ************** ******** ********* t £_bα_ι_oproc35 ( BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( CONS_MARK_IDLE_CMD_S vε_cons_mark_ιdle_mεg , dword_t vε_cons_pass_thru, trInfoCNISDN: [0] in oproc35,CS : %d,CLEG: %d, PLEG: %d, BCSM: %d" a_bcm_call_data_ptr->common_data. cs_ιd, a_bcm_call_data_ptr->common_data.cleg_ιd. a_bcιr_call_data_ptr->commαn_data.pleg_ιd, a_bcm_call_data_ptr->cσmmon_data.bcsιr_ιd) , Send cons_mark_ιdle_dev message -/ memset ((void * ) vs_cons_mark_ιdle_mεg, 0, εizeof (CONS_MARK_IDLE_CMD_S) ) ; vs_cons_mark_ιdle_ms . log_dev = a_bcm_call_data_ptr->or ιg_log_dev_ιd; vs_cons_pass_thru = M_CALS_gen_passthru(a_bcm_call_data__ptr->cornrnon_data pleg_ιd, 0,0); if ( f_CONS_mark_ιdle_aεync (vs_conε_pass_thru. L_CONS_RET_NONE , 4vs_cons_mark_ιdle_msg) < 0) ( trFail ( "NISDN: |0)CONS mark_ιdle_async ERR:%d. %s . LOGDEV.0x%x, BCSM: %d" errno, f_CONS_strerror (errno) , a_bcm_call_data_ptr->orιg_log_dev_ιd, a_bcm_call_data_ptr->comrnon_data. bcsm_ιd) , Free Logical Device from CALS resources V if (f_CALS_reset_logdevTB (a_bcm_call_data_ptr->orιg_log_dev_ιd) < 0) ( trFailCNISDN: [OICALS reset_logdevTB ERR. %d, %s , LOGDEV 0x%x. BCSM: %d" , errno, f_CONS_s trerror (errno) , a_bcm_call_data_ptr->orιg_log_dev_ιd, a_bcm_call_data_ptr->common_data bcsm_ιd) ; ) return (0) ; Thu Jun 2718.11:231996 NISDN_oproc.c 22 Page 22 of 29 Thu Jun 2718:11:231996 f_bcm_oproc37 Page 23 of 29 *********** ******** ******** Name Synopsis Description Author Pai an Nodouεhani Date 1st released Aug 11, 95 Input parameters Return value Revision history * Date Owner Description ********** int £_bca_oproc37 (BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( CONS_MARK_IDLE_CMD_S vε_conε_mark_ιdle_ms ; dword_t vs_cons_pass_thru, trInfoCNISDN: [01 oproc37 ,CS:%d,CLEG:%d, PLEG: %d, BCSM: %d" , a_bcm_call_data_ptr->coπunon_data . cs_ιd, a_bcm_call_data_ptr->common_data.cleg_ιd, a_bcm_call_data_ptr->coπunon_data.pleg_ιd, a_bcm_call_data_ptr->common_data.bcsm_ιd) , /' Send cons_mark_ιdle_dev message */ memset ((void * ) vs_cons_mark_ιdle_msg, sizeof (CONS_MARK_IDLE.CMD_S) ) , vs_cons_mark_idle_jmεg. log_dev = a_bcm_call_data_ptr->orιg_log_dev_ιd, vε_conε_pass_thru = M_CALS_gen_passthru(a_bcm_call_data_ptr->common_data.pleg_ιd, 0,0); if (f_CONS_mark_idle_async (vε_conε_paεε_thru, L_CONS_RET_AL , 4vε_conε_mark_ dle_mεg) < 0) ( trFail CNISDN: [OJCONS mark_ιdle_async ERR %d,%s LOGDEV:0x%x BCSM:%d" errno, f _C0NS_str error (errno) , a_bcπ_.call_data_ptr->orιg_log_dev_ιd, a_bcm_call_data_ptr->common_data.bcεm_ιd) ; return (-1) , Free Logical Device from CALS resources '/ if (f_CALS_reset_logdevTB (a_bc~_call_data_ptr->orιg_log_dev_ιd) < 0) ( trFailCNISDN: 10) CALS reset_logdevTB ERR : %d. %s, LOGDEV: 0x%x, BCSM %d" , errno, f_CONS_strerror (errno) , a_bcm_call_data_ptr->orιg_log_dev_ιd, a_bcm_call_data_ptr->common_data.bcsm_ιd) , return (-1) ; ) return (0) ; Thu Jun 2718:11:231996 NISDN_oproc.c 23 Page 23 of 29 Thu Jun 27 18:11:23 1996 _.bcm_oproc37 Page 23 of 29 Name Synopsis Description Author Paiman Nodoushani Date 1st released Aug 11. 95 Input parameters Return value Revision history * Date Owner Description int £_bcm_oproc37 (BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( CONS_MARK_IDLE_CMD_S vs_cons_mark_ιdle_msg; dword_t vs_cons_pasε_thru, trinfo ( "NISDN : [0] in oproc37 , CS : %d, CLEG ■ %d , PLEG : %d , BCSM: %d " a_bcm_call_data_ptr->common_data.cs_ιd, a_bcm_call_data_ptr->common_data. cleg_ιd, a_bcm_call_data_ptr->common_data.pleg_ιd, a_bcm_call_data_ptr->conunon_data.bcsm_id) ; /* Send coπs_ιnark_2dl e_dev message */ memset I (void • ) vs_cons_mark_ιdle_msg, 0, sizeof (CONS_MARK_IDLE_CMD_S) ) , vs_cons_mark_ιdle_mεg . log_dev = a_bcm_call_data_ptr->orιg_log_dev_ιd; vε_conε_paεε_thru = M_CALS_gen_pasε hru(a_bcm_call_data__ptr->common_data.pleg_ιd, 0,0) ; if ( f_CONS_mark_idle_async (vs_cons_pass_thru, L_CONS_RET_ALL , 4vε_conε_mark_ιdle_msg) < 0) ( trFail CNISDN: [OJCONS mark_ιdle_async ERR-%d. *s. LOGDEV: 0x%x, BCSM:%d" errno, f_CONS_strerror ( errno) , a_bcrr_call_data_ptr->orιg_log_dev_ιd, a_bcm_call_data_ptr->common_data.bcsm_ιd) ; return (-1) ; Free Logical Device from CALS resources */ if ( f_CALS_reset_logdevTB (a_bcm_call_data_ptr->orιg_log_dev_ιd) < 0) ( trFail CNISDN : [ OJ CALS reset_logdevTB ERR - %d , Is , OGDEV - Ox%x , BCSM : %d" errno, f_CONS_strerror ( errno) . a_bcrr_call_data_ptr->orιg_log_dev_ιd, a_bcm_call_data_ptr->comrnon_data . bcsm_ιd) ; return ( -1 ) ; return ( 0 ) ; Thu Jun 27 18:11 :23 1996 NISDN_oproc.c 23 Page 23 of 29 Thu Jun 2718:11:231996 f_bcm_oproc 2 Page 24 of 29 / ******************* *********** ************* * ' Name ' Synopsis ' Description ' Author Paiman Nodousham ' Date 1st released Aug 11, 95 ' Input parameters ' Return value ' Revision history " Date Owner Description ************ ******** int £_bcπ_oproc42 (BCM_CALL_DATA_S *a_bcm_call_data_pt ) ( bcp_msg_t *vε_bcp_mεg_ptr , trInfoCNISDN: [0] in oproc42 , CS :%d, CLEG- %d, PLEG. %d, BCSM %d' , a_bcm_call_data_ptr->common_data. cε_ιd, a_bcm_call_data__ptr->common_data. cleg_ιd, a_bcm_call_data_ptr->common_data.pleg_ιd, a_bcm_call_data_ptr->common_data bcεm_ιd) , /' Send a T_ABANDON event to the terminating portion of the call V if ( (vε_bcp_msg_ptr = f_CALS_alloc_msgbuf ( ) ) == NULL) ( trFail CNISDN. [OJCALS alloc_msgbuf ERR-%d,BCSM %d , errno, a_bcm_call_data_ptr->common_data bcεm_ιd) , return (-1 ) ; ) vs_bcp_msg_ptr->msg_type = BCP_INTRN_CS_MSG, vs_bcp_msg_ptr->un . ιntrπ_cs_ms . orιg_bcsrr_ιd = a_bcm_cal l_data_pt r- >common_data bcsm_ιd , vs_bcp_msg_ptr->un. mtrn_cε_msg ιnd_typ = BCM_ORIG_TERMmsgT_ABANDON, if ( f_CALS_send_msg_to_peer (a_bcm_call_data_ptr->common_data pleg_ιd, vs_bcp_msg_ptr, DEFAULT_PRIORITY) < 0) ( trFailCNISDN. [OJCALS send_msg_to_peer ERR %d,BCΞM %d" errno, a_bcm_call_data_ptr->common_data.bcsm_ιd) , if ( f_CALS_free_msgbuf (vs_bcp_msg_ptr ) < 0) { trFailCNISDN CALS free_msgbuf failed' return (-1) , 1263 return ( 0) , 1264 Thu Jun 2718:11:231996 NISDN_oproc.c 24 Page 24 of 29 Thu Jun 27 18:11:23 1996 f_bcm_oproc37 Page 23 of 29 | Name Synopsis Description Author Paiman Nodoushani Date 1st released Aug 11 , 95 Input parameters Return value Revision history Da te Owner Description * * * * * * * * * * * * * int £_bc _oproc37 (BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( CONS_MARK_IDLE_CMD_S vs_cons_mark_ιdle_mεg; dword_t vε_conε_paεs_thru; trInfoCNISDN: [OJin oproc37 ,CS:%d, CLEG: %d, PLEG:%d, BCSM: %d" a_bcm_call_data_ptr->coιruτιon_data.cs_ιd, a_bcm_call_data_ptr->cθ-r~,on_data. cleg_ιd. a_bcm_call_data_ptr->common_data.pleg_ιd, a_bcm_call_data_ptr->cominon_data.bcsm_id) ; /' Send cons_mark_ιdle_dev message */ memset ((void * )4vs_cons_mark_ιdle_msg, 0, sizeof (CONS_MARK_IDLE_CMD_S) ) ; vs_cons_mark_ιdle_msg. log_dev = a_bcm_call_data_p r->orιg_log_dev_ιd; vε_cons_pasε_thru = M_CALS_gen_paεsthru (a_bcm_call_data_ptr->common_data.pleg_ιd, 0,0); if ( f_CONS_mark_idle_async (vs_cons_pass_thru, L_CONΞ_RET_ALL, &vε_cons_mark_ιdle_msg) < 0) ( trFail CNISDN: [OICONS mark_ιdle_async ERR %d , Is , LOGDEV: 0x%x, BCSM: %d" errno, f_CONS_strerror (errno) , a_bcm_call_data_ptr->orιg_log_dev_ιd, a_bcm_call_data_ptr->common_da a . bcsm_ιd) ,- return (-1) ; Free Logical Device from CALS resources "/ if ( f_CALS_reset_logdevTB (a_bcm_call_data_ptr->ong_log_dev_ιd) < 0) ( trFailCNISDN: [OJCALS reεet_logdevTB ERR: %d, %s , LOGDEV: 0x%x, BCSM: %d" errno, f_CONS_strerror (errno) . a_bcm_call_data_ptr->orιg_log_dev_ιd. a_bcm_call_data_ptr- >comrnon_data . bcεm_id) ; return ( -1 ) ; ) return ( 0 ) ; Thu Jun 27 18: 11:23 1996 NISDN_oproc.c 23 Page 23 of 29 Thu Jun 2718:11:231996 f_bcm_oproc45 Page 26 of 29 1322 ******* 1323 1324 Name 1325 Synopsis 1326 Description 1327 Au thor Pai an Nodoushani 1328 Date 1st released Aug 11, 95 1329 Input parameters 1330 Return value 1331 Revision history 1332 1333 * Date Owner Description 1334 1335 ******* ******* 1337 mt £_bcm_oproc45 ( BCM_CALL_DATA_S *a_bcm_call_data_ptr ) 1338 { 1339 IPCmsg_t vs_ιpc_msg; 1340 IBSS_MSG_HDR_S vs_ιbss_msg_hdr , 1341 IBSS_MSG_PRM_S vs_ιbss_msg_param, trInfoCNISDN: [OJ in oproc45,CS: %d,CLEG:%d, PLEG: %d, BCSM. %d" a_bcm_call_data_ptr->common_data.cs_ιd, a_bcm_call_data_jρtr->corrarιon_data.cleg_ιd, a_bcm_call_data_ptr->common_data.pleg_ιd, a_bcm_call_data_ptr->common_data.bcsm_ιd) , Send a RELEASE ^ REQUEST message and wait for its response memεet ( (void ' ) 4 vs_ιbεs_mεg_hdr , sizeof (IBSS_MSG_HDR_S) ) ; memset ( (void ' )4vs_ιbss_msg_para~, sizeof (IBSS_MSG_PRM_S) ) ; vs. _ιbss_msg_hd .prιm_ιd = IBSS_RELEASE_REQ ; vε. _ιbss_msg_hdr ,pasε_thru = M_CALS_gen_paεsthru (a_bcm_call_data_ptr->common_data pleg_ιd, 0,0), vε. _ιbss_mεg_hdr . log_dev = a_bcm_call_data_ptr->orιg_log_dev_ιd, vε. _ιbsε_msg_hdr .rep_cntrl = L_IBΞS_RET_CNF_ERR; if ( f_IBSS_putHdr (4vs_ιpc_msg, 4vs_ιbsε_msg_hdr ) < 0) ( trFailCNISDN- [O] IBSS putHdr ERR: %d, %s, BCSM: %d" , errno, f_IBSS_strerror (errno) , a_bcm_cal l_data_ptr- >coπunon_data . bcsm_ιd ) , return (-1) ; vs. _ιbss_msg_param.paraιr_ιd = L_PRM_EOP; if (f_IBSS_putNextParam (4vs_ιpc_msg, 4vε_ιbεε_msg_param) < 0) ( trFailCNISDN. [O] IBSS putNextParam ERR: %d, %s, BCSM. %d" . errno, f_IBSS_εtrerror (errno) , a_bcm_call_data_ptr->common_data.bcsm_ιd) , return (-1) ; } if (f_IBSS_sndMsg(4vs_ιpc_msg) < 0) ( trFailCNISDN: [OJ IBSS sndMsg ERR:%d, %s, BCSM: *d' , errno, f_IBSS_s trerror (errno) . a_bcm_call_data_ptr->common_data bcsm_ιd) return (-1) ; return (0) , Thu Jun 2718:11:231996 NISDN_oproc.c 26 Page 26 of 29 Thu Jun 2718:11:231996 f_bc _oproc43 Page 25 of 29 /" * Name * Synopsis * Description * Author Paiman Nodousham * Date 1st released Aug 11, 95 ' Input parameters " Return value * Revision history Date Owner Description ******* int £_b-m_oproc43 ( BCM_C ALL_DA A_S *a_bcm_call_data_ptr ) ( bcp_rasg_t *vs_bcp_msg_ptr , trinfo ( "NISDN: [OJ in oproc43 , CS : d, CLEG : d, PLEG: %d, BCSM: %d" , a_bcm_call_data_ptr->common_data. cs_ιd, a_bcm_call_data_ptr->common_data. cleg_ιd, a_bcm_call_data_ptr->common_data.pleg_ιd, a_bcm_call_data_ptr->common_data.bcsm_ιd) , /* Send T_DISCONN_PASSIVE to the terminating call side = f_CALS_alloc_mεgbuf ( ) ) == NULL) trFailCNISDN: [OJCALS alloc_msgbuf ERR: %d, BCSM: %d" , errno, a_bcm_call_data_ptr->coiamon_data.bcsm_id) , return (-1) ; vs_bcp_mεg_ptr->msg_type = BCP_INTRN_CS_MSG; vs_bcp_msg_ptr->un. ιntrn_cε_msg .orιg_bcsm_ιd = a_bcm_call_data_ptr->common_data.bcsm_ιd; vs_bcp_msg_ptr->un. mtrn_cs_msg. ιnd_typ = BCM_ORIG_TERMmsgT_DIΞCONN_PASSIVE, if (f_CALS_send_msg_to_peer (a_bcm_call_data_ptr->common_data.pleg_ιd, vs_bcp_msg_ptr, DEFAULT_PRIORITY) < 0) ( trFailCNISDN: [OJCALS send_msg_to_peer ERR: %d, BCSM: %d" . errno, a_bcιr_call_data_ptr->common_data .bcεm_id) , if (f_CALS_free_msgbuf (vs_bcp_mεg_ptr) < 0) ( trFail CNISDN: CALS free_msgbuf failed") ; return (-1) ; return ( 0 ) ; Thu Jun 2718:11:231996 NISDN.oproc.c 25 Page 25 of 29 ThuJun 2718:11:231996 f_bcm_oproc48 Page 27 of 29 ******** ******** ******* Name Synopsis Description Author Paiman Nodoushani Date 1st released Aug 11, 95 Input parameters Return value Revision history Date Owner Description ********** t £_b_n_oproc48 (BCM_CALL_DATA_Ξ *a_bcm_call_data_j ? tr ) ( IPCmεg_t vs_ιpc_ms ; MEDS_MSG_S *vs_meds_msg_ptr , trInfoCNISDN- [OJ in oproc48, CS :%d, CLEG: %d, PLEG -%d, BCSM %d", a_bcm_call_data_ptr->common_data cs_ιd, a_bcm_call_data_ptr->common_data. cleg_ιd, a_bcm_call_data_ptr->common_da a pleg_ιd, a_bcm_call_data_ptr->common_data.bcεm_ιd) /" Send a meds_connect_tone to connect a reorder tone '/ memset ((void * ) vs_ιpc_msg datalOJ, 0. sizeof (MEDS_MSG_S) ) , vs_meds_msg_ptr = (MEDS_MSG_S * ) 4 (vs_ιpc_msg .data(0 ) ) , vε_meds_msg_ptr->prιm_ιd = MEDS_CONN_TONE_CMD, vs_meds_msg_ptr->pass_thru = M_CALS_gen_passthru(a_bcm_call_data_ptr-> ommon_data.pleg_ιd, 0,0), vε_meds_msg_ptr->log_dev = a_bcm_call_data_ptr->orιg_log_dev_ιd, vε_medε_msg_ptr->rep_cntrl = L_RET_NACK, V8_meds_msg_ptr->msg_data. conn_tone_cmd. tone = L_T0NE_RE0RDER, f ( f_MEDS_sndCmdMsg (4vs__ιpc_msg) < 0) ( trFail ("NISDN [OJMEDS εndCmdMsg ERR %d,%i BCSM *d' errno, f_MEDS_strerror (errno) , a_bcm_call_data_ptr->common_data bcsιr_ιd) , return (-1) , ) return (0) , Thu Jun 2718:11:231996 NISDN_oproc.c 27 Page 27 of 29 -183- Thu Jun 2718:11231996 f_bcm_oproc49 Page 28 of 29 ******* Name Synopsis Description Author Paiman Nodoushani Date 1st released Aug 11, 95 Inpu parameters Return value Revision history Owner Description int f_bcm_opro_49 (BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( IPCmsg_t vs_ιpc_msg ; MEDS_MSG_ * vs_meds_msg_ptr ; trInfoCNISDN: [OJm oproc49, CS: %d, CLEG: %d, PLEG. %d, BCSM- %d" a_bcm_call_data_ptr->coπunon_data. cs_ιd. a_bcm_call_data_ptr->common_data leg_ιd, a_bcm_call_data_ptr->coιnjrιon_da a pleg_ιd, a_bcm_call_data_ptr->comιrιon_data bcsm_ιd) , /" Send a MEDS_CONNECT_TONE to connect a busy tone '/ memset ((void * ) 4vε_ιpc_mεg.data [01 , 0, sizeof (MEDS_MSG_≤) ) , vε_meds_msg_ptr = (MEDS_MSG_S *)4 (vs_ιpc_mεg datalOJ), vs_meds_msg_ptr->prιm_ιd = MEDS_CONN_TONE_CMD , vs_meds_msg_ptr->pass_thru = M_CALS_gen_passthru (a_bcm_call_data_ptr->common_da a .pleg_ιd, 0,0). vs_meds_msg_ptr->log_dev = a_bcm_call_data_ptr->orιg_log_dev_ιd, vs_meds_mεg_ptr->rep_cntrl = L_RET_NACK, vε_meds_mεg_ptr->mεg_data conn_tone_cmd. tone - L_TOMF._LINE_BUSY, if (f_MEDS_εndCmdMεg (4vε_ιpc_msg) < 0) ( trFailCNISDN: (OJMEDS sndCmdMsg ERR- %d, %s, BCSM. %d" , errno, f_MEDS_s trerror (errno) , a_bcm_call_data_p r->common_da a.bcsm_ιd) ,- return (-1) ,- ) return (0), Thu Jun 2718:11:231996 NISDN_oproc.c 28 Page 28 of 29 Thu Jun 271811231996 f_bcm_oproc52 Page 29 of 29 ********** Name Synop is Description Author Paiman Nodoushani Date 1st released Aug 11, 95 Inpu parameters Return value Revision history * Date Owner Description * ——_.——- ******** *********** ********** int £_bcn_oproc52 (BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( IPCmsg_t vs_ιpc_msg, IBSS_MSG_HDR_S vε_ιbεε_mεg_hdr IBSΞ_MSG_PRM_S vs_ιbεs_msg_param trInfoCNISDN [O] in oproc52,CΞ %d,CLEG %d, PLEG %d BCSM %d" a_bcm_call_data_ptr->common_data cs_ιd a_bcm_call_data_ptr->common_data cleg_ d a_b_n_call_data_ptr->common_da a pleg_ιd a_bcm_call_data_ptr->common_data bcsm_ιd) /* Send a RELEASE_REQUEST message memεet ((void * ) 4vs_ιbss_mεg_hdr sizeof (IBSS_MSG_HDR_S) ) memset ((void * ) 4vs_ιbsε_msg_param sizeof (IBΞS_MSG_PRM_S) ) vs_ιbss_msg_hdr pπm_id = IBΞS_RELEASE_REQ vε_ιbss_msg_hdr pass_thru = M_CALS_gen_passthru(a_bcm_call_data_ptr->common_data pleg_ιd 0 0) vs_ιbss_msg_hdr log_dev = a_bcm_call_data_ptr->oπg_log_dev_ιd vs_ιbsε_mεg_hdr rep_cntrl = L_IBSS_RET_CNF_ERP if (f_IBΞS_putHdr (4vs_ιpc_msg 4vs_ιbss_msg_hdr ) 0) ( trFailCNISDN [OJIBSS putHdr ERR %d %s BCSM %d" errno f_IBSS_strerror (errno) a_bcm_call_data_ptr->common_da a bcsm_ιd) return (-1) vs_ιbεε_msg_param param_ιd = L_PRM_EOP if ( f_IBSS_putNextParam (4vs_ιpc_msg 4vs_ibss_msg_param) < 0) ( trFailCNISDN [OJIBSS putNextParam ERR %d %s BCSM *d" errno, f_IBSS_strerror (errno) a_bcm_call_data_ptr->common_data bcsm_ιd) return (-1) , ) if (f_IBSS_sndMsg(&vs_ipc_msg) < 0) { trFailCNISDN [OJIBSS εndMsg ERR %d,%s BCSM %d errno f_IBSS_strerror (errno) a_bcm_call_data_ptr->common_da bcsm_ιd) return (-1) , ) return (0), ThuJun271811231996 NlSDN_oprocc 29 Page 29 of 29 -185- Thu Jun 2718.11:531996 Page 1 of 20 static char rcειd[J = "SId NISDN_tproc cv 1 6 1996/06/06 22.03:29 demir Exp $ Copyright ( c) NewNet", ******** * Copyright (c) NewNet, Inc * All rights reserved ' This document contains confidential and proprietary information of NewNet * and any reproduction, disclosure, or use in whole or m part is expressly ' prohibited, except as may be specifically authorized by prior written * agreement or permission of NewNet. ************** * ******** ******** " VERSION SRevision: 1.6 $ * DATE $Date 1996/06/06 22 03.29 $ * ' MODULE NAME $RCSfιle- NISDN_tproc c.v $ ' AUTHOR * DESCRIPTION ' DATE 1st REL * REV. HIST Date Owner Description ********** • RESTRICTED RIGHTS LEGEND ' Use, duplication, or disclosure by Government Is Subject to restrictions as " set forth in subparagraph (c) (1) (n) of the Rights n Technical Data and * Computer Software clause at DFARS 252.227-7013 *************************** ******** Kinclude <εtdιo h> Iinclude <stdlιb h> ♦include <sys/tιme.h> (♦include <errno h> Hinclude <apι.h> Hinclude <εccp_εcpa.h> Hinclude <tcap.h> Kinclude <ADAP_G.h> Hinclude <SYS_G_types .h> Hinclude <SYS_G_accesε .h> Hinclude <SYS_G_mgrnt_εtateε h> Hinclude <Db.h> Hinclude <DB_G_feature_defε .h> Hinclude <DB_G_group . h> <CONS_G_HWCI_ιf . h> <CONS_G_CP_i .h> <IBSS_G_CP_ιf .h> <MEDS_G_CP_lf .h> <CONS_G_error . h> <IBSS_G_error .h> <MEDS_G_error h> <AIN02_G_oper . h> <CALS_G_cv_defs . h> <CALS_G_cm_msg . h> <CALS_G_αι_defε h> <CALS_G_Slp_lfc . <CALS_G_cm_apι . h> <CALS_G_TB_apι .h> <BCM_G.h> <BCM_G_lf .h> Hinclude <NISDN_L_lιne.h> *********** ********** ************ Thu Jun 2718:11.531996 NISDNJproc c 1 Page 1 of 20 Thu Jun 2718:11.531996 f_bcm_lproc1 Page 2 of 20 * Name " Synopsis * Description " Author Pai an Nodoushani * Date 1st released Aug 11, 95 ' Input parameters ' Return value * Revision history * Date Owner Description ***************************** int £_bαn_tprocl ( BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( BCM_ORIG_TERM_TERM_ATTEKPT_S * εp_mtrn_mεg , CALS_FTR_UPDATE_INFO_S vs_f tr_update_mf o , trInfoCNISDN: [TJ in tprocl.CS %d,CLEG %d,PLEG %d,BCSM %d" . a_bcm_call_data_ptr->common_data cs_ιd a_bcm_call_data_ptr->common_data cleg_ιd a_bcm_call_data_ptr->common_data.pleg_ιd a_bcm_call_data_ptr->common_data.bcsm_ιd) , /' Initialize any specific data to their default values a_bcm_call_data_ptr->cs. term.no_answer_tιmer = -1, a_bcm_call_data_ptr->cs. term.suspend_tιmer = -1, /' Set the call side to terminating a_bcιr_call_data_ptr->call_sιde = L_BCMcsTERMINATING, a_bcm_call_data_ptr->term_access_type = SYS_ACCESS_NON_ISDN, /* Save the data sent from the originating side m the call data structure '/ vεp_ιntrn_msg = (BCM_ORIG_TERM_TERM_ATTEMPT_Ξ *) ( (a_bcm_call_data_ptr->bcp_msg_ptr) ->un ιntrn_cε_mεg ιnd_data[0] ) , a_bcm_call_data_ptr->orιg_access_type = vsp_mtrn_mΞg->oπg_accesε_type, a_bcm_call_data_ptr->orιg_log_dev_ιd = vsp_intrn_msg->orig_log_dev_id, a_bcm_call_data_ptr->callιng_party_ιd = vsp_ιntrn_msg->callιng_party_ιd, a_bcm_call_data_ptr->callιng_party_ιd_flag = vsp_mtrn_msg->callιng_party_ιd_flag, a_bcm_call_data_ptr->called_party_ιd = vsp_ιntrn_msg~>called_party_ιd, a_bcm_call_data_ptr->called_party_ιd_flag = vsp_ιntrn_mεg->called_party_ιd_flag, /* Update feature list of TERM Party V memse (4vs_ftr_update_ιnfo un.wlιne_dιgιts, 0, sizeof (CALS_DIGITS_S) ) , memcpy ( (vs_f r_update_ιnfo . un . lιne_dιgιts . digits [0)1, 4 (a_bcm_call_data_ptr->called_party_ιd. igits [01 ) , a_bcm_call_data_ptr->called_party_ιd.dιg_count) , vs_f tr_update_mfo.un.wlιne_d gιts dιg_count - a_bcm_call_data_ptr->called_party_ιd dιg_count, if (f_CALS_update_ftr_lιst (a_bcm_call_data_ptr->common_data cs_ιd, 4vs_ftr_update_ιnfo) < 0) ( trFailCNISDN [TJCALS update_f tr_lιst ERR. %d, BCSM *d". errno, a_bcm_call_data_ptr->common_data bcsm_ιd) , ) a_bαn_call_data_ptr->ong_group_ιd = vsp_ιntrn_msg->orιg_group_ιd, a_bcm_call_data_ptr->orιg_group_ιd_f lag = vsp_mtrn_msg->orιg_group_ιd_f lag, a_bcm_call_data_ptr->term_group_ιd = vsp_mtrn_msg->term_group_ιd, a_bcιr_call_data_ptr->terτr_group_ιd_f lag = vsp_ιntrn_msg->term_group_ιd_f lag, return (0) , Thu Jun 2718:11:531996 NISDNJproc.c 2 Page 2 of 20 Thu Jun 2718:11:531996 f_bcm_tproc2 Page 3 of 20 ********* ******** Name Synopsis Description Author Pai an Nodousham Date 1st released Aug 11, 95 Input parameters Return value Revision history * Date Owner Description ************ ********* int £_bc _tproc2 (BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( DB_DN_DATA_S vs_dn_data; bcp_msg_t *vs_bcp_msg_ptr ; char terrn_party_dn[L_BCM_SIZEOF_BCM_DIGS] ; int vι_cnt; trInfoCNISDN: [T] in tproc2, CS: %d,CLEG. %d, PLEG. %d, BCSM: %d" . a_bcm_call_data_ptr->common_data. cs_ιd, a_bcm_call_data_ptr->coπunon_data. cleg_ιd, a_bcm_ca1l_da a_ptr->common_data . i g_i , a_bcm_call_data_ptr->common_da a.bcsrn_ιd) , /* Read the dn_profιle database using the called_party_ιd '/ memse (4vs_dn_data, 0, sizeof (vε_dn_data) ) ; memcpy (4 (vs_dn_data.dn[0J ) , 4 (a_bcm_call_data_ptr->called_party_ιd.dιgιts(OJ ) , a_bcm_call_data_ptr->called_party_ιd . dιg_count ) ; f (f_CALS_fetch_dn_prof ileDB (4vs_dn_data) < 0) ( M_DN_convert (a_bcm_call_data_ptr->call d_party_ id. digits , a_bcm_call_data_ptr->called_party_ιd.dιg_count , term_party_dn,vι_cnt) . trFail CNISDN: ITICALS f etch_dn_prof 1 leDB ERR : %d, DN<%s> , BCSM: %d" , errno, term_party_dn, a_bcιr_call_data_ptr->comreon_data .bcsm_ιd) ; return (-1) ; ) else { /• SHOULD GET OUTGOING LOGICAL DEVICE FROM DB •/ a_bcm_call_data_ptr->term_group_ιd = vs_dn_data.group; a_bcm_call_data_ptr->terτn_group_ιd_flag = TRUE, a_bcm_call_data_ptr->cs. term. erm_authorιzation = vε_dn_data. erm_auth; a_bαn_call_data_ptr->term_log_dev_ιd = vε_dn_data. evice; trInfoCNISDN: [TJLOGDEV: 0x%x, BCSM: %d" , vs_dn_data .device, a_bcm_call_data_ptr->common_data.bcsm_ d) ; Verify authorization */ if (a_bcm_call_data_ptr->cs. term. term_authorιzatιon == AUTH_NOT_USED) ( return (0) /* If authorization failed send o_called_party_busy and leave the pic */ else { if ( (vs_bcp_msg_ptr = f_CALS_alloc_msgbu ( ) ) == NULL) ( trFail CNISDN: CALS alloc msαbuf ERR : d. BCSM: %d" . Thu Jun 2718:11:531996 NlSDN proc.c 3 Page 3 of 20 Thu Jun 2718:11:531996 f_bcm_lproc2 Page 4 of 20 errno, a_bcm_call_data_ptr->comιnon_data.bcsm_ιd) ; ) vs_bcp_msg_ptr->msg_type = BCP_INTRN_CS_MSG; vs_bcp_msg_ptr->un . intrn_cs_msg . orig_bcsm_id = a_bcm_call_data_ptr->coπr-non_data.bcsm_id; vε_bcp_mεg_ptr->un. intrn_cε_msg . md_typ = BCM_TERM_ORIGmεgO_CALLED_PARTY_BUSY; ( (BCM_TERM_ORIG_0_CALLED_PARTY_BUSY_S *) 4 (vs_bcp_msg_ptr->un. intrn_cs_ms . ιnd_data[0] ) ) ->teπn_access_type = a_bατ_call_data_ptr->term_access_type; ( (BCM_TERM_ORIG_0_CALLED_PARTY_BUSY_Ξ « ) 4(vs_bcp_msg_ptr->un. intrn_cs_mεg. d_data(0J ) ) ->user_busy_f lag = FALSE; l f ( f _CALS_send_mεg_to_peer ( a_bcm_cal l_data_ptr- >common_data . pleg_ιd , vs_bcp_msg_ptr, DEFAULT_PRIORITY) < 0) ( trFail CNISDN: [TJCALS send_mεg_to_peer ERR. %d. BCSM: %d" , errno, a_bcm_call_data_ptr->common_data.bcsm_ιd) ; if (f_CALS_free_msgbuf (vs_bcp_msg_ptr ) < 0) ( trFail CNISDN: CALS free_msgbuf failed") ; ) return (-1) ) return ( 1 ) ; Thu Jun 2718:11:531996 NISDNJprocx 4 Page 4 of 20 -I89- Thu Jun 2718:11:531996 f_bcm_tproc3 Page 5 of 20 ************* ****** Name Synopsis Description Author Paiman Nodousham Date 1st released Aug 11, 95 Input parameters Return value Revision history Date Owner Description ********* ************** mt £_bcπ_ proc3 ( BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( CONS_MARK_BUSY_CMD_S vs_ccns_mark_buεy_msg , d ord_t vs_cons_pas8_thru, trInfoCNISDN: [TJin tproc3 ,CS:%d, CLEG: %d, PLEG: %d, BCSM: d" , a_bcm_call_data_ptr->common_data.cs_ιd, a_bcιrι_call_data_ptr->common_data.cleg_ιd, a_bcm_call_data_ptr->common_da a.pleg_ιd, a_bcm_call_data_ptr->common_data.bcsm_ιd) ; /* Send CONS_MARKBUSY_REQ , suspend and go to the next internal state •/ memεet ((void * )4vε_cons_mark_busy_msg, 0, sizeof (CONS_MARK_BUSY_CMD_S ) ) ; vs_cons_mark_busy_msg.dιr = L_DIR_OUTG0ING, vs_cons_mark_busy_msg . ype = L_TYPE_NORMAL_CALL; vs_cons_mark_busy_msg.log_dev = a_bcm_call_data_ptr->term_log_dev_ιd, vs_cons_pasε_thru = M_CALS_gen_pass hru(a_bcm_call_data_ptr->common_data.pleg_ιd, 0,0); if (f_CONS_mark_busy_async (vs_cons_pass_thru, L_CONS_RET_ALL, 4vs_cons_mark_busy_msg) < 0) ( trFail ( "NISDN: [T] CONS mark_busy_async ERR- %d, %s, BCSM: %d" , errno, f _C0NS_str error (errno) , a_bcm_call_data_ptr->coπ-non_data bcsm_ιd) ; return (-1) ; 300 return (0) , 301 Thu Jun 2718:11:531996 NISDN proc.c 5 Page 5 of 20 -191- Thu Jun 2718:11:531996 f_ocm_tproc4 Page 7 of 20 return (0) , Thu Jun 2718:11:531996 NISDNJproc.c 7 Page 7 of 20 -192- Thu Jun 2718:11:531996 f_bcm_tproo5 Page 8 of 20 /" *********** * Name * Synopsis * Description ' Author Paiman Nodoushani ' Date 1st released Aug 11, 95 * Input parameters * Return value * Revision history * Date Owner Description ************************ ******** int £_bαβ_tproc5 ( BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( bcp_msg_t *vs_bcp_msg_ptr ; trinfo ( "NISDN: [T] n tproc5 , CS : %d , CLEG . %d, PLEG : %d, BCSM: %d " , a_bcm_call_data_ptr->common_data. cs_ιd, a_bcm_call_data_ptr->common_data. cleg_ιd, a_bcm_call_data_ptr->coιranon_data.pleg_ιd, a_bcιr_call_data_ptr->common_data .bcεm_ιd) , /' CONS_MARK_BUSY_DEV NACK received, depending on the routing do . The routing is fixed for non-isdn lines [TJ so send a 0_CALLED_PARTY_BUSY to origination side. '/ if ( (vs_bcp_msg_ptr = f_CALS_alloc_msgbuf ( ) ) == NULL) ( trFailCNISDN: [TJCALS alloc_msgbuf ERR: %d, BCSM:%d" , errno, a_bcm_call_data__ptr-?common_data . bcεm_ιd) ; return (-1) ; } vs_bcp_msg_ptr->msg_type = BCP_INTRN_CS_MSG, vs_bcp_mεg_ptr->un. ιntrn_cs_mεg.orιg_bcsm_ιd = a_bcm_call_data_ptr->common_data.bcsm_ιd; vs_bcp_mεg_ptr->un . intrn_cs_ms . ind_typ = BCM_TERM_ORIGmεgO_CALLED_PARTY_BUSY ; ( (BCM_TERM_ORIG_0_CALLED_PARTY_BUSY_S *) (vs_bcp_msg_ptr->un. intrn_cs_msg. ιnd_data(0) ) ) ->teπr_acceεs_type = a_bcm_call_data_ptr->term_accesε_type; ( (BCM_TERM_ORIG_0_CALLED_PARTY_BUSY_S *) (vs_bcp_msg_ptr->un. ιntrn_cs_msg. md_data [0 J ) ) ->user_busy_f lag = TRUE, if (f_CALS_εend_msg_to_peer (a_bcm_call_data_ptr->comraon_data.pleg_ιd, vε_bcp_msg_ptr, DEFAULT_PRI0RITY) < 0) ( trFailCNISDN: [TJCALS send_msg_to_peer ERR: %d,BCSM:%d" , errno, a_bcm_call_data_ptr->common_data.bcsm_ιd) ; if (f_CALS_free_mεgbuf (vs_bcp_mεg_ptr) < 0) ( trFail CNISDN: CALS free_msgbuf failed"); ) return (-1) ; ) return (0) ; Thu Jun 2718:11:531996 NISDNjprocc 8 Page 8 of 20 Thu Jun 27 18:11:53 1996 f_bcm_tproc6 Page 10 of 20 522 1 523 1 Start T_NOANSWER timer V 525 1 return ( 0 ) ; 526 Thu Jun 27 18:11:53 1996 NISDN procc 10 Page 10 of 20 Thu Jun 2718:11:531996 f_bcm_tproc7 Page 11 of 20 Name Synopsis Description Author Paitnan Nodoushani Date 1st released Aug 11, 95 Inpu parameters Return value Revision history Date Owner Description ******** *************** *********** int £_bαn_tp-oc7 (BCM_CALL_DATA_S *a_bcιr_call_data_ptr ) ( bcp_msg_t *vs_bcp_msg_ptr ; trinfo ( "NISDN: [TJ in tproc7 , CS : %d, CLEG: %d, PLEG : %d, BCSM: %d" , a_bcm_call_data_ptr->common_data . cs_ιd, a_bcm_call_data_ptr->common_data.cleg_ιd, a_bcm_call_data_ptr->common_data.pleg_ιd, a_bcm_call_data_ptr->common_data .bcsm_ιd) ; /* send 0_TERM_SEIZED to originating side of the call and exit the pic '/ if ( (vs_bcp_msg_ptr = f_CALS_alloc_mεgbuf ( ) ) NULL) ( trFailCNISDN: [TJCALS alloc_msgbuf ERR. %d, BCSM %d", errno, a_bcm_call_data_ptr->coιrαnon_data .bcsm_ιd) , return (-1) ; ) vs_bcp_msg_ptr->msg_type = BCP_INTRN_CS_MSG, vs_bcp_msg_ptr->un. ιntrn_cs_mεg.orιg_bcsm_ιd = a_bcm_call_data_ptr->corru-on_da a bcsm_ιd, vs_bcp_msg_ptr->un . ιntrn_cs_msg . ιnd_typ = BCM_TERM_ORIGmsgO_TERM_ΞEIZED, ( (BCM_TERM_ORIG_0_TERM_SEIZED_S * ) 4 (vs_bcp_msg_ptr->un. ιntrn_cs_msg . ιnd_data (0) ) ) ->term_accesε_type = a_bcm_call_data_ptr->term_access_type, ( (BCM_TERM_ORIG_0_TERM_SEIZED_S *) 4 (vs_bcp_msg_ptr->un.ιntrn_cs_msg ιnd_data[0J ) ) ->term_log_dev_ιd = a_bcm_call_data_ptr->term_log_dev_ιd, if (f_CALS_send_msg_to_peer (a_bcm_call_data_ptr->common_data.pleg_ιd, vs_bcp_msg_ptr. DEFAULT.PRIORITY) < 0) ( trFail CNISDN: [TJCALS send_mεg_to_peer ERR %d.BCΞM *d", errno, a_bcm_call_data_ptr->common_data ,bcsm_ιd) ; if (f_CALS_f ee_msgbuf (vs_bcp_msg_ptr) < 0) { trFail CNISDN: CALS free_msgbuf failed"), ) return ( - 1 ) ; > return (0) ; Thu Jun 2718:11:531996 NISDNJproc.c 11 Page 11 of 20 Thu Jun 2718:11:531996 f_bcm_tprod 0 Page 12 of 20 /" * Name ' Synopsis ' Description ' Author Paiman Nodouεhani ' Date 1st released Aug 11, 95 ' Input parameters * Return value * Revision history Date Owner Description ********* int f_bcn_ proclO ( BCM_CALL_DATA_S *a_bcm_call_data_ptr ) ( I 606 bcp_msg_t *vε_bcp_msg_ptr ; trinfo ( "NISDN: [T) in tproclO,CS:%d, CLEG:%d, PLEG- %d, BCSM:%d" , a_bcm_call_data_ptr->common_data.cs_ιd, a_bcm_call_data_ptr->common_data . leg_ιd, a_bcm_call_data_ptr->comπ\on_data.pleg_ιd. a_bcm_call_data_ptr->common_data.bcsm_ιd) , /* cancel T NOANSWER timer send 0_ANSWER event to the originating side of the call. "/ if ( (vs_bcp_msg_ptr = f_CALS_alloc_mεgbuf ( ) : NULL) ( trFailCNISDN: [TJCALS alloc_msgbuf ERR: %d, BCSM:%d" . errno, a_bcm_call_data_ptr->common_data.bcsm_ιd) , return (-1) ; ) vs_bcp_msg_ptr->msg_type = BCP_INTRN_CS_MSG, vs_bcp_msg_ptr->un. ιntrn_cs_mεg.orιg_bcsm_ιd = a_bcm_call_data_ptr->common_data.bcεm_ιd; vs_bcp_msg_ptr->un. ιntrn_cs_ιnsg. ιnd_typ = BCM_TERM_ORIGmsgO_ANSWER, ( (BCM_TERM_ORIG_0_ANSWER_S • ) (vs_bcp_msg_ptr->un. ιntrn_cε_msg. ιnd_data [0! ) ) ->term_access_type = a_bcm_call_data_ptr->term_access_type, ( (BCM_TERM_ORIG_0_ANSWER_S * ) (vs_bcp_msg_ptr->un. ιntrn_cs_msg. ιnd_data [0] ) ) ->term_log_dev_ id = a_bcm_call_data_ptr->ter-_log_dev_ιd, if (f_CALS_send_msg_to_peer (a_bcm_call_data_ptr->common_data.pleg_ιd, vs_bcp_msg_ptr, DEFAULT_PRIORITY) < 0) ( trFailCNISDN: [TJ ALS send_msg_to_peer ERR: %d, BCSM: *d" , errno, a_bcm_call_data_ptr->coπunon_data.bcsm_ιd) ; if (f_CALS_free_ms_buf (vs_bcp_msg_ptr ) < 0) ( trFail ("NISDN:CALS free_msgbuf failed") , ) return (-1); ) return (0) Thu Jun 2718:11:531996 NISDN proc.c 12 Page 12 ol 20 ThuJun2718:11:531996 f_bcm_tproc12 Page 13 of 20 654 /" *********** ********* ************ 655 656 * Name * Synopsis * Description * Author Paiman Nodoushani ' Date 1st released Aug 11, 95 * Input parameters " Return value " Revision history * Date Owner Description ******** ******** int £_bcm_tprocl2 (BCM_CALL_DATA_Ξ *a_bcm_call_data_ptr ) ( bcp_msg_t *vs_bcp_msg_ptr ; 673 trinfo ( "NISDN: (TJ m tprocl2, CS :%d, CLEG :%d, PLEG: %d,BCSM:%d" , 674 a_bcm_call_data_ptr->conunon_data. cs_ιd, 675 a_bcm_call_data_ptr->common_data. cleg_id, 676 a_bcm_call_data_ptr->common_data.pleg_ιd, 677 a_bcm_call_data_ptr->common_data.bcsm_id) ; 678 /* 679 send 0_SUSPENDED event to the originating side of the call and exit pic 680 '/ 681 if ( (vε_bcp_mεg_ptr = f_CALS_alloc_msgbuf ( ) ) NULL) 682 { 683 trFail ("NISDN: [TJCALS alloc_msgbuf ERR :%d, BCΞM:%d" , 684 errno, a_bcm_call_data_ptr->common_data.bcεm_id) ; 685 return (-1) ; 686 ) 688 vs_bcp_msg_ptr->msg_type = BCP_INTRN_CS_MSG; 689 vs_bcp_msg_ptr->un . intrn_cs_msg . orig_bcsm_id = 690 a_bcm_call_data_ptr->comιrιon_data.bcsm_ιd; 691 vs_bcp_mεg_ptr->un.ιntrn_cε_mεg. md_typ = BCM_TERM_ORIGmsgO_SUSPENDED; 693 if (f_CALS_εend_mεg_to_peer (a_bcm_call_da ta_ptr- >common_da ta.pl eg_ιd, 694 vs_bcp_msg_ptr, DEFAULT_PRI0RITY) < 0) 695 ( 696 trFailCNISDN: [TJCALS send_msg_to_peer ERR %d,BCSM:%d", 697 errno, a_bcm_call_data_ptr->common_data .bcεm_ιd) ; 698 if (f_CALS_f ree_msgbuf (vs_bcp_msg_ptr) < 0) 699 ( 700 trFail CNISDN:CALS free_mεgbuf failed") , 701 702 return (-1 ) ; 703 ) 704 return (0) ; 705 Thu Jun 2718:11:531996 NISDNJproc.c 13 Page 13 of 20 ThuJun2718:11:531996 f_bcmJpfoc14 Page 14 of 20 Name Synopsis Description Author Paiman Nodoushani Date 1st released Aug 11, 95 Input parameters Return value Revision history Date Owner Description ************ ******* *********** mt £_b-π_tprocl4 ( BCM_CALL_DAT A_S *a_bcm_call_data_ptr ) ( CALS_TIMER_MSG_S vs_tιmer_ιnfo; trinfo ( "NISDN: IT) in tprocl4, CS: %d, CLEG:%d, PLEG :%d, BCSM: %d" a_bcm_call_data_ptr->common_data . cε_ιd, a_bcm_call_data__)tr->common_data. cleg_ιd, a_bcm_call_data_ptr->common_data.pleg_ιd, a_bcm_call_data_ptr->common_data.bcsιr_ιd) , /* start SUSPEND timer V vs_tιmer_ιnfo. tιmer_typ = BCM_TERMtmsgSUSPEND_TIMER, vs_tιmer_ιnfo.pleg_ιd = a_bcm_call_data_ptr->common_data .pleg_ιd, vs_tιmer_mfo.data_len = 0; if ( (a_bcrr_call_data_ptr->cs . term.suspend_tιmer = f_CALS_start_tιmer (4vs_tιmer_ιnfo, L_BCM_SUSPEND_TIMER_DEFAULT) ) < 0) ( trFailCNISDN: [TJCALS start_tιmer ERR- %d, BCSM: %d" , errno, a_bcm_call_data_ptr->common_data .bcsm_ιd) , return (-1) ; J return (0) ; Thu Jun 2718:11:531996 NISDN proc.c 14 Page 14 of 20 Thu Jun 2718:11:531996 f_bcm_tproc15 Page 15 of 20 /" ******** ******** ************* ******** * Name ' Synopsis * Description * Author Paiman Nodoushani * Date 1st released Aug 11, 95 * Input parameters * Return value * Revision history * Date Owner Description ******* int £_bcm_tprc.cl5 ( BCM_CALL_DATA_S *a_bcm_call_da a_p r ) ( trinfo ( "NISDN : [T] in tprocl5 , CS : %d, CLEG : %d, PLEG : % , BCSM : %d" , a_bcm_call_data_ptr->common_data . cs_ιd. a_bcm_call_data__ptr->common_data. cleg_ιd, a_bcm_call_data_ptr->common_data.pleg_ιd. a_bcm_call_data_ptr->common_data.bcεm_id) ; / » the caller also hung up. Cancel the SUSPEND timer and exit the pic '/ if ( f_CALS_stop_tιmer (a_bcm_call_data_ptr->cε . erm.suspend_tιmer ) < 0) ( trFailCNISDN: [TJCALS stop_tιmer ERR:%d, BCSM: %d" , errno, a_bcm_call_data_ptr->common_data .bcsm_ιd) ; return (-1) ; ) return (0) ; Thu Jun 2718:1 :531996 NISDN proc.c 15 Page 15 of 20 ThuJun2718:11:531996 f_bcm_tproc16 Page 16 of 20 784 785 786 Name 787 Synopsis 7«B Description 789 Author Pai an Nodoushani 790 Date 1st released Aug 11, 95 791 Input parameters 792 Return value 793 Revision history 794 795 Owner Description 796 797 ********* **************** 799 int £_bc-_tpro-16 (BCM_CALL_DATA_S *a_bcm_call_data_ptr ) 8 0 ( 801 bcp_msg_t *vs_bcp_msg_ptr; trInfoCNISDN: (TJin tprocl6,CS: %d, CLEG: %d, PLEG: %d, BCSM: %d" , a_bcm_call_data_ptr->common_data.cs_ιd, a_bcm_call_data_ptr->common_data.cleg_ιd, a_bctr_call_data_ptr->common_data.pleg_ιd, a_bcm_call_data_ptr->common_data.bcsm_ιd) , send 0_DISCONN_PASSIVE to the originating side of the call and exit the pic. if (f_CALS_delete_tιmer (a_bcm_call_data_ptr->cε . term.suspend_tιmer ) < 0) { trFail CNISDN. [TJCALS delete_tιmer ERR:%d, BCSM:%d" . errno, a_bcm_call_data_ptr->common_data.bcsm_ιd) , ) if ( (vε_bcp_msg_ptr = f_CALS_alloc_msgbuf ( ) ) == NULL) { trFailCNISDN: [TJCALS alloc_msgbuf ERR fcd.BCSM %d", errno, a_bcm_call_data_ptr->common_data.bcsrn_ιd) , return (-1) , ) vs_bcp_mεg__ptr->mεg_type = BCP_INTRN_CS_MSG, vs_bcp_msg_ptr->un. ιntrn_cs_msg.oπg_bcsm_ιd = a_bcm_call_data_ptr->coπuτιon_data.bcsm_ιd, vs_bcp_msg_ptr->un. ιntrn_cs_msg. ιnd_typ = BCM_TERM_ORIGmεgO_DISCONN_PASSIVE, if ( f_CALS_send_msg_to_peer !a_bcm_call_data_ptr->common_data.pleg_ιd, vε_bcp_msg_ptr, DEFAULT.PRIORITY) < 0) ( trFail CNISDN. [TJCALS send_msg_to_peer ER . %d, BCSM. %d" , errno, a_bcm_call_data_ptr->common_data .bcsm_ιd) , if ( f_CALS_free_msgbuf (vε_bcp_mεg_ptr ) < 0) trFail CNISDN. CALS free_msgbuf failed"), ) return (-1) ; ) return (0) ; Thu Jun 2718:11:531996 NISDN procc 16 Page 16 of 20 -201- ThuJun2718:11:531996 f_bcm_tproc15 Page 15 of 20 Name Synopsis Description Author Paiman Nodoushani Date 1st released Aug 11, 95 Input parameters Return value Revision history * Date Owner Description int f_bc-_tprocl5 ( BCM_CALL_DATA_S *a_bcm_cal l_data_ptr ) ( trInfoCNISDN: (TJin tproclS, CS:%d, CLEG: %d, PLEG: %d, BCSM: %d" a_bcιr_call_data_ptr->common_data.cε_id. a_bcm_call_data_ptr->common_data.cleg_ιd, a_bcm_call_data_ptr->common_data.pleg_ιd, a_bcm_call_data_ptr->common_data.bcsrr_ιd) ,- the caller also hung up. Cancel the SUSPEND timer and exit the pic */ if ( _CALS_εtop_tιmer (a_bcm_call_data_ptr->cs . term. suspend_tιmer ) < 0) ( trFailCNISDN: (TJCALS stop_tιmer ERR: %d, BCSM: %d" , errno, a_bcm_call_data_ptr->common_data.bcειr_id) ; return (-1) ; ) return (0) ; Thu Jun 2718:11:531996 NISDN proc.c 15 Page 15 of 20 ThuJun2718.11.531996 f_bcm_lproc17 Page 17 of 20 /* *********** ' Name * Synopsis * Description * Author Paiman Nodoushani * Date 1st released Aug 11, 95 * Input parameters * Return value * Revision history Date Owner Description ********** int £_bcan_tprocX7 ( BCM_CALL_DATA_S *a_bcm_call_data_ptr) ( CONS_MARK_IDLE_CMD_S vs_cons_mark_ιdle_ms , d ord_t vε_cons_pass_thru, trInfoCNISDN [TJin tprocl7,CS %d,CLEG %d, PLEG %d,BCSM %d" a_bcm_call_data_ptr->coπ-non_dat cs_ιd a_bcm_call_data_ptr->common_data cleg_ιd a_bcm_call_data_ptr->common_data pleg_ιd a_bcm_call_data_ptr->common_data bcsm_ιd) /• send CONS_MARK_IDLE_DEV message */ memset ((void * ) 4vs_cons_mark_ιdle_msg Sizeof (CONS_MARK_IDLE_CMD_S) ) vε_cσns_mark_ιdle_msg log_dev = a_bcm_call_data_ptr->terτn_log_dev_ιd vs_cons_pass_thru = M_CALS_gen_passthru(a_bcrr_call_data_ptr->comrrιon_data pleg_ιd, 0,0), if (f_CONS_mark_ιdle_async (vs_conε_pasε_thru L_CONS_RET_ALL 4vs_cons_mark_ιdle_msg) < 0) ( trFailCNISDN [TJCONS mark_ιdle_async ERR %d %s LOGDEV 0x%x BCSM %d" errno, f_CONS_strerror (errno) a_bcm_call_data_ptr->oπg_log_dev_ιd a_bcm_call_data_ptr->common_data bcsm_ιd) return (-1) , Free Logical Device from CALS resources */ if (f_CALS_reset_lσgdevTB (a_bcm_call_data_ptr->term_log_dev_ιd) < 0) ( trFailCNISDN [TJCALS reset_logdevTB ERR %d %s LOGDEV 0x%x,BCSM %d" errno, f_CONS_strerror (errno) a_bcm_call_data_ptr->orιg_log_dev_ιd a_bαrι_call_data_ptr->co _ mon_data bcsm_ιd) , return (-1) , return (0) Thu Jun 271811.531996 NISDN procc 17 Page 17 of 20 ThuJun2718:11:531996 f_bcm_tproc20 Page 18 of 20 ******* Name Synopsis Description Author Pai an Nodoushani Date 1st released Aug 11. 95 Input parameters Return value Revision history Date Owner Description ******** ******** mt f_bc-_tproc20 ( BCM_CALL_DATA_S *a_bcm_call_data_ptr) ( IPCmsg_t vs_ιpc_ms ; IBSS_MSG_HDR_S vs_ibεs_msg_hdr ,- IBSS_MSG_PRM_S vε_ i bε ε_mεg_par am ; trInfoCNISDN: [T] in tproc20, CS: %d,CLEG: %d, PLEG:%d, BCSM: %d" a_bcm_call_data_ptr->common_data.cs_ιd, a_bcm_call_data_ptr->common_data.cleg_ιd, a_bcm_call_data_ptr->common_data.pleg_ιd. a_bcm_call_data_ptr->common_data.bcsm_ιd) , /* send a RELEASE_REQUEST message and wait for its response memset I (void * )4vs_ibss_msg_hdr, 0, εizeof ( IBSS_MSG_HDR_S ) ) ; memset ((void * )4vs_ibss_rnsg_param, 0, sizeof ( IBSS_MSG_PRM_S ) ) ; vs_ibss_mεg_hdr .prim_id = IBSS_RELEASE_REQ; vε_ιbss_msg_hdr .paεε_thru = M_CALS_gen_passthru(a_bcm_call_data_ptr->common_data ,pleg_ιd, 0,0); vε_ibεε_mεg_hdr . log_dev - a_bcm_call_data_ptr->term_log_dev_ιd; vε_ιbεε_msg_hdr.rep_cntrl = L_IBSS_RET_CNF_ERR; if ( f_IBSS_putHdr (4vs_ipc_msg, 4vs_ibεΞ_msg_hdr) < 0) ( trFailCNISDN: [TJ IBSS putHdr ERR: %d, %s, BCSM:%d" , errno, f_IBSS_strerror (errno) , a_bcm_call_data_ptr->common_data. bcsm_ιd) ; return (-1) ; vs_ιbss_msg_param.paraιr_id = L_PRM_EOP; if ( f_IBSS_putNextParam (4vs_ιpc_msg, &vs_ιbss_msg_param) < 0) ( trFailCNISDN: [TJ IBSS putNextParam ERR: %d, %s, BCSM: %d" , errno, f_IBSS_strerror (errno) , a_bcm_call_data_ptr->common_data .bcsm_ιd) return (-1) ; if (f_IBSS_sndMεg(4vε_ιpc_mεg) < 0) { trFailCNISDN: [TJ IBSS εndMsg ERR : %d, %ε, BCSM: %d" , errno, f_IBSS_strerror (errno) , a_bcm_call_data_ptr->comιrton_data. bcsm_ιd) ; return (-1); return (0) ; Thu Jun 2718:11:531996 NISDN proc.c 18 Page 18 of 20 Thu Jun 2718: 11:531996 f_bcm_tproc26 Page 19 of 20 ******* ******** Name Synopsis Description Author Pai an Nodousham Date 1st released Aug 11, 95 Input parameters Return value Revision history Date Owner Description ******* int f_bc-_tproc26 (BCM_CALL_DATA_S *a_bcm_call_data_ptr) ( CONS_MARK_IDLE_CMD_S vs_conε_mark_ιdle_mεg ; dword_t vs_cons_pass_thru, trInfoCNISDN: [TJ tproc26, CS:%d, CLEG :%d, PLEG: %d, BCSM: %d" , a_bcm_cal l_data_ptr- >common_data . cs_ιd , a_bcm_call_data_ptr->common_data.cleg_ιd, a_bcm_call_data_ptr->common_data.pleg_ιd, a_bcm_call_data_ptr->coπunon_data.bcsrr_ιd) ; /" εend CONS_FREE_DEV message •/ memset ((void * )4vs_cons_mark_ιdle_msg, 0, sizeof (CONS_MARK_IDLE_CMD_S) ) , vs_cons_mark_idle_mεg . log_dev = a_bcm_call_data_ptr->term_log_dev_ιd; vs_cons_pass_thru = M_CALS_gen_pass hru (a_bcm_call_data_ptr->coιr-τιon_data.pleg_ιd, 0.0); if (f_CONS_mark_idle_async (vε_cons_pass_thru, L_C0NS_RET_NONE, 4vs_cons_mark_ιdle_mεg) < 0) ( trFailCNISDN: [Tl CONS mark_ιdle_async ERR: %d. %s , LOGDEV: 0x%x, BCSM:%d' , errno, f_CONS_strerror (errno) . a_bcm_call_data_ptr->term_log_dev_ιd, a_bcm_call_data_ptr->comon_data.bcsm_ιd) ; Free Logical Device from CALS resources '/ if (f_CALS_reset_logdevTB (a_bcm_call_data_ptr->terιr_log_dev_ιd) < 0) ( trFailCNISDN: [TJCALS reset_logdevTB ERR:%d, %s, LOGDEV: 0x%x, BCSM: %d" , errno, f_CONS_strerror (errno) , a_bcπ_call_data_ptr->terrr_log_dev_ιd, a_bcm_call_data_ptr->common_data .bcsm_ιd) , ) return (0) ; Thu Jun 2718:11:531996 NISDN procc 19 Page 19 ol 20 -205- Thu Jun 2718:11:531996 _bcm_tproc28 Page 20 of 20 /* ******* ************************** ***************** * Name * Synopsis * Description " Author Pai an Nodouεham * Date 1st released Aug 11. 95 * Input parameters ' Return value " Revision history ' Date Owner Description ******* ******* int £_bc-_tproc28 ( BCM_CALL_DAT A_Ξ *a_bcm_call_data_pt ) { IPCmsg_t vs_ιpc_mεg; IBSS_MSG_HDR_Ξ vs_ibss_msg_hdr ; IBSS_MSG_PRM_S vs_ibεs_msg_paraιn ; trInfoCNISDN: [TJin tproc28, CS: %d, CLEG: %d, PLEG: %d. BCSM: %d" , a_bcm_call_data_ptr->common_data. cs_ιd, a_bcm_call_data_ptr->common_data. cleg_ιd, a_bcm_call_data_ptr->common_data.pleg_id, a_bcιr_call_data_ptr->common_data.bcειr_ιd) ; /* send a RELEAΞE_REQUEST message and wait for its response memεet ((void *) 4vs_ibss_msg_hdr, 0, sizeof ( IBSS_MSG_HDR_S ) ) ,- memεet ((void * )4vs_ibss_msg_param, 0, εizeof ( IBSS_MSG_PRM_S) ) ,- vs_lbss_msg_hdr.prim_id = IBSS_RELEASE_REQ; vs_ibεε_mεg_hdr .pass_thru = M_CALS_gen_pasεthru (a_bcm_call_data_ptr->common_data.pleg_id, 0, 0) , vs_ibss_msg_hdr . log_dev = a_bcm_call_data_ρtr->term_log_dev_ιd; vs_ιbss_mεg_hdr .rep_cntrl = L_IBSS_RET_CNF_ERR ; if (f_IBSS_putHdr (&vε_ιpc_mεg, 4vs_ιbεs_msg_hdr) < 0) < trFailCNISDN: [T] IBSS putHdr ERR: %d, ε, BCSM: %d" , errno, f_IBSS_strerror (errno) , a_bcm_call_data_ptr->common_data.bcsm_ιd) ; return (-1) ,- vs_ιbss_msg_parajn.paraιrι_id = L_PRM_E0P; if (f_IBSS_putNextParam (4vs_ipc_msg, 4vs_ιbss_msg_param) < 0) ( trFail ( "NISDN: [TJ IBSS putNextParam ERR: %d. %s, BCSM: %d" . errno, f_IBSS_strerror (errno) , a_bcm_call_data_ptr->common_data.bcsm_ιd) ; return (-1) ; ) if (f_IBSS_sndMsg(4vs_ipc_msg) < 0) { trFail CNISDN: [T] IBSS sndMsg ERR: %d, %s, BCSM: %d" , errno, f_IBSS_strerror (errno) , a_bcm_call_data_ptr->common_data .bcsm_ιd) ; return (-1) ; return (0): Thu Jun 2718: 11:531996 NISDNJproc.c 20 Page 20 of 20 -207- Thu Jun 2718:10:151996 Page 3 of 6 bcp_msg_t *asp_msg) ; mt f_nιsdn_o_ ree_devιcel (CALS_BCSM_POINT_S *aεp_curr_pt , CALS_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_S *aεp_call_data, bcp_msg_t *aεp_msg) ; int f_nιsdn_o_exceptιonO (CALS_BCSM_POINT_S *aεp_curr_pt , . int f_nιsdn_o_exceptιonl CALS_BCSM_FUNC_RET_S •asp_resu1t , CALS_BCSM_INFO_S 'asp_call_data, bcp_msg_t *asp_msg) ; mt f_nιsdn_o_releaseO (CALS_BCSM_POINT_S "aεp_curr_pt CALS_BCSM_FUNC_RET_S "aεp_reεult CALS_BC8M_INFO_S *aεp_call_data, bcp_msg_t *asp_msg) ; int f_nιεdn_o_releasel (CALS_BCSM_POINT_ε *asp_curr_pt , CALε_BCεM_FUNC_RET_S "asp_result. CALS_BCSM_INFO_S *aεp_call_data, bcp_msg_t *asp_msg); int f_nιsdn_o_err_hndlerO (CALS_BCSM_POINT_S *asp_curr_pt , CALS_BCSM_FUNC_RET_ε *aεp_reεult, CALS_BCSM_INFO_S *asp_call_data bcp_msg_t *asp_msg) , int f_nιsdn_o_err_hndlerl (CALS_BCSM_POINT_S *aεp_curr_p , CALS_BCSM_FUNC_RET_S « asp_result. CALS_BCSM_INFO_S -aεp_cal l_data bcp_msg_t *aεp_mεg) , int f_nιsdn_t_null (CALS_BCSM_POINT_S *asp_curr_p , CALS_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_S 'asp_call_data , bcp_mεg_t *asp_msg) ; t f_nιsdn_t_auth_term (CALS_BCSM_POINT_S « asp_curr_pt , CALS_BCSM_FUNC_RET_S *aεp_result CALS_BCSM_INFO_S *asp_cal l_data . bcp_msg_t *asp_msg) ; int f_nιsdn_t_sel_facιlιtyO (CALS_BCSM_POINT_S *aεp_curr_pt, CALS_BCSM_FUNC_RET_S *asp_reεult . CALS_BCSM_INFO_S * aεp_cal l_data , bcp_mεg_t *aεp_mεg), int f_nιsdn_t_εel_facιlιtyl (CALS_BCSM_POINT_S *asp_curr_pt , CALS_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_ε • asp_call. data, bcp_mεg_t *asp_msg) ; int f_nιsdn_t_present_callO (CALS_BCSM_POINT_S *aεp_curr_p , CALS_BCSM_FUNC_RET_S 'asp_result CALS_BCSM_INFO_S 'asp_call_data bcp_msg_t *aεp_msg) , int f_nιsdn_t_present_calll (CALS_BCSM_POINT_S *aεp_curr_pt , CA_S_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_S *asp_call_data, bcp_msg_t *asp_msg) ; int f_nisdn_t_alertιngO (CALS_BCSM_POINT_S *asp_curr_pt , CALS_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_S *asp_call_data, bcp_msg_t *asp_msg) ; int f_nιsdn_t_alertιngl ( CALS_BCSM_POINT_S "asp_curr_pt, CALS_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_S *asp_call_data, bcp_msg_t *asp_msg) ; int f_nisdn_t_actιveO (CALS_BCSM_POINT_S *asp_curr_pt, CALε_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_S *asp_call_da a, bcp_msg_t *asp_rosg); int f_nιsdn_t_actιvel (CALS_BCSM_POINT_S *asp_curr_pt. CALS_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_S * asp_call_data, bcp_msg_t *asp_msg) ; int f_nιsdn_t_suspendedO (CALS_BCSM_POINT_S *asp_curr_pt. CALS_BCSM_FUNC_RET_S *asp_result, CA S_BCSM_INFO_S *asp_call_data, bcp_msg_t *asp_»sg) ; int f_nιsdn_t_suspendedl (CALS_BCSM_POINT_S * asp_curr_pt , CALS BCSM Ftm RET S » asp result. Thu Jun 27 18:10:15 1996 NISDN_conlιg.c 3 Page 3 of 6 Thu Jun 27 18:10:15 1996 f NISDN_ιnιtιalιze Page 4 of 6 CALS_BCSM_INFO_S *aεp_call_data, bcp_msg_t *asp_msg) ,- int f_nιsdn_t_free_devιceO (CALS_BCSM_POINT_S *asp_curr_pt, CALS_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_S *asp_call_data, bcp_msg_t *aεp_msg) , int f_nιsdn_t_free_devιcel (CALS_BCSM_POINT_S *aεp_curr_pt , CALS_BCSM_FUNC_RET_8 *asp_result, CALΞ_BCSM_INFO_S *asp_call_data , bcp_msg_t *asp_msg) , int f_nιsdn_t_releaseO (CALS_BCSM_POINT_S *asp_curr_pt CALS_BCSM_FUNC_RET_S *asp_result. CALS_BCSM_INFO_S *asp_call_data, bcp_mεg_t *asp_msg) , int f_nιsdn_t_releaεel (CALS_BCSM_POINT_S *aεp_curr_p , CALS_BCSM_FUNC_RET_Ξ *aεp_resu1 , CALS_BCSM_INFO__S *aεp_call_data, bcp_msg_t *aεp_mεg) ; int f_nιεdn_t_exceptιon (CALS_BCSM_POINT_S *aεp_curr__pt, CALS_BCSM_FUNC_RET_S *aεp_reεult, CALS_BCSM_INFO_S *aεp_call_data, bcp_msg_t *asp_msg) , int f_nιεdn_t_err_hndlerO (CALS_BCSM_POINT_S *asp_curr_pt CALS_BC8M_FUNC_RET_S *asp_resul , CALS_BCSM_INFO_S *asp_call_data, bcp_msg_t *asp_msg) , int f nιsdn_t_err_hndlerl (CALS_BCSM_POINT_S *asp_curr_pt CALS_BCSM_FUNC_RET_S *asp_result, CALS_BCSM_INFO_S *aεp_call_data , bcp_mεg_t *aεp_msg) , Global Variables mt £_NISDN_initiβliιβ (byte_t *abp_data) ( memcpy ( (voιd * ) 4gι_cc_NPA, (void * ) abp_data , εizeof ( int ) ) ; return ( 0) ; Thu Jun 27 18:10:15 1996 NISDN_confιg.c 4 Page 4 of 6 Thu Jun 2718:10:151996 f_NlSDN_confιgure Page 5 of 6 int £_NISDN_co-£i_rurβ (CALS_FUNC_S *cp_f_lιst, CALS_FUNC_S ■ cm_f_lιεt) { Hl ndef DYNAMIC CALε_FUNC_S vs_cm_f_lιst [] = (CA1.S_FUNC_T ιbεs_pre_cn tenon, "ιbss_pre_cπ tenon" <CALS_FUNC_T ιbss_pre_proc, "ιbss_pre_proc" ) (CALε_FUNC_T f_NiεDN_ιnιtιalιze "f_NISDN_mιtιalιze" 'J, (CALS_FUNC_T f_nιεdn_o_null, "f_nιsdn_o_null" ) , (CALS_FUNC_T f_nιsdn_o_auth_orιg_attO, f_nιsdn_o_auth_oπg_attO" ) , (CALS_FUNC_T f_nιsdn_o_auth_orιg_attl, "f_nιsdn_o_auth_orιg_attl" > , (CALS_FUNC_T f_msdn_o_auth_orιg_att2 " f_nιεdn_o_auth_or ιg_att2 " ) (CALS_FUNC_T f_nιsdn_o_coll_ιnfoO "f_nιsdn_o_coll_ιnfoO" ) , (CALS_FUNC_T f_nιsdn_o_coll_ιnfol, • f_nιεdn_o_coll_ιnfol" ) , (CALS_FUNC_T f_nιsdn_o_analyze_ιnfo, "f_msdn_o_analyze_ιnfo") , (CAL8_FUNC_T f_nιsdn_o_select_route, "f_nιsdn_o_select_route" ) , (CALS_FUNC_T f_nιsdn_o_auth_call_setup, " f_msdn_o_auth_call_setup" ) , (CALS_FUNC_T f_nιsdn_o_send_callO, "f_nιsdn_o_send_callO" ) , (CALS_FUNC_T f_nιsdn_o_send_calll, " f_msdn_o_send_calll " ) , (CALS_FUNC_T f_nιsdn_o_alertιngO, " f_nιsdn_o_alertιngO" ) , (CALS_FUNC_T f_nιεdn_o_alertιngl , " f_nιsdn_o_alertιngl " ) , (CALS_FUNC_T f_nιsdn_o_actιveO, "f_nιsdn_o_actιveO" ) , (CALS_FUNC_T f_nιsdn_o_actιvel, "f_nιεdn_o_actιvel" ) (CALS_FUNC_ f_nιsdn_o_actιve2 , " f_nιsdn_o_actιve2 " ) , (CALS_FUNC_T f_nιsdn_o_suspendedO, "f_nιsdn_o_suspendedO" ) , (CALS_FUNC_T f_nιsdn_o_suspendedl, "f_nιsdn_o_suspendedl " ) , (CALS_FUNC_T f_nιsdn_o_f ree_devιceO , "f_nιsdn_o_free_devιceO" (CALS_FUNC_T f_n sdn_o_f ree_devιcel , " f_nιsdn_o_f ree_devιcel ■ (CALS_FUNC_T f_nιsdn_o_exceptιonO, "f_nιsdn_o_exceptιonO" ) , (CALS_FUNC_T f_nιsdn_o_exceptιonl, "f_nιsdn_o_exceptιonl" ) , (CALS_FUNC_T f_nιsdn_o_releaseO, "f_nιsdn_o_releaseO" ) , (CALS_FUNC_T f_nιsdn_o_releaεel, "f_nιsdn_o_releaεel" ) , (CALS_FUNC_T f_nιsdn_o_err_hndlerO " f_nιsdn_o_err_hndlerO" ) , (CALS_FUNC_T f_nιsdn_o_err_hndlerl " _nιεdn_o_err_hndlerl " ) , (CALS_FUNC_T f_nιsdn_t_null, "f_nιsdn_t_null" ) , (CALS_FUNC_T f_nιsdn_t_auth_term, " f_nιεdn_t_auth_term" ) , (CALS_FUNC_T f_n sdn_t_εel_facιlιtyO, "f_nιsdn_t_sel_facιlιtyO" ) , (CALS_FUNC_T f_nιεdn_t_sel_facιlιtyl "f_msdn_t_sel_facιlιtyl" ) , (CALS_FUNC_T f_nιsdπ_t_present_callO , "f_nιsdn_t_present_callO" ) , (CALS_FUNC_T f_nιsdn_t_present_calll "f_nιsdn_t_present_calll" ) , (CALS_FUNC_T f_nιsdn_t_alertιngO, "f_nιεdn_t_alertιngO" ) , (CALε_FUNC_ f_nιsdn_t_alertιngl, "f_nιεdn_t_alertιngl" ) , (CALS_FUNC_ f_nιsdn_t_actιveO, "f_nιεdn_t_actιveO" ) , (CALS_FUNC_T f _nιsdn_t_actιvel , " f_nιεdn_t_actιvel " ) , (CALS_FUNC_T f_nιsdn_t_suspendedO " f _nιsdn_t_suεpendedO " ) , ( CALS_FUNC_T f_nιsdn_t_suspendedl , 'f_nιsdn_ t_εuεpendedl ), (CAL8_FUNC_T f_nιsdn_t_free_devιceO, "f_nιεdn_t_free_devιceO" • } , (CALS_FUNC_T f_nιεdn_t_free_devιcel, "f_nιεdn_t_free_devιcel" (CALS_FUNC_T f_nιεdn_t_releaseO, "f_n sdn_t_releaεeO" ) , (CALε_FUNC_T f_nιsdn_t_releasel, " f_nιεdn_t_releasel" ) , (CALε_FUNC_T f_nιsdn_t_exceptιon, "f_nιsdn_t_exceptιon" ) , (CALε_FUNC_T f _nιεdn_t_err_hndlerO , ' f _nιsdn_t_err_hndlerO " ) , (CALε_FUNC_T f_nιεdn_t_err_hndlerl , " f _nιεdn_t_err_hndler 1 " ) , NULL, NULL) memcpy ( (void * ) cm_f_lιεt , (void * ) vs_cm_f_lιst [ εizeo (CALS_FUNC_S) 49) , cp_£unc_lιst = cp_f_lιst, Hendif return (0) , Thu Jun 271810:151996 NISDN_confιg c 5 Page 5 of 6 -211- ThuJun2718:10:151996 Page 6 of 6 Thu Jun 2718:10:151996 NISDN_coπfιg.c 6 Page 6 of 6 Hinclude <ADAP_G h> Hinclude <AIN02_G_oper .h> Hinclude <CALS_G_cv_defs . h> Hinclude <CALS_G_cm_ms . h> Hinclude <CALS_G_cm_defs . h> 73 Hinclude <CALS_G_slp_ιfc.h> 74 Hinclude <CΛLS C cm a,pι.h> Thu Jun 2718:12:22 1996 ιbss_preproc.c 1 Page 1 of 5 Thu Jun 2718:12:221996 ibss_pre_cnterion Page 2 of 5 *********************************************************************** The Signalling Id definition should also be used to update shared memory and databases using MML. *************** ********************* ************** ************ ****** , Hdef me L_NISDN_LINE IBSS SIG ID ( 1) / * * * ******************************** ******** *********** * Name ' Synopsis ' Author Paiman Nodousham ' Date 1st released * Deεcπption * Input parameterε * Return value * Reviεion history ' Date Owner Description * 03/13/96 CD. Re-edited... » 06/07/96 CD. IBSS and DMGR fen calls are added. ******************* ************* ******** ************ t ibβe_pre_critβrion (bcp_msg_t *msg_ps, BYTE pre_proc_id) ( static IBSS_MSG_HDR_S vs_ibss_hdr; static εYS_εiG_ID vs_sig_id; static SYS_SIG_DEV_ID vε_sιg_dev; if (mεg_pε->un. ιpc_mεg.mεgenv.msgtyp != L_IBSS_SPM_MT) ( return (0) ,- ) if ( f _IBSS_getHdr (4(msg_pε->un. ιpc_msg) , 4vs_ιbss_hdr) 0) ( trFail CIBSSCRITERIA: IBSS getHdr failed"), return (0) ; > if (f_DMGR_logdev_to_sigdev (vs_ιbεs_hdr . log_dev, 4vs_sιg_ιd, 4vε_sιg_dev) < 0) ( trFail ("IBSSCRITERIA: DMGR logdev_to_ειgdev failed for LDEV(%d)' vs_ibss_hd . log_dev) ; return (0) ; ) if (vs_ειg_id != L_NISDN_LINE_IBSS_SIG_ID) ( return (0) ,- ) return (1) ; Thu Jun 2718:12:221996 ιbss_preproc.c 2 Page 2 of 5 Thu Jun 27 18:12:22 1996 ιbss_pre_proc Page 4 of 5 trFaιl("IBεSPRE:LOGDEV(%d)-CLEG(%d) aεεociated, IBSS_INS failed" v_log_dev_ιd, leg_ιd) ,- return (-1) ; vs_create_ιnfo.acceεs_type = SYS_ACCESε_NON_ISDN; vε_create_info.cleg_status = CALS_LEG_ST_JOINED; vs_create_info.pleg_status = CALS_LEG_ST_PENDING; vε_create_info.log_dev_id = v_log_dev_ιd, vs_create_mfo.ad__leg_ιd = L_INVALID_LEG_ID; bcsm__poιnt_s. currently_ιn = CALS_IN_PIC, bcsm_poιnt_s . bcsm__poιnt = 1 ,- bcsm_poιnt_s.bcsm_sub_poιnt = 0; if ( (cs_ιd = f_CALS_CS_create(4vs_create_ιnfo, 4bcsm_poιnt_s) ) < 0) ( trFail ( "IBSSPRE: f_CALS_CS_create failed, errno:%d", errno); return (-1) ; ) if ( f_CALS_CS_put_queue (cs_ιd, mεg_ps, DEFAULT_PRI0RITY) < 0) ( trFail ("IBSSPRE: f_CALS_CS_put_queue failed, CS (%d) . errno :%d" cs_ιd, errno) , return (-1) ; ) if ( _CALS_procee ( ) < 0) ( trFail ( "IBSSPRE: f_CALS_proceed failed errno-%d", errno); return (-1) ; ) break; 252 if (leg_ιd == L_INVALID_LEG_ID) 253 ( 254 trFail ("IBSSPRE. OGDEV(%d) -LEG(%d) not asεociated, MSG: Ox%x" , 255 v_log_dev_ιd, leg_ιd, vs_ιbss_hdr .prιm_ιd) , return (-1) ; ) if ( f_CALS_CS__put_cjueue (log_dev_ιnfo_s cs_ιd, mεg_pε, DEFAULT_PRIORITY ) < 0) ( trFail ( "IBSSPRE: f_CALS_CS_put_queue failed, CS <%d) , errno : %d" , log_dev_ιnfo_s ,cs_ιd, errno); return (-1) ,- ) if ( f_CALS_proceed ( ) < 0) ( trFail ( "IBSSPRE: f_CALS_proceed failed, errno:%d", errno), return (-1) ; ) break; default: trFail ( "IBSSPRE: Invalid IBSε Indication. 0x%x, discarding" , vs_ιbss_hdr . prιm_ιd) , return ( -1 ) , brea ; return ( 0 ) : Thu Jun 27 18:12:22 1996 ιbss_preproc.c 4 Page 4 of 5 Truj Jun 27 18:12:22 1996 ιbss_pre_proc Page 5 o( S Thu Jun 2718:12:22 1996 ιbss_r>reproc.c 5 Page 5 ol 5 APPENDIX B Thu Jun 2719:23:591996 Page 1 of 2 ******* ************** ******** ******************** ******** * Copyright (c) NewNet, Inc. * All rights reserved. * This document contains confidential and proprietary information of NewNet * and any reproduction, disclosure, or use n whole or in part is expressly * prohibited, except as may be specifically authorized by prior written * agreement or permission of NewNet ******* ********* VERSION SRevision: 1.4 $ DATE $Date: 1996/06/04 23:39:33 $ MODULE NAME SRCSfile: events. cm, v $ AUTHOR Ahmet Ozalp / Coskun Demir DESCRIPTION Eventε that should be εupplied by the Call Model Developer by uεing the AIN 0.2 events as a εubεet. Eventε from 1 to 44 are AIN 0.2 defined events and their indexes should not be changed by Call Model Developers DATE 1st REL REV.HIST * Date Owner Description ************* * RESTRICTED RIGHTS LEGEND * Use, duplication, or disclosure by Government lε Subject to reεtrictions as * set forth in εubparagraph (c) (1) (ii) of the Rights in Technical Data and * Computer Software clause at DFARS 252.227-7013 EVENT NAME ENTRY USE PIC -<ccccccccccccccccccccccccccccccc>- NULL_EVENT 000 AIN_0_ORIG_ATTEMPT 000 AIN_0_ORIG_ATTEMPT_AUTHORIZED 000 AIN_0_INFORMATION_COLLECTED 000 AIN_O_INFORMATI0N_ANALYZED 000 AIN_0_ROUTE_SELECTED 000 AIN_0_CALL_SETUP_AUTHORIZED 000 AIN_0_TERM_SEIZED 000 AIN_0_ANSWER 000 AIN_0_DISCONNECT 000 AIN_0_FEATURE_REQUESTED 000 AIN_0_MID_CALL 009 AIN_0_SUSPENDED 000 AIN_0_RELEASE_TIMEOUT 000 AIN_0_ORIG_DENIED 000 AIN_0_COLLECT_TIMEOUT 000 AIN_0_INVALID_INFORMATION 000 AIN_0_NETWORK_BUSY 000 AIN_0_AUTHORIZATI0N_FAILURE 000 AIN_0_CALLED_PARTY_BUSY 000 AIN_T_TERM_ATTEMPT 000 AIN_T_CALL_PRESENTED 000 AIN_T_TERM_RESOURCE_AVAILABLE 000 AIN_T_CALL_ACCEPTED 000 AIN_T_ANSWER 000 AIN_T_SUSPENDED 000 AIN_T_RELEASE_TIMEOUT 000 AIN_T_MID_CALL 016 AIN_T_DISCONNECT 000 AIN_T_TERM_DENIED 000 AIN_T_BUSY 000 AIN_T_CALL_REJECTED 000 AIN_T_NO_ANSWER 000 AIN 0 NO ANSWER 000 Thu Jun 2719:23:591996 events.cm 1 Page 1 of 2 Thu Jun 27 19:23:59 1996 Page 2 of 2 l AIN_0_ABANDON 000 AIN_T_ABANDON 000 AIN_T_FEATURE_REQUESTED 000 AI _0_ROUTE_BUSY 000 AIN_0_CALLED_PARTY_RECONNECTED 000 AIN_T_SS7_FAILURE_0CCURS 000 AIN_T_CALLED_PARTY_RECONNECTED 000 AIN_0_DiεCONNECT_CONTROLLING 018 AIN_T_DISCONNECT_CONTROLLING 000 AIN_0_DISCONNECT_PASεiVE 020 AIN_T_DISCONNECT_PASSIVE 000 ET_RELEASE_CHAN 000 EO_CHAN_RELEASED 000 ET_CHAN_RELEAεED 000 EO_DONE 001 ET_DONE Oil EO_INTERNAL_8U8PEND 000 ET_I TERNAL_SUSPEND 000 EO_ERROR 021 ET_ERROR 025 Thu Jun 27 19:23:59 1996 events.cm 2 Page 2 of 2 | -219- Fn Jun 2813:40:251996 Page 1 of 3 *********************** ********* ************* Copyright (c) NewNe , Inc . All rights reserved. This document contains confidential and proprietary information of NewNet and any reproduction, disclosure, or use in whole or in part is expressly prohibited, except as may be specifically authorized by prior written agreement or permission of NewNet. ******** ******** *********************** VERSION SRevision: 1.2 $ DATE SDate: 1996/05/21 20:00.11 S MODULE NAME SRCSfile: event_pιc_map.cm, v $ AUTHOR Ahmet Ozalp / Coskun Demir DESCRIPTION Specifies to which point in call one can go within a Call Model DATE 1st REL REV. HIST. * Date Owner Description *********** ****************** RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure by Government Is Subject to restrictions as εet forth in εubparagraph (C)(1)(H) of the Rightε in Technical Data and Computer Software clause at DFARS 252.227-7013 ******* ******* Fπ Jun 2813:40:251996 βven_pιc_map.cm 1 Page 1 of 3 Fri Jun 2813:40:251996 Page 2 of 3 021 053 001 Oil 020 012 Fπ Jun 28 13:40:25 1996 Page 3 of 3 024 050 023 024 058 025 025 054 Oi l Fn Jun 28 13:40:25 1996 event_pιc_map.cm 3 Page 3 of 3 Thu Jun 2719:24:111996 Page 1 of 3 * Copyright (c) NewNet, Inc * All πghtε reserved. * * This document contains confidential and proprietary information of NewNet * and any reproduction, disclosure, or use in whole or in part is expressly * prohibited, except aε may be specifically authorized by prior written * agreement or permiεsion of NewNet. * ******************************************************************************* * VERSION . SRev sion. 1 5 S * DATE $Date 1996/06/06 22.11 03 S * * MODULE NAME SRCSfile pιc_data . cm, v $ * AUTHOR Ahmet Ozalp / Coskun Demir * DESCRIPTION . PIC data file for a Call Model * DATE 1st REL . * REV. HIST * * Date Owner Deεcription ***************************************************************************** RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure by Government Is Subject to reεtrictions aε set forth in subparagraph (C) (1) (H) of the Rights in Technical Data and Computer Software clause at DFARS 252.227-7013 ***************************************************************************** GUIDELINES FOR FILLING PIC DATA : 1) Firεt Line of the file should contain "initialization" function 2) There εhould be specific lines for "criteria " and "preprocessor " functions and starting PIC numbers of Originating and Terminating partε of the Call Model namely "ORIG_CS_START_PIC and "TERM_CS_εTART_PIC . " 3) PIC data εhould be specified in the following format a) First line denotes general information about a PIC This information should be classified as follows - 1) PIC INDX Numeric data in range <1 L_CALS_MAX_NUM_PICS> H) IN uεE PIC usage status, 'Y' or 'N' III) PIC NAME PIC name up to 31 characters IV) CALL SEG Call Segment type, 'O' or *T' V) FIRεT TRGR First trigger name attached to PIC up to 31 characterε, "NONE" for no trigger vi) CALL STAGE : Call Stage the PIC lε involved in, "SETUP", "STABLE" or "CLEAR" b) Substates of the PIC should ve preceded by keyword "begin" and followed by keyword "end". Each substate line in between these keywords start with keyword "substate " and followed by function name (max size is L_CALS_CM_MAX_FUNC_NAME_LENGTH-1) and library name starting from "$ASVCRUN/conflg/BCM" directory, rest of the absolute path should be specified (max size for library name lε L_CAL8_CM_MAX_LIBRARY_NAME_LEN-1) . PIC IN PIC NAME CALL FIRST CALL INDX UεE SEG i TRGR εTAGE -<nn>-<c>-<ccccccccccccccc>-<c>-<ccccccccccccccc> <ccccccccc>- configuration f_NI8DN_configure NISD t plt/llb/libNISDNtmplt.εo initialization: f_NISDN_ιnιtιallze NISD tmplt/1lb/libNISDNtmplt.εo criteria: ibss_pre_crιtenon NISDNt plt/lib/libNISDNtmplt.so preprocessor ιbsε_pre_proc NISDNt plt/ lib/ libNISDNtmplt.εo ORIG_CS_START_PIC. 01 TERM_CS_START_PIC 11 01 Y AO NULL NONE SETUP be in Thu Jun 27 19:24:11 1996 Page 2 of 3 end 02 Y AO_AUT_ORIG_ATT NONE SETUP begin subεtate. f_msdn_o_auth_orιg_attO NISDNt plt/ 1lb/ 1 ibNI8DNtmplt . so substate • f_nιsdn_o_auth_orιg_attl NISDNtmplt/lib/libNISDNt plt.so substate • f_nιsdn_o_auth_orιg_att2 NiεDNtmplt/ lib/ libNISDNt plt . o end 03 Y A0_C0LLECT_INFO 0 NONE SETUP begin substate f_nιsdn_o_coll_ιnfoO NISDNtmplt/ lib/ libNISDNtmplt.εo εubεtate f_nιεdn_o_coll_ιnfol NISDNtmplt/lib/libNiεDNtmplt so end 04 Y AO_ANALYZE_INFO 0 NONE SETUP begin substate. f_nιsdn_o_analyze_ιnfo NISDNt plt/ lib/ libNISDNtmplt. so end 05 Y AO_SELECT_ROUTE 0 NONE SETUP begin subεtate: f_nιεdn_o_εelect_route NISDNtmplt/lib/libNISDNtmplt so end 06 Y AO_AUT_CALL_SET 0 NONE SETUP begin εubstate- f_nιsdn_o_auth_call_setup NISDNtmplt/lib/ libNISDNtmplt .so end 07 Y AO_SEND_CALL 0 NONE STABLE begin εubεtate f_nιεdn_o_εend_call0 NISDNtmplt/ lib/ libNISDNtmplt . εo substate f_nιsdn_o_εend_calll NISDNtmplt/llb/llbNISDNtmplt εo end 08 Y AO_ALERTING O NONE begin εubεtate f_nιsdn_o_alertmgO NISDNtmplt / 1 lb/ libNISDNtmplt . so subεtate f_nιsdn_o_alertιngl NISDNtmplt /lib/ libNISDNtmplt. so end 09 Y AO_ACTIVE TWC OMIDCALL STABLE begin subεtate: f_nιsdn_o_actιve0 NISDNtmplt/lib/libNISDNtmplt. so εubεtate . f_nιsdn_o_actιvel NISDNtmplt/ 1lb/ 1 ιbNI8DNtmplt . so substate f_nιsdn_o_actιve2 NISDNtmpl / 1 lb/ 1 lbNISDNtmplt . so end 10 Y AO_SUSPENDED O TWC_ODISC CLEAR begin substate- f_nιεdn_o_suspended0 NISDNtmpl / lib/ 1lbNISDNt pl . so substate: f_nιsdn_o_suεpendedl NISDNtmplt/lib/libNiεDNtmplt.so end 11 Y AT_NULL T NONE 8ETUP begin substate. f_nιsdn_t_null NISDNtmplt/lib/libNISDNtmplt εo end 12 Y AT_AUT_TERM NONE SETUP begin εubstate. f_nιsdn_t_auth_term NISDNtmplt/lib/libNISDNtmplt. εo end 13 Y AT_SELECT_FACILTY T NONE SETUP begin substate : f_nιsdn_t_sel_facilityO NISDNtmplt/llb/llbNISDNtmplt so substate. f_nιsdn_t_εel_facilιtyl NISDNtmplt/llb/llbNISDNtmplt so end 14 Y AT_PRESENT_CALL T NONE SETUP begin substate. f_nιεdn_t_preεent_callO NISDNtmplt/ lib/ libNISDNtmplt. so εubεtate. f nisdn t present calll NISDNtmplt/ lib/ libNISDNtmplt. so Thu Jun 27 19.24.11 1996 pιc_data cm 2 Page 2 of 3 Thu Jun 2719:24:161996 Page 1 of 1 /***************** ******* ****** Copyright (c) NewNet, Inc. All rights reserved. Thiε document contains confidential and proprietary information of NewNet and any reproduction, disclosure, or use in whole or in part is expressly prohibited, except as may be specifically authorized by prior written agreement or permission of NewNet. ******** ************* * VERSION SRevision: 1.5 $ * DATE $Date: 1996/06/06 22:08:24 $ * * MODULE NAME SRCSfile: trgr_data .cm, $ * AUTHOR Ahmet Ozalp / Coskun Demir * DESCRIPTION Trigger data file for a Call Model * DATE 1st REL * REV. HIST. * Date Owner Description ******* ********* RESTRICTED RIGHTS LEGEND Use, duplication, or discloεure by Government Is Subject to restrictions as set forth in subparagraph (c)(1) (n) of the Rights in Technical Data and Computer Software clause at DFARS 252.227-7013 GUIDELINES FOR FILLING TRGR DATA : TRGR data should be specified in the following format: 1) First line denotes general information about a TRGR. This information εhould be claεsified as follows: TRGR-NAME TRGR name up to 31 characters, n) IN USE PIC usage status, 'Y' or 'N' 111) PIC INDX Numeric data in range <1..L_CALS_MAX_NUM_PICS> ιv) NEXT-TRGR-NAME Next trigger name following the TRGR up to 31 characters. "NONE" for no trigger. 2) Second line εpecifies the function that is bound to the TDP. The line should start with keyword "handle:", followed by function name (max size is L_CALS_CM_MAX_FUNC_NAME_LENGTH-1) and library name starting from "SASVCRUN/config/BCM" directory, reεt of the absolute path should be specified (max size for library name is L CALS_CM_MAX_LIBRARY_NAME_LEN- 1 ) . TRGR-NAME IN PIC NEXT-TRGR-NAME USE INDX -•ccccccccccccccccccco -<c>- -<nn>- -<ccccccccccccccccccccc> TWC_OMIDCALL Y 09 TWC_ODISC handle: f_NISDN_trgr_omidcal 1 NISDNtmpl / 1 lb/ 1 ibNIΞDNtmplt . o TWC_0DISC Y 09 NONE handle: f_NiεDN_trgr_odιεconnect NISDNtmplt/lib/libNISDNtmplt .so TWC_OERROR Y 19 NONE handle: f_NISDN_trgr_oerror NISDNtmplt/lib/libNISDNtmplt . so Thu Jun 2719:24:161996 trgr_data.cm 1 Page 1 of 1 15 Y AT_ALERTING T NONE εTABLE be in substate : f_msdn_t_alertιngO NISD tmplt/ lib/ libNISDNtmplt. so substate : f_nisdn_t_alertιngl NISDNtmplt/ 1 lb/ 1 lbNISDNt plt . so end 16 Y AT_ACTIVE T NONE STABLE begin substate: f_nιsdn_t_actιveO NISDNtmpl t/ lib/ 1 lbNISDNtmplt . εo subεtate: f_nιsdn_t_actιvel NISDNtmplt/ lib/ libNISDNtmplt. εo end 17 Y AT_SUεPENDED T NONE CLEAR begin substate. f_nιsdn_t_suspendedO NISDNtmplt/llb/llbNISDNtmplt. so εubstate. f_nιsdn_t_suεpendedl NISDNtmplt/lib/libNISDNtmplt .so end 18 Y EO_FREE_DVC 0 NONE CLEAR begin subεtate- f_nιsdn_o_ ree_devιceO NISDNtmpl / lib/ libNISDNtmplt. so substate: f_nιsdn_o_free_devιcel NISDNtmplt / 1 lb/ 1 lbNISDNtmplt . so end 19 Y EO_EXCEPTION_HNDLR 0 TWC_OERROR CLEAR begin substate- f_nιsdn_o_exceptιonO NISDNtmplt/lib/libNiεDNtmplt.so εubεtate f_nιεdn_o_exceptιonl NiεDNtmplt/lib/libNiεDNtmplt .so end 20 Y EO_RELEASE 0 NONE CLEAR begin subεtate: f_nιsdn_o_releaseO NISDNtmpl / lib/ libNISDNtmplt. so substate: f_nιsdn_o_releaεel NISDNtmpl / 1 lb/ 1 lbNISDNtmplt . so end 21 Y E0_ERROR_HNDLR O NONE CLEAR begin substate f_nιsdn_o_err_hndlerO NISDNtmplt/lib/libNISDNtmplt . so substate : f_msdn_o_err_hndlerl NISDNtmplt/lib/libNISDNtmplt . εo end 22 Y ET_FREE_DVC T NONE CLEAR begin εubεtate. f_nιsdn_t_free_devιceO NISDNtmplt/lib/libNISDNtmplt . εo εubstate: f_nιsdn_t_free_devιcel NISDNtmplt/ 1 lb/ libNISDNtmplt . εo end 23 Y ET_RELEASE T NONE CLEAR begin substate: f_nιsdn_t_releaseO NISDNtmplt/llb/llbNISDNtmpl .so substate: f_nιsdn_t_releasel NISDNtmpl / 1 lb/ libNISDNtmplt . εo end 24 Y ET_EXCEPTION_HNDLR T NONE CLEAR begin subεtate: f_nisdn_t_exceptιon NISDNtmpl / 1 lb/ 1 lbNISDNtmplt . so end 25 Y ET_ERROR_HNDLR T NONE CLEAR begin substate: f_nisdn_t_err_hndlerO NISDNtmplt/lib/ libNISDNtmplt. so substate: f_nιsdn_t_err_hndlerl NISDNtmplt / 1 lb/ 1lbNISDNtmpl . so end Thu Jun 2719:24:111996 pιc_data.cm 3 Page 3 of 3 APPENDIX C Thu Jun 27 19:23:10 1996 Page 1 of 2 # Generated makefile. All references are to GNU Make manual for make # verεion 3.71 Beta, dated May 1994 with the VPATH patches. # Once you've generated this file, you should edit it aε described in # the comments . # General purpose variable $ (space) - see p.78 See p.57 for detailε of the difference between = and = See p 83 for the foreachO function. See p 78 for the patsubst ( ) function Note that VPATH is used - remember that every environment variable lε inherited in make as a macro. H DIRECTORY should be εet to the directory where all the εource files # are found, and MODULE should be εet to the name to be used for the final # executable or library # DIRECTORY := ASVC/src/SLP/T C/εrc MODULE TWC LIBRARIES-S (MODULE) εhould be set to the librarieε to be linked with. E.g. LIBRARIES-$ (MODULE) := ASVC/lib/mylib. a INCDIRS-S (MODULE) should be set to the list of places to be searched for include files. CFLAGS-S (MODULE) , LDFLAGS-$ (MODULE) should be εet to module εpecific CFLAGS and LDFLAGS compiler flagε lfeq ($ (TARGET) , sun) LIBRARIES-S (MODULE) ASVC/lιb/libCALS_g.a \ ASVC/lib/libDBMS.a \ ASVC/lib/libRSRC.a \ ASVC/lib/libNAMS.a \ AMGR/lib/libprocutil a AMGR/lib/libspm.a INCDIRS-S (MODULE) Sldir S (DIRECTORY) )mc S( PRODUCT) inc AMGR/inc CFLAGS-S (MODULE) -DSVR4 -DDEBUG C++FLAGS-S (MODULE) LDFLAGS-S (MODULE) LDLIBS-S (MODULE) endif i eq (S (TARGET) ,mot) LIBRARIES-S (MODULE) ASVC/lιb/lιbCALΞ_g.a \ ASVC/lib/libDBMS.a \ ASVC/lib/libRSRC.a \ ASVC/lib/libNAMS.a \ AMGR/lib/libprocutil.a \ AMGR/lib/libspm.a INCDIRS-S (MODULE) Sldir S (DIRECTORY) ) inc S (PRODUCT) /inc AMGR/inc CFLAGS-S (MODULE) -DSVR4 -DDEBUG C++FLAGS-S (MODULE) LDFLAGS- S (MODULE) LDLIBS- (MODULE) endif ifeq (S (TARGET) , lbm) LIBRARIES- (MODULE) ASVC/l b/lιbCALS_g.a \ ASVC/lib/libDBMS.a \ ASVC/lib/libRSRC.a \ ASVC/lib/libNAMS.a \ AMGR/lib/libprocutil.a \ AMGR/lib/libspm.a INCDIRS-S (MODULE) $(dιr S (DIRECTORY) line $ (PRODUCT) /inc AMGR/inc CFLAGS-S (MODULE) -DSVR4 -DDEBUG C++FLAGΞ-S (MODULE) LDFLAGS-S (MODULE) LDLIBS-S (MODULE) endif Thu Jun 27 19:23:10 1996 Makefile 1 Page 1 of 2 Thu Jun 2719:23:101996 Page 2 of 2 SOURCES : = \ SLP_TWC.c \ SLP_hash.c SOURCES := S (patsubst %, S (DIRECTORY) /%,$ (SOURCES) ) OBJECTS := Slpatsubst %.c,%.o, Slpatsubst %.C,%.o, S(SOURCES))) OBJECTS_G := lpatsubst %.c,%_g.o, $(patsubst % .C, %_g.o, $ (SOURCES) ) \ all : S (PRODUCT) /bin/ $ (MODULE) .task debug : S (PRODUCT) /bin/ $ (MODULE) _g. taεk junk += S(OBJECTS) $(OBJECTS_G) \ $ (PRODUCT) /bin/$ (MODULE) .task \ S (PRODUCT) /bin/ $ (MODULE) _g . task \ S (DIRECTORY) /S (MODULE) . dep # S (OBJECTS) S(OBJECTS_G) : ASVC/εrc/SLP/T C/εrc/Makeflie S (PRODUCT) /bin/S (MODULE) .taεk: S(OBJECTS) $ (LIBRARIES-$ (MODULE) ) S(PRODUCT)/bιn/S(MODULE)_g.taεk: S(OBJECTS_G) S (LIBRARIEΞ-$ (MODULE) ) lfeq (S (INITIAL) , yes) S (DIRECTORY) /$ (MODULE) .dep: S(εθURCES) endi -include S (DIRECTORY) /S (MODULE) .dep It The following line should be modified to assign either # CC or cc, whichever εhould be used to link » LD-S( PRODUCT) /bin/S (MODULE) := Thu Jun 27 19:23:101996 Makefile 2 Page 2 of 2 Thu Jun 2719:23:321996 Page 1 of 2 #ifndef SLP_TWCH Itdefine SLP_T CH static char rcsid_ΞLP_T CHi ] ="$Id: SLP_T C.h, v 1.1 1995/12/11 18:18:46 demir Exp S Copyright (c) EBS" / ****************** ***************** ******* ********* " Copyright (c) Engineering and Business Systems, Inc. (EBS) ' All rights reserved. ' This document contains confidential and proprietary information of EBS ' and any reproduction, disclosure, or use m whole or m part is expreεsly ' prohibited, except as may be specifically authorized by prior written * agreement or permission of EBS. ********* ************* *************** * VERSION : $Revιsion: 1.1 $ * DATE : $Date: 1995/12/11 18:18:46 $ * * MODULE NAME $RCSfιle: SLP_TWC.h,v $ ' AUTHOR * DESCRIPTION * DATE 1st REL ' REV. HIST. » Date Owner Description « RESTRICTED RIGHTS LEGEND ' Use, duplication, or disclosure by Goverment Is Subject to restrictions as * set forth m subparagraph (c) (1) (ii) of the Rights m Technical Data and ' Computer Software clause at DEARS 252.227-7013 * ***************************************************************************** Itdefine T C_SLP_NAME "TWC" Itdefine TWC_MAX_TBL_SIZE 1009 typedef enum SLP_TWC_STATE ( TWC_ERR0R = -1, TWC_IDLE = 0, TWC_ORIGINATE_CALL, TWC_ORIGINATE_CALL_SUCCESS , TWC_MERGE_CALL, TWC_MERGE_CALL_SUCCEεε , TWC_SPLIT_LEG, TWC_SPLIT_LEG_SUCCESε ) SLP_TWC_STATE_E; typedef enum SLP_TWC_CALL_PARTY ( ORIG_CALL_PARTY 0, TERM_CALL_PARTY ) SLP_TWC_CALL_PARTY_E; typedef struct εLP_TWC_DATA ( CALS_CS_ID cs_ιd; CALS_cε_ID aεsoc_cs_ιd; CALS_LEG_ID cε_leg_id; CALε_LEG_ID assoc_cs_leg_id; SLP_TWC_STATE_E twc_state; SLP_TWC_CA_L_PARTY_E fιrst_call_party; ) SLP_TWC_DATA_S; Thu Jun 2719:23:321996 SLP TWC.h 1 Page 1 of 2 Thu Jun 2719:23:321996 Page 2 ol 2 #endιf /* Protection against multiple inclusion */ Thu Jun 2719:23:321996 SLP TWC.h 2 Page 2 of 2 -230- Thu Jun 2719:23:181996 Page 1 of 19 εtatic char rcsidl 1 ="Sld: SLP_TWC.c,v 1.10 1996/06/06 22:14 27 demir Exp S Copyright ( c) EBS" ******* ************** ******* * Copyright (c) Engineering and Business Systems, Inc (EBS) * All rights reserved. * This document containε confidential and proprietary information of EBS " and any reproduction, disclosure, or use m whole or in part is expressly * prohibited, except as may be specifically authorized by prior written * agreement or permission of EBS ************** ************** ************ $Revιsιon: 1.10 $ $Date. 1996/06/06 22.14.27 $ $RCSfιle: SLP_TWC.c,v $ er Description ********* RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure by Goverment Is Subject to restrictions as set forth m subparagraph (C) (1) (H) of the Rights in Technical Data and Computer Software clause at DFARS 252 227-7013 ********* ****************** ******** Kinclude <ADAP_G.h> Kinclude <SYS_G_ types .h> Kinclude <SYS_G_access .h> Kinclude <SYS_G_ragmt_states.h> Kinclude :SYS_G_shm.h> Kinclude <SYS_G_key.h> Kinclude <SYS_G_trc_defs.h> Kinclude <εYS_G_errno.h> Kinclude <SYΞ_G_msgtypes.h> Kinclude <Db.h> Kinclude <DB_G_f eature_defs .h> Kinclude <NAMS_G_ιf .h> Kinclude <AIN02_G_oper .h> Kinclude <CALS_G_cv_de£s . h> Kinclude <CALS_G_αι_msg.h> -2i- Kinclude <CAl,.q G cm defs.h> Thu Jun 2719.23:181996 SLPTWC.c 1 Page 1 of 19 mt h_hashlnιt ( ) ,- t f_hashKey ( int key) , int f_haεhlnsert (SLP_TWC_DATA_ε *new_data , εLP_TWC_DATA_S « tbl_data) , t f_hashMove (SLP_TWC_DATA_S * tbl_data ) ; int f_hashFιnd (CALS_CS_ID cs_ιd, CALS_CS_ID assoc_cs_ιd, SLP_TWC_DATA_S * *data ) ; int f_hashDelete (SLP_TWC_DATA_S * tbl_data) ; t f_hashModιfy (SLP_TWC_DATA_Ξ *data ) ; /' Globals for SLP BYTE gb_twc_mod_ιd ; /* Module Id of TWC from NAMS '/ IPCaddr_t gs_twc_ιpc_addr ; /* IPC address of TWC from NAMS '/ DB_FEATURE_ID gι_twc_ eat_ιd; /* TWC feature id from Feature . DB */ IPCaddr_t cc_IPCaddr; /• IPC address of TWC from NAMS */ /• Mam program main (int argc, char* arg l] ) { IPCmsg_t vs_inc_msg; CALS_SLP_MSG_S *vs_slp_msg; SLP_TWC_DATA_S εlp_data; if ( (gb_twc_mod_id = f_NAMS_getModId (TWC_SLP_NAME) ) < 0) ( Kifdef ADAP trlnfoCTWC: NAMS getModId failed, Module name doeε not exist"),- Kendif exit (-1); ) if (cl_ProcData_IniCιalιze_2 (gb_twc_mod_ιd, argviO]) == FAIL) ( trInit("BCP:Trace and Log could not be initialized"); putErr_C2 (LG_WARNING_C, "BCP:TWC Trace and Log could not be initialized, exiting- ) ; adapLog(E_FATAL | E_Master | E_Console) ; if (f_NAMS_getIpcAddr (TWC_SLP_NAME, igs_twc_ιpc_addr ) < 0) ( Kifdef ADAP Thu Jun 2719:23:181996 SLP_TWC.c 2 Page 2 of 19 -23 - Thu Jun 27 19:23.18 1996 SLP_TWC c 5 Page 5 of 19 Thu Jun 27 19-23.18 1996 fjwc o_dιsconne Page 7 of 19 /* Send response message to SSP "/ if ( f_CALS_send_CC_msg (-r.gs_twc_ipc_.addr &vs_slp_msg) < 0) ( Kifdef ADAP trlnfoCTWC f_CALS_send_CC_msg failed for SLP"), Kendif if (f_hashDelete (tbl_data) < 0) ( Kifdef ADAP trlnfoCTWC Table Delete Failed, JUNK data in TUC table"), Kendif ) return (-1) , return (0) , Thu Jun 271923181996 SLP TWC c 7 Page 7 of 19 Thu Jun 2719:23.181996 f_twc_ ..disconnect Page 8 of 19 Name Synopsis Author : Coskun Demir Date 1st released : 11/11/95 Description Input parameters Return value Revision history Date Owner Description ***************************** » ********************************** , int £_twc_t__iβconnβct (CALS_SLP_MSG_S * ιnc_slp_msg) ( SLP_TWC_DATA_S *tbl_data, CALS_SLP_MSG_S vs_slp_msg, if (f_hashFιnd (ιnc_slp_msg->msghdr .cs_ιd. ιnc_slp_msg->msghdr .assoc_cs_ιd. ttbl_data) < 0) ( Kifdef ADAP trinfo CTWC. Table Full or Data not Found"), Kendif return (-1) ; ) else if (tbl_data->cs_ιd == L_INVALID_CΞ_ID) ( /* No entry for this (CS, ASS0C_CS) combo in TWC table "/ Kifdef DEBUG printf CTWC. <<AIN_OPER_CONTINUE sent to SSP\n"), Kendif Kifdef ADAP trinfo CTWC :T_DISCONNECT msg ignored << CONTINUE ), Kendif vs_slp_msg.msghdr .operation = AIN_OPER_cONTINUE, vs_slp_msg.msghdr .cs_ιd = ιnc_slp_msg->msghdr cs_ιd, vs_slp_msg.msghdr .assoc_cs_ιd = L_INVΛLID_CS_ID, vs_slp_msg.msghdr . leg_ιd = ιnc_slp_msq->msghdr leg_ιd vs_slp_msg.data_len = 0, ) else ( /* Previous communication existε between SLP and SSP for thiε <CS, ASSOC ^ CS) combo */ switch (tbl_data->twc_state) ( case TWC_ORIGINATE_CALL_SUCCESΞ . case TWC_MERGE_CALL_SUCCESS ■ Kifdef DEBUG printf ("TWC: <<AIN_OPER_DISCONNECT_LEG sent to SSP\n"), Kendif Kifdef ADAP trinfo ( "TWC:DIΞCONNECT_LEG in response to T_DISCONNECT" ) ; Kendif vs_slp_msg.msghdr. operation = AIN_OPER_DISCONNECT_LEG; vs_slp_msg.msghdr .cs_ιd = ιnc_slp_πιsg->msghdr.cs_ιd; vs_slp_msg.msghdr .assoc_cs_ιd = tbl_data->assoc_cs_ιd; vs_slp_msg.msghdr .leg_ιd = ιnc_slp_msg->msghdr . leg_ιd; vs_slp_msg.data_len = 0; if (f_hashDelete (tbl_data) < 0) ( Kifdef ADAP trinfo CTWC: Table Delete Failed, JUNK data in TWC table"); Kendif break, default: break; Thu Jun 2719:23:181996 SLP_TWC.c 8 Page 8 of 19 -238- Thu Jun 27 19:23:18 1996 Uwc t disconnect Page 9 of 19 /* Send response message to SSP */ if (f_CALS_send_CC_msg (&gs_twc_ιpc_add , &vs_slp_msg) < 0) ( Kifdef ADAP trinfo ( "TWC: f_CALS_send_CC_msg failed for SLP"), Kendif if (f_hashDelete (tbl_data) < 0) ( Kifdef ADAP trinfo CTWC: Table Delete Failed, JUNK data in TVJC table"), Kendif return (-11, return (0) ; Thu Jun 2719:23:181996 SLP TWC.c 9 Page 9 of 19 -239- Thu Jun 27 19.23:18 1996 f_t c_handle_error_tdps Page 10 of 19 Wame Synopsis Author ■ Coskun Demir Date 1st released 11/11/95 Description Input parameters Return value Revision history Date Owner Description int £_twc_h_ndlβ_arror_tdps (CALΞ_SLP_MSG_S *ιnc_slp_msg) ( SLP_TWC_DATA_S *tbl_data; CALS_SLP_MSG_S vs_slp_msg; if (f_hashFιnd (ιnc_slp_msg->msghdr . cs_ιd, ιnc_slp_msg- >msghdr . asεoc_cs_ιd , &tbl_data) < 0) ( Kifdef ADAP trinfo CTWC :Table Full or Data not Found"), Kendif return (-1) , ) else if (tbl_data->cs_ιd == L_INVALID_CS_ID) ( / ' No entry for this (CS, AΞSOC_CS) combo m TWC table */ Kifdef DEBUG printf CTWC. «AIN_0PER_CONTINUE sent to SSP\n") Kendif Kifdef ADAP trinfo CTWC. ERROR Event msg ignored << CONTINUE"), Kendif vs_slp_msg.msghdr .operation = AIN_OPER_CONTINUE, vs_slp_msg.msghdr .cs_ιd = ιnc_slp_msg->mεghdr cs_ιd, vs_slp_msg.msghdr .assoc_cs_ιd = L_INVALID_CS_ID, vs_slp_msg.msghdr .leg_ιd = ιnc_slp_msg->msghdr leg_ιd, vs_slp_msg.data_len = 0, ) else ( /* Previous communication exists between SLP and SSP for this (CS, ASSOC_CS) combo '/ switch (tbl_data->twc_state) ( case TWC_ORIGINATE_CALL_SUCCEΞS Kifdef DEBUG printf CTWC. «AIN_OPER_DIΞC0NNECT_LEG sent to SΞP\n"), Kendif Kifdef ADAP trinfo CTWC :DISCONNECT_LEG in response to ERROR Event"), Kendif vs_slp_jnsg.msghdr. operation = AIN_OPER_DIΞCONNECT_LEG; vs_slp_msg.msghdr . cs_ιd = tbl_data->cs_ιd, vs_slp_πιsg.msghdr .assoc_cs_ιd = tbl_data->assoc_cs_ιd, vs_slp_msg.msghdr . leg_ιd = nc_slp_msg->msghdr . leg_ιd, vs_slp_msg.data_len = 0; if (f_hashDelete (tbl_data) < 0) ( Kifdef ADAP trinfo CTWC: able Delete Failed, JUNK data in TWC table"); Kendif 603 brea ; default : brea ; Thu Jun 27 19:23:18 1996 SLP TWC.c 10 Page 10 of 19 -2^0- Thu Jun 27 19:23:18 1996 f_t c_handle_error_tdps Page 11 of 19 /* Send response message to SSP '/ if ( _CALS_send_CC_msg (&gs_twc_ιpc_addr , _vs_slp_msg) < 0) ( Kifdef ADAP trinfo CTWC :f_CALS_send_CC_msg failed for SLP"), Kendif if (f_hashDelete (tbl_data) < 0) ( Kifdef ADAP trinfo ( "TWC :Table Delete Failed, JUNK data in TWC table"); Kendif ) return (-1) ; return (0) ; Thu Jun 2719:23:181996 SLP rWC.c 11 Page 11 of 19 ■ PΛl- Thu Jun 2719:23:181996 f_twc_o_mιd_call Page 12 of 19 ****************** ******* Name Synopsis Author Coεkun Demir Date 1st released 11/11/95 Description Input parameters Return value Revision history Date Owner Description **************** *************** ******* int f_twc_o__i.d_c*ll (CALS_SLP_MSG_S *ιnc_slp_msg) ( SLP_TWC_DATA_S slp_data; SLP_TWC_DATA_S *tbl_data; CALS_SLP_MSG_S vs_slp_msg; if (f_hashFιnd (ιnc_slp_msg->msghdr . cs_ιd, ιnc_slp_msg->msghdr.assoc_cs_ιd, ttbl_data) < 0) ( Kifdef ADAP trinfo ("TWC:Table Full or Data not Found"), Kendif return (-1); ) else if (tbl_data->cs_ιd L INVALID CS ID) { /' No entry for thiε (CS, ASSOC_CS) combo m TWC table '/ /' Insert new data into table "/ slp_data. cs_ιd = ιnc_slp_msg->msghdr . cs_ιd, slp_data.assoc_cs_ιd = L_INVALID_CS_ID, slp_data. cs_leg_ιd = ιnc_slp_msg->msghdr . leg_ιd, slp_data.assoc_cs_leg_ιd = L_INVALID_LEG_ID, slp_data. twc_εtate = TWC_ORIGINATE_CALL, slp_data.fιrst_call_party = ORIG_CALL_PARTY . if (f_hashlnsert (&slp_data, tbl_data) < 0) ( Kifdef DEBUG printf CTWC: «AIN_OPER_CONTINUE sent to SSP\n"); Kendif Kifdef ADAP trinfo CTWC :Table Insert failed"); trinfo CTWC: CONTINUE in response to 0_MID_CALL" ) , Kendif vs_slp_msg.msghdr .operation = AIN_OPER_CONTINUE. vs_slp_msg.msghdr.cs_id = slp_data. cs_ιd, vs_slp_msg.msghdr .assoc_cs_ιd = slp_data assoc_cs_ιd; vs_slp_msg. sghdr . leg_ιd = nc_slp_msg->msghdr . leg_ιd, vs_slp_msg.data_len = 0; ) else ( Kifdef DEBUG printf CTWC: «AIN_OPER_ORIGINATE_CALL sent to SSP\n"), Kendif Kifdef ADAP trinfo ("TWC :ORIGINATE_CALL in response to 0_MID_CALL" ) ; Kendif vs_slp_msg.msghdr. operation = AIN_OPER_ORIGINATE_CALL; vs_slp_msg.msghdr.cs_ιd = slp_data.cs_ιd, vs_slp_msg.msghdr .assoc_cs_ιd = slp_data.assoc_cε_ιd, vs_slp_msg.msghdr . leg_ιd = ιnc_slp_msg->msghdr . leg_ιd; vs_slp_msg.data_len = 0; else ( ______ / » Previous communication exists between SLP and SSP for this Thu Jun 2719:23:181996 SLP TWC.c 12 Page 12 of 19 -2^2- Thu Jun 27 19:23:18 1996 f_twc o_mιd_call Page 13 of 19 (CS, ASSOC_CS) combo ', switch (tbl_data->twc_state) ( case TWC_ORIGINATE_CALL_SUCCESS . /* Update internal TWC hash table '/ tbl_data->twc_state = TWC_MERGE_CAL ; tbl_data->cs_leg_ιd = ιnc_slp_msg->msghd . leg_ιd, Kifdef DEBUG printf ("TWC: <<AIN_OPER_MERGE_CALL sent to SSP\n"), Kendif Kifdef ADAP trinfo CTWC :MERGE_CALL in response to 0_MID_CALL" ) , Kendif vs_slp_msg.msghdr .operation = AIN_OPER_MERGE_CALL; vε_slp_msg.msghdr .cs_ιd = tbl_data->cs_ιd, vs_slp_msg.msghdr.assoc_cs_ιd = tbl_data->assoc_cs_ιd; vs_slp_msg.msghdr . leg_ιd = ιnc_slp_mεg->msghdr . leg_ιd; vs_slp_msg.data_len = 0; break; default. Kifdef DEBUG printf CTWC: <<AIN_0PER_CONTINUE sent to SSP\n"); Kendif Kifdef ADAP trinfo CTWC: CONTINUE in response to 0_MID_CALL" ) , Kendif vs_slp_msg.ιrιsghdr .operation = AIN_OPER_CONTINUE; vs_slp_msg.rasghdr .cs_ιd = tbl_data->cs_ιd, vs_slp_msg.msghdr .assoc_cs_ιd = tbl_data->assoc_cs_ιd, vs_εlp_msg.msghdr . leg_ιd = ιnc_slp_msg->msghdr . leg_ιd; vs_slp_msg.data_len = 0; break ,- /* Send response message to SSP '/ if ( _CALΞ_send_CC_msg (4gs_twc_ιpc_addr, &vs_slp_msg) < 0) ( Kifdef ADAP trinfo ("TWC : f_CALS_send_CC_msg failed for SLP"), Kendif if (f_hashDelete (tbl_data) < 0) ( Kifdef ADAP trinfo CTWC:Table Delete Failed, JUNK data in TWC table") Kendif } return (-1) ; return (0) ; Thu Jun 2719:23:181996 SLP_TWC.c 13 Page 13 of 19 -2^3- Thu Jun 27 19:23:18 1996 f c t mid call Page 14 of 19 Name Synopsis Author : Coεkun Demir Date 1st released : 11/11/95 Description Input parameters Return value Revision history Date Owner Description * * * * * * * * * int £_t c_t_mid_call (CALS_SLP_MΞG_S * mc_slp_msg) ( SLP_TWC_DATA_S slp_data; SLP_TWC_DATA_Ξ *tbl_data; CALS_ΞLP_MSG_S vs_slp_msg; if (f_hashFind (ιnc_slp_msg->msghdr .cs_ιd, ιnc_slp_msg->msghdr .assoc_cs_ιd, 4tbl_data) < 0) ( Kifdef ADAP trInfo("TWC:Table Full or Data not Found"),- Kendif return (-1) ; ) else if ( tbl_data->cs_ιd L_INVALID_CS_ID) ( / » Wo entry for this (CS, ASSOC_CS) combo m TWC table '/ /' Insert new da ta into table */ slp_data.cs_ιd = ιnc_slp_msg->msghdr . cε_ιd; slp_data.assoc_cs_ιd = L_INVALID_CΞ_ID, slp_data.cs_leg_ιd = ιnc_slp_msg->msghdr leg_ιd, slp_data.assoc_cs_leg_ιd = L_INVALID_LEG_ID, slp_data.twc_state = TWC_ORIGINATE_CALL, slp_data.fιrst_call_party = TERM_CALL_PARTY , if (f_hashlnsert (4slp_data, tbl_data) < 0) ( Kifdef DEBUG printf ("TWC: «AIN_OPER_CONTINUE sent to SΞP\n"); Kendif Kifdef ADAP trinfo ("TWC: Table Insert failed"), trinfo ( "TWC: CONTINUE in response to T_MID_CALL" ) , Kendif vs_slp_msg.msghdr . operation = AIN_OPER_CONTINUE, vs_slp_msg.msghdr . cs_ιd = εlp_data. cs_ιd, vs_slp_msg.msghdr . assoc_cs_ιd = slp_data.assoc_cs_ιd; vs_slp_msg.πιsghdr.leg_.ιd = ιnc_slp_msg->msghdr leg_ιd; vs_slp_msg.data_len = 0; ) else { Kifdef DEBUG printf CTWC: <<AIN_OPER_ORIGINATE_CALL sent to SSP\n" ) ; Kendif Kifdef ADAP trinfo ("TWC : ORIGINATE_CALL in response to T_MID_CALL" ) , Kendif vs_slp_msg.ιrtsghdr .operation = AIN_OPER_ORIGINATE_CALL; vs_slp_msg.msghdr .cs_id = slp_data.cs_ιd; vs_slp_msg.msghdr .assoc_cs_id = slp_data.assoc_cε_ιd; vs_slp_msg.msghdr . leg_ιd = ιnc_slp_msg->msghdr . leg_ιd; vs_slp_msg.data_len = 0; ) } else ( ____ i f gf. PEBVG. Thu Jun 2719:23:181996 SLP_TWC.c 14 Page 14 of 19 -? - Thu Jun 2719:23:181996 f_twc__mιd_call Page 15 of 19 printf ("TWC: <<AIN_OPER_ORIGINATE_CALL sent to SSP\n"), Kendif Kifdef ADAP trinfo CTWC. ORIGINATE_CALL in response to T_MID_CALL") Kendif vs_slp_msg.msghdr .operation - AIN_OPER_CONTINUE, vs_slp_msg.msghdr .cs_ιd = ιnc_slp_msg->msghdr cs_ιd, vs_slp_msg.msghdr .assoc_cs_ιd = L_INVALID_CS_ID, vs_slp_msg.msghdr . leg_ιd = ιnc_slp_msg->msghdr leg_ιd vs_slp_msg.data_len = 0; /* Send responεe message to SSP '/ if ( f_CALS_send_CC_msg (&gs_twc_ιpc_addr , &vs_slp_msg) < 0) ( Kifdef ADAP trlnfoCTWC. f_CALS_send_CC_msg failed for SLP") Kendif if (f_hashDelete (tbl_data) < 0) ( Kifdef ADAP trinfo CTWC. Table Delete Failed, JUNK data in TWC table"), Kendif ) return (-1) , return (0) , Thu Jun 2719:23:181996 SLP TWCc 15 Page 15 of 19 -246- Thu Jun 2719:23:181996 f_twc_faιlure_outcome Page 17 of 19 ************* ******* ********* ******* ' Name ' Synopsis * Author . Coskun Demir ' Date 1st released : 11/11/95 ' Description ' Input parameters * .Return value * Revision history * Date Owner Description **************** int £_t c_failurβ_outcomβ (CALS_SLP_MSG_S * ιnc_slp_msg) ( SLP_TWC_DATA_S slp_data; CALS_SLP_MSG_ε vs_slp_msg, SLP_TWC_DATA_S *tbl_data, if (f_hashFιnd ( ιnc_slp_msg->mεghd . cs_ιd, ιnc_slp_msg->msghdr .assoc_cs_ιd, &tbl_data) < 0) { Kifdef ADAP trinfo CTWC: Table Full or Data not Found"); Kendif return (-1) ; ) else if (tbl_data->cs_ιd == L_INVALID_CS_ID) { /* No entry for this (CS, ASSOC_CS) combo m TWC table '/ Kifdef ADAP trInfo("TWC:NO information for CS(%d) or ASSOC_CS(%d) " , ιnc_slp_msg->msghdr . cs_ιd, ιnc_slp_msg->msghdr assoc_cs_ιd) , Kendif ) else if (tbl_data->cs_ιd '= L_INVALID_CS_ID) ( /* Previous communication exists between SLP and SSP for this (CS, ASSOC_CS) combo */ switch (tbl_data->twc_state) ( case TWC_MERGE_CALL . /* Merge_Call Request failed, change state back '/ /' Leave Connections unchanged '/ tbl_data->twc_state - TWC_ORIGINATE_CALL_SUCCESS; trinfo CTWC: SLP requested MERGE_CALL but it FAILED"), break; case TWC_ORIGINATE_CALL: case TWC_ORIGINATE_CALL_SUCCESS • default. if (f_hashDelete (tbl_data) < 0) ( Kifdef ADAP trinfo CTWC: Table Delete failed"), Kendif return (-1) , ) break; return ( 0 ) ; Thu Jun 2719:23:181996 SLPTWC.c 17 Page 17 of 19 Thu Jun 2719:23-181996 regιster_myjnggers Page 18 of 19 /' ********* ******************************** ************ ' Name r eg st er_my_ i gerε ( ) * Synopsis regιster_my_trιggers () ' Author Coskun Demir * Date 1st released " Description ' Input parameters * Return value 0 on success, -1 on failure ' Revision history ' Date Owner Description ******* ********* ************* "/ int rβgiβt*r__-y_trisgβrs ( ) ( CALS_SLP_TRGR_REG_MSG_Ξ vs_reg_ms ; /* Copy Name of SLP to message */ strncpy(vs_reg_msg.slp_name, TWC_SLP_NAME, DB_FEATURE_NAME_LENGTH) ; vs_reg_msg.slp_name[DB_FEATURE_NAME_LENGTH - 1] = 0, /* Set number of triggers to 0, f_CALS_add_trgr function will increment this aε triggers are added */ vs_reg_msg.nuπ_ f_trgrs = 0, f_CALS_add_trgr ("TWC_OMIDCALL" , &vs_reg_msg) , f_CALS_add_trgr CTWC_ODISC". -r.vs_reg_msg) , f_CALS_add_trgr ("TWC_OERROR" , &vs_reg_msg ) , Kif 0 f_CALS_add_trgr ( "TWC_TMIDCALL" , &vs_reg_mεg) , Kendif if ( f_CALS_regιster_trgrs (&vs_reg_msg, &gs_twc_ιpc_addr) < 0) ( Kifdef ADAP trError ("TWC. Cannot register to CALS for trgrs"), //putErr (LG_N0ERR_C, "Cannot register to CALS for trgrs"), Kendi return (-1) , ) 1043 1 Kifdef ADAP 1014 1 trExit ("TWC. Trgr Registration message sent to Call Control"); 1045 1 Kendif 1047 1 return (0) , 1049 Thu Jun 2719:23.181996 SLP TWC.c 18 Page 18 of 19 -248- Thu Jun 2719:23:181996 regιster_as_nmobj Page 19 of 19 | /*" ******* ' Name regιεter_as_nmob I) ' Synopsis mt regιster_as_nmob () ' Author Coskun Demir * Date 1st released 26 Oct 1995 • Description Registers the SLP to SPM aε a named object ' Input parameters none ' Return value 0 on success. * -1 on failure * Revision history * Date Owner Description nt rβ_iβtβr_as_nmobj () ( SPMreg_t SPMreg_s; / ** ., *** , Determine the type of registration and corresponding own addresε ... * . * , *** . * .. *** . ** ... * ., * ,.,. * ,, * .,. * .. * ,, * , ** . * , * ..,,. ****** ,, **/ SPMreg_s ,ob. yp = gs_twc_ιpc_addr; SPMreg_s.srvtyp = L_IPC; /** ,. ** . ** .. *** . * . * . ** . * .. * , Now register to SPM if ( (spm_reg(&SPMreg_ε) ) < 0 ) ( Kifdef ADAP trError ( "TWC: SPM registration failed"), putErr(LG_SPM) ; Kendif return (-1 ) ; ) return (0) ; Thu Jun 2719:23:181996 SLP TWC.c 19 Page 19 of 19 -249- Thu Jun 2719:23:251996 Page 1 of 9 static char rcsidt J="Sld: SLP_hash.c,v 1.4 1996/05/21 21:16:51 demir Exp $ Copyright ( c) EBS" ******* ' Copyright (c) Engineering and Business Systems, Inc. (EBS) " All rights reserved. * 9 * This document contains confidential and proprietary information of EBS 10 * and any reproduction, disclosure, or use whole or part is expressly 11 * prohibited, except as may be specifically authorized by prior written 12 * agreement or permission of EBS. 13 ********* ******* ' VERSION SReviεion: 1.4 $ ' DATE SDate: 1996/05/21 21:16:51 $ 17 * 18 * MODULE NAME SRCSfile: SLP_hash.c.v $ 19 * AUTHOR ' DESCRIPTION 21 * DATE 1st REL 22 ' REV. HIST. ' Date Owner Description ************** • RESTRICTED RIGHTS LEGEND ' Use, duplication, or diεcloεure by Goverment Is Subject to reεtrictionε as * set forth subparagraph (c) (1) (ii) of the Rights Technical Data and ' Computer Software clause at DEARS 252.227-7013 * Kinclude <≤tdlιb.h Kinclude <sys/types.h> Kinclude <sys/tιme.h> Kinclude <sys/stropts .h> Kinclude <sys/ipc.h> Kinclude <sys/shm.h> Kinclude <errno.h> 45 Kinclude <apι.h> 46 Kinclude <sccp_scpa.h> 47 Kinclude <tcap.h> Kinclude <ADAP_G.h> Kinclude <SYS_G_types . h> 53 Kinclude <CALS_G_cv_defs.h> 54 Kinclude <CALS_G_αι_rnsg.h> 55 Kinclude <CALS_G_cm_defs .h> Kinclude <SLP_TWC.h> 59 /* . ** . * .... ** ,».. * . ****** , ********* ., ***** . * .. (0 Globals 61 63 SLP_TWC_DATA_S g_twc_tbl (TWC_MAX_TBL_ΞIZE] ; 64 int g_twc_hash_no_elmnts; Name .- h_hashlnι t Synopsis . - void h_hashlnιt () Author : Coskun Demir 71 Date 1st released : 11/11/95 72 Description : Initializes hash table for TWC SLP Input parameters : none Return value : none Thu Jun 2719:23:251996 SLP_hash.c 1 Page 1 of 9 Thu Jun 2719:23:251996 hjiashlnil Page 2 of 9 * Revision history * Date Owner Description ******************************************** ******** *********** vo d h_haβhlait ( ) { g_twc_hash_no_elmnts = 0; memset! (void *) ig_twc_tbl (0] , L_INVALID_CS_ID, sizeof (SLP_TWC_DATA_S) * TWC_MAX_TBL_ΞIZE) , Thu Jun 2719:23:251996 SLP_hash.c 2 Page 2 of 9 Thu Jun 2719:23:251996 hashKey Page 3 of 9 ************************************* *********** Name Synopsis Author : Coskun Demir Date 1st released : 11/11/95 Description Input parameters Return va2ue Revision history Date Owner Description ********** ******* ****** , mt f_h»βhKβy (CALS_CS_ID key) ( return (key % TWC_MAX_TBL_SIZE) ; Thu Jun 2719:23:251996 SLP iash.c 3 Page 3 of 9 -252- ThuJun2719.23:251996 LhashSearch Page 4 of 9 ********** * Name ' Synopsis * Author : Coskun Demir ' Date 1st released : 11/11/95 * Description * Input parameters * Return value ' Revision history ' Date Owner Description ********** ******* ********************** ******** int £_hashSaarch (mt cs_ιd) = 3 = f_hashKey (cs_ιd), do { if ( (g_twc_tbl[ι) cs_ιd == cs_ιd) || (g_twc_tbl(ι) .cs_ιd == L_INVALID_CS_ID) ) ( return (1) , ) 1 = (1 + 1) % TWC_MAX_TBL_ΞIZE, ) while (1 '= 3 ) ; /• Tajbie Full, Search failed '/ return (-1) ; Thu Jun 2719:23:251996 SlP_hash.c 4 Page 4 of 9 -253- Thu Jun 2719:23:251996 hashFind Page 5 of 9 | /' ******* ********** ****************** ******** **************** ' Name ' Synopsis * Author : Coskun Demir * Date 1st released : 11/11/95 ' Description * Input parameters ' Return value ' Revision history * Date Owner Description ********* ****** , mt f_hashrind (CALS_CS_ID cs_ld, CALS_CS_ID assoc_cs_id, SLP_TWC_DATA_S **data) int l, _ , if ( (l = f_hashSearch (cs_ιd) ) < 0) f Kifdef ADAP trinfo ("TWC-HASH: Hash table full. Search failed"); Kendif return (-1) ,- ) if ( (g_twc_tbl[ii .cs_ιd == L_INVALID_CΞ_ID) i_ (assoc_cs_id != L_INVALID_CS_ID) ) no 2 ( /' There is no entry for CS ^ ID, Now look-up for Associated CS */ if ( (} = f_hashSearch (assoc_cs_ιd) ) < 0) ( Kifdef ADAP trinfo ("TWC-HASH: Hash table full. Search failed" ); Kendif return (- 1 ) ; ) if (g_twc_tbl[jj .cs_ιd == L_INVALID_CS_ID) { /• There is no entry for this (CS, ASSOC_CS) combo in table /* Set location as ' i' for possible insertion '/ *data = 4g_twc_tbl I l ) ; return (0); /* Wot Found */ ) •data = &g_twc_tbl ( ) ; return (0) ; ) ♦ data = &g_twc_tbl [ i ] ,- return (0) ; Thu Jun 2719:23:251996 SLP iashx 5 Page 5 of 9 Thu Jun 27 19.23:25 1996 hashlnsert Page 6 of 9 •Name Synopsis Author .- Coskun Demir Date 1st released .- 11/11/95 Description Input parameters Return value Revision history Date Owner Description * * * * * * * * * * * * * int £_baβhl_aart ( SLP_TWC_DATA_S *new_data, SLP_TWC_DATA_S *tbl_data) { if (g_twc_hash_no_elmnts == TWC_MAX_TBL_SIZE) ( Kifdef ADAP trinfo ("TWC:Table full, Insertion failed"), Kendi return (-1) ; ) if (tbl_data->cs_ιd == L_INVALID_CS_ID) ( /* Insert to the table V memcpy ((void *) tbl_data, (void *) new_data, sizeof (SLP_TWC_DATA_S) ) g_twc_hash_no_elmnts++ ; return (0) ; ) else if ( (tbl_data->cs_ιd == new_data->cs_ιd) |j (tbl_data->cs_ιd == new_data->assoc_cs_ιd) ) ( /* Error, Mul tiple insertion */ Kifdef ADAP trinfo CTWC:Data CS(%d) already in Table". new_data->cs_ιd) , Kendif return (-1) ; ) Thu Jun 2719.23:251996 SLP hash.c 6 Page 6 of 9 -255- Thu Jun 27 19:23:25 1996 hash ove Page 7 of 9 int f_h»abMovβ (SLP_TWC_DATA_S *tbl_data) { mt l; SLP_TWC_DATA_S tmp_slp_data; 243 if ( (ι = f_hashSearch (tbl_data->assoc_cs_ιd) ) 0) 241 ( 245 Kifdef ADAP 246 trinfo CTWC-HASH: Hash table full, Search failed"), Kendif memcpy ((void *) &tmp_slp_data, (void *) tbl_data, sizeof (SLP_TWC_DATA_S) ) ,- tbl_data->cs_ιd = tmp_slp_data assoc_cs_ιd, tbl_data->assoc_cs_ιd = tmp_slp_data.cs_ιd, tbl_data->cε_leg_ιd = tmp_εlp_data aεsoc_cs_leg_ιd, tbl_data->assoc_cs_leg_ιd = tmp_slp_data cs_leg_ιd, tbl_data->fιrst_call_party = tmp_slp_data. fιrst_call_party, return (0) , 259 if (g_twc_tbl { l ) . cs_ιd L_INVALID_CS_ID) 260 ( 261 / » Wove Ta ie da ta to new location */ 262 g_twc_tbl[ιj .cs_ιd = tbl_data->assoc_cs_ιd, 263 g_twc_tbl [ I) .assoc_cs_ιd = tbl_data->cs_ιd, 264 g_twc_tbl [ι) .cs_leg_ιd = tbl_data->assoc_cs_leg_ιd, 265 g_twc_tbl [ l ] .assoc_cs_leg_ιd = tbl_data->cs_leg_ιd, 266 g_twc_tbl [ I ] . twc_state = tbl_data->twc_state, 267 g_twc_tbl [ ι ] f ιrst_call_party = tbl_data->f ιrst_call_party, 269 / » Delete old entry '/ tbl_data->cs_ιd = L_INVALID_CS_ID, tbl_data->assoc_cs_ιd = L_INVALID_CS_ID, return ( 0 ) , ) else { Kifdef ADAP trInfo ( "TWC :ASSOC_CS ( d) already in Tabl e , Move Failed" , tbl_data->assoc_cs_ιd ) , Kendif return ( -1 ) , Thu Jun 27 19:23:25 1996 SLP_hash.c 7 Page 7 of 9 -256- Thu Jun 2719:23.251996 hashModify Page 8 ol 9 * Name * Synopεiε ' Author : Coεkun Demir ' Date 1st released . 11/11/95 ' Description ' Input parameters " Return value ' Revision history ' Date Owner Description ******* int f_haahModi£y (SLP_TWC_DATA_S *new_data. SLP_TWC_DATA_S *tbl data) ( if (tbl_data->cs_ιd == new_data-»cs_ιd) ( /* Found, Modify data '/ memcpy ((void •) „tbl_data, (void *) new_data, sizeof 1SLP_TWC_DATA_S) ) , return (0) , ) else if ( bl_data->cs_ιd == new_data->assoc_cs_ιd) ( new_data->cs_ιd = tbl_data->assoc_cs_ιd, new_data->assoc_cs_ιd = tbl_data->cs_ιd; memcpy I (void *) _tbl_data, (void *) new_data, sizeof (ΞLP_TWC_DATA_S) ) , return (0) ; ) else if (tbl_data->cs_ιd == L_INVALID_CS_ID) ( Kifdef ADAP trinfo CTWC. Data CS(%d) not found in Table", data->cs_ιd) Kendif return (-1) ,- ) ) Thu Jun 2719:23:251996 SLP hash.c 8 Page 8 ol 9 Thu Jun 2719:23:251996 hashDelete Page 9 of 9 Name Synopsis Author CosJun Demi Date 1st released 11/11/95 Description Input parameters Return value Revision history Date Owner Description int f_h»shDβlβtβ ( SLP_TWC_DATA_S *tbl_data) ( tbl_data->cε_ιd = L_I VALID_CS_ID, tbl_data->assoc_cs_ιd = L_INVALID_CΞ_ID, g_twc_hash_no_elmnts-- , return (0) , Thu Jun 2719:23.251996 SLP hash.c 9 Page 9 ol 9

Claims: Claims : 1. A dynamically modifiable call processor, comprising: a basic call state machine, said basic call state machine being an instantiation of a dynamically executable call model, said dynamically executable call model referencing at least one shared library file, wherein said shared library includes call processing functions. 2. A call processor according to claim 1, wherein: said basic call state machine includes a plurality of points-in-call (PICs) , said PICs being defined as functions in at least one shared library . 3. A call processor according to claim 2, wherein: at least one of said PICs includes a trigger detection point (TDP) . 4. A call processor according to claim 2, wherein: at least some of said PICs are Advanced Intelligent Network (AIN) compliant. 5. A call processor according to claim 4, wherein: said TDP is AIN compliant. 6. A call processor according to claim 2, wherein: said PICs are defined as computer language C-functions. 7. A call processor according to claim 3, wherein: said TDPs are defined as computer language C-function. 8. A dynamically modifiable call processing method, comprising: a) creating at least one shared library file containing modifiable call processing functions; b) creating a dynamically executable call model containing at least one link to the at least one shared library file; and c) creating a basic call state machine as an instantiation of the call model, the state machine for processing a call, wherein the call model and the shared library file are modifiable without interrupting the state machine. 9. A method according to claim 8, wherein: the modifiable call processing functions include a plurality of points-in-call (PICs) . 10. A method according to claim 9, wherein: at least one of the PICs includes a trigger detection point (TDP) . 11. A method according to claim 9, wherein: at least some of the PICs are Advanced Intelligent Network (AIN) compliant. 12. A method according to claim 11, wherein: the TDP is AIN compliant 13. A method according to claim 9, wherein: the PICs are defined as computer language C-functions. 14. A method according to claim 10, wherein: the TDP is defined as a computer language C-function.

Inventors: OZALP AHMET, OZALP, AHMET
Applicants: NEWNET INC, NEWNET, INC.
Application year: 1997
Main classification: G06F13
IPC codes: H04Q3