root/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ft_to_sngss7_iam
  2. ft_to_sngss7_acm
  3. ft_to_sngss7_anm
  4. ft_to_sngss7_rel
  5. ft_to_sngss7_rlc
  6. ft_to_sngss7_rsc
  7. ft_to_sngss7_rsca
  8. ft_to_sngss7_blo
  9. ft_to_sngss7_bla
  10. ft_to_sngss7_ubl
  11. ft_to_sngss7_uba
  12. ft_to_sngss7_lpa
  13. ft_to_sngss7_gra
  14. ft_to_sngss7_grs
  15. ft_to_sngss7_cgba
  16. ft_to_sngss7_cgua
  17. ft_to_sngss7_cgb
  18. ft_to_sngss7_cgu

   1 /*
   2  * Copyright (c) 2009, Konrad Hammel <konrad@sangoma.com>
   3  * All rights reserved.
   4  *
   5  * Redistribution and use in source and binary forms, with or without
   6  * modification, are permitted provided that the following conditions
   7  * are met:
   8  *
   9  * * Redistributions of source code must retain the above copyright
  10  * notice, this list of conditions and the following disclaimer.
  11  *
  12  * * Redistributions in binary form must reproduce the above copyright
  13  * notice, this list of conditions and the following disclaimer in the
  14  * documentation and/or other materials provided with the distribution.
  15  *
  16  * * Neither the name of the original author; nor the names of any contributors
  17  * may be used to endorse or promote products derived from this software
  18  * without specific prior written permission.
  19  *
  20  *
  21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  24  * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER
  25  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  26  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  27  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  28  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  29  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  30  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  31  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32  */
  33 
  34 /* INCLUDE ********************************************************************/
  35 #include "ftmod_sangoma_ss7_main.h"
  36 /******************************************************************************/
  37 
  38 /* DEFINES ********************************************************************/
  39 /******************************************************************************/
  40 
  41 /* GLOBALS ********************************************************************/
  42 /******************************************************************************/
  43 
  44 /* PROTOTYPES *****************************************************************/
  45 void ft_to_sngss7_iam(ftdm_channel_t * ftdmchan);
  46 void ft_to_sngss7_acm(ftdm_channel_t * ftdmchan);
  47 void ft_to_sngss7_anm(ftdm_channel_t * ftdmchan);
  48 void ft_to_sngss7_rel(ftdm_channel_t * ftdmchan);
  49 void ft_to_sngss7_rlc(ftdm_channel_t * ftdmchan);
  50 
  51 void ft_to_sngss7_rsc(ftdm_channel_t * ftdmchan);
  52 void ft_to_sngss7_rsca(ftdm_channel_t * ftdmchan);
  53 
  54 void ft_to_sngss7_blo(ftdm_channel_t * ftdmchan);
  55 void ft_to_sngss7_bla(ftdm_channel_t * ftdmchan);
  56 void ft_to_sngss7_ubl(ftdm_channel_t * ftdmchan);
  57 void ft_to_sngss7_uba(ftdm_channel_t * ftdmchan);
  58 
  59 void ft_to_sngss7_lpa(ftdm_channel_t * ftdmchan);
  60 
  61 void ft_to_sngss7_gra(ftdm_channel_t * ftdmchan);
  62 void ft_to_sngss7_grs(ftdm_channel_t * ftdmchan);
  63 
  64 void ft_to_sngss7_cgb(ftdm_channel_t * ftdmchan);
  65 void ft_to_sngss7_cgu(ftdm_channel_t * ftdmchan);
  66 
  67 void ft_to_sngss7_cgba(ftdm_channel_t * ftdmchan);
  68 void ft_to_sngss7_cgua(ftdm_channel_t * ftdmchan);
  69 /******************************************************************************/
  70 
  71 /* FUNCTIONS ******************************************************************/
  72 void ft_to_sngss7_iam (ftdm_channel_t * ftdmchan)
  73 {
  74         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
  75         
  76         sngss7_chan_data_t      *sngss7_info = ftdmchan->call_data;;
  77         const char                      *clg_nadi = NULL;
  78         const char                      *cld_nadi = NULL;
  79         const char                      *clg_subAddr = NULL;
  80         const char                      *cld_subAddr = NULL;
  81         char                            subAddrIE[MAX_SIZEOF_SUBADDR_IE];
  82         SiConEvnt                       iam;
  83         
  84         sngss7_info->suInstId   = get_unique_id ();
  85         sngss7_info->spInstId   = 0;
  86         sngss7_info->spId               = 1;
  87         
  88         memset (&iam, 0x0, sizeof (iam));
  89         
  90         /* copy down the nature of connection indicators */
  91         iam.natConInd.eh.pres                           = PRSNT_NODEF;
  92         iam.natConInd.satInd.pres                       = PRSNT_NODEF;
  93         iam.natConInd.satInd.val                        = 0; /* no satellite circuit */
  94         iam.natConInd.contChkInd.pres           = PRSNT_NODEF;
  95         iam.natConInd.contChkInd.val            = CONTCHK_NOTREQ;
  96         iam.natConInd.echoCntrlDevInd.pres      = PRSNT_NODEF;
  97         iam.natConInd.echoCntrlDevInd.val       = ECHOCDEV_INCL;
  98         
  99         /* copy down the forward call indicators */
 100         iam.fwdCallInd.eh.pres                          = PRSNT_NODEF;
 101         iam.fwdCallInd.natIntCallInd.pres       = PRSNT_NODEF;
 102         iam.fwdCallInd.natIntCallInd.val        = 0x00;
 103         iam.fwdCallInd.end2EndMethInd.pres      = PRSNT_NODEF;
 104         iam.fwdCallInd.end2EndMethInd.val       = E2EMTH_NOMETH;
 105         iam.fwdCallInd.intInd.pres                      = PRSNT_NODEF;
 106         iam.fwdCallInd.intInd.val                       = INTIND_NOINTW;
 107         iam.fwdCallInd.end2EndInfoInd.pres      = PRSNT_NODEF;
 108         iam.fwdCallInd.end2EndInfoInd.val       = E2EINF_NOINFO;
 109         iam.fwdCallInd.isdnUsrPrtInd.pres       = PRSNT_NODEF;
 110         iam.fwdCallInd.isdnUsrPrtInd.val        = ISUP_USED;
 111         iam.fwdCallInd.isdnUsrPrtPrfInd.pres = PRSNT_NODEF;
 112         iam.fwdCallInd.isdnUsrPrtPrfInd.val = PREF_PREFAW;
 113         iam.fwdCallInd.isdnAccInd.pres          = PRSNT_NODEF;
 114         iam.fwdCallInd.isdnAccInd.val           = ISDNACC_ISDN;
 115         iam.fwdCallInd.sccpMethInd.pres         = PRSNT_NODEF;
 116         iam.fwdCallInd.sccpMethInd.val          = SCCPMTH_NOIND;
 117         
 118         /* copy down the calling number information */
 119         iam.cgPtyCat.eh.pres                            = PRSNT_NODEF;
 120         iam.cgPtyCat.cgPtyCat.pres                      = PRSNT_NODEF;
 121         iam.cgPtyCat.cgPtyCat.val                       = CAT_ORD;      /* ordinary suscriber */
 122         
 123         /* copy down the transmission medium requirements */
 124         iam.txMedReq.eh.pres                            = PRSNT_NODEF;
 125         iam.txMedReq.trMedReq.pres                      = PRSNT_NODEF;
 126         iam.txMedReq.trMedReq.val                       = ftdmchan->caller_data.bearer_capability;
 127 
 128         if ((g_ftdm_sngss7_data.cfg.isupIntf[sngss7_info->circuit->infId].switchType == LSI_SW_ANS88) ||
 129                 (g_ftdm_sngss7_data.cfg.isupIntf[sngss7_info->circuit->infId].switchType == LSI_SW_ANS92) ||
 130                 (g_ftdm_sngss7_data.cfg.isupIntf[sngss7_info->circuit->infId].switchType == LSI_SW_ANS95)) {
 131 
 132                 /* include only if we're running ANSI */
 133                 iam.fwdCallInd.transCallNInd.pres   = PRSNT_NODEF;
 134                 iam.fwdCallInd.transCallNInd.val    = 0x0;
 135 
 136                 iam.usrServInfoA.eh.pres                                = PRSNT_NODEF;
 137 
 138                 iam.usrServInfoA.infoTranCap.pres               = PRSNT_NODEF;
 139                 switch (ftdmchan->caller_data.bearer_capability) {
 140                 /**********************************************************************/
 141                 case (FTDM_BEARER_CAP_SPEECH):
 142                         iam.usrServInfoA.infoTranCap.val        = 0x0;                  /* speech as per ATIS-1000113.3.2005 */
 143                         break;
 144                 /**********************************************************************/
 145                 case (FTDM_BEARER_CAP_64K_UNRESTRICTED):
 146                         iam.usrServInfoA.infoTranCap.val        = 0x8;                  /* unrestricted digital as per ATIS-1000113.3.2005 */
 147                         break;
 148                 /**********************************************************************/
 149                 case (FTDM_BEARER_CAP_3_1KHZ_AUDIO):
 150                         iam.usrServInfoA.infoTranCap.val        = 0x10;                 /* 3.1kHz audio as per ATIS-1000113.3.2005 */
 151                         break;
 152                 /**********************************************************************/
 153                 default:
 154                         SS7_ERROR_CHAN(ftdmchan, "Unknown Bearer capability falling back to speech%s\n", " ");
 155                         iam.usrServInfoA.infoTranCap.val        = 0x0;                  /* speech as per ATIS-1000113.3.2005 */
 156                         break;
 157                 /**********************************************************************/
 158                 } /* switch (ftdmchan->caller_data.bearer_capability) */
 159 
 160                 iam.usrServInfoA.cdeStand.pres                  = PRSNT_NODEF;
 161                 iam.usrServInfoA.cdeStand.val                   = 0x0;                          /* ITU-T standardized coding */
 162                 iam.usrServInfoA.tranMode.pres                  = PRSNT_NODEF;
 163                 iam.usrServInfoA.tranMode.val                   = 0x0;                          /* circuit mode */
 164                 iam.usrServInfoA.infoTranRate0.pres             = PRSNT_NODEF;
 165                 iam.usrServInfoA.infoTranRate0.val              = 0x10;                         /* 64kbps origination to destination */
 166                 iam.usrServInfoA.infoTranRate1.pres             = PRSNT_NODEF;
 167                 iam.usrServInfoA.infoTranRate1.val              = 0x10;                         /* 64kbps destination to origination */
 168                 iam.usrServInfoA.chanStruct.pres                = PRSNT_NODEF;
 169                 iam.usrServInfoA.chanStruct.val                 = 0x1;                          /* 8kHz integrity */
 170                 iam.usrServInfoA.config.pres                    = PRSNT_NODEF;
 171                 iam.usrServInfoA.config.val                             = 0x0;                          /* point to point configuration */
 172                 iam.usrServInfoA.establish.pres                 = PRSNT_NODEF;
 173                 iam.usrServInfoA.establish.val                  = 0x0;                          /* on demand */
 174                 iam.usrServInfoA.symmetry.pres                  = PRSNT_NODEF;
 175                 iam.usrServInfoA.symmetry.val                   = 0x0;                          /* bi-directional symmetric */
 176                 iam.usrServInfoA.usrInfLyr1Prot.pres    = PRSNT_NODEF;
 177                 iam.usrServInfoA.usrInfLyr1Prot.val             = 0x2;                          /* G.711 ulaw */
 178                 iam.usrServInfoA.rateMultiplier.pres    = PRSNT_NODEF;
 179                 iam.usrServInfoA.rateMultiplier.val             = 0x1;                          /* 1x rate multipler */
 180         } /* if ANSI */
 181         
 182         /* copy down the called number information */
 183         copy_cdPtyNum_to_sngss7 (&ftdmchan->caller_data, &iam.cdPtyNum);
 184         
 185         /* copy down the calling number information */
 186         
 187         copy_cgPtyNum_to_sngss7 (&ftdmchan->caller_data, &iam.cgPtyNum);
 188 
 189         /* check if the user would like a custom NADI value for the calling Pty Num */
 190         clg_nadi = ftdm_call_get_var(&ftdmchan->caller_data, "ss7_clg_nadi");
 191         if ((clg_nadi != NULL) && (*clg_nadi)) {
 192                 SS7_DEBUG_CHAN(ftdmchan,"Found user supplied Calling NADI value \"%s\"\n", clg_nadi);
 193                 iam.cgPtyNum.natAddrInd.val     = atoi(clg_nadi);
 194         } else {
 195                 iam.cgPtyNum.natAddrInd.val     = g_ftdm_sngss7_data.cfg.isupIntf[sngss7_info->circuit->infId].clg_nadi;
 196                 SS7_DEBUG_CHAN(ftdmchan,"No user supplied NADI value found for CLG, using \"%d\"\n", iam.cgPtyNum.natAddrInd.val);
 197         }
 198 
 199         cld_nadi = ftdm_call_get_var(&ftdmchan->caller_data, "ss7_cld_nadi");
 200         if ((cld_nadi != NULL) && (*cld_nadi)) {
 201                 SS7_DEBUG_CHAN(ftdmchan,"Found user supplied Called NADI value \"%s\"\n", cld_nadi);
 202                 iam.cdPtyNum.natAddrInd.val     = atoi(cld_nadi);
 203         } else {
 204                 iam.cdPtyNum.natAddrInd.val     = g_ftdm_sngss7_data.cfg.isupIntf[sngss7_info->circuit->infId].cld_nadi;
 205                 SS7_DEBUG_CHAN(ftdmchan,"No user supplied NADI value found for CLD, using \"%d\"\n", iam.cdPtyNum.natAddrInd.val);
 206         }
 207 
 208         /* check if the user would like us to send a clg_sub-address */
 209         clg_subAddr = ftdm_call_get_var(&ftdmchan->caller_data, "ss7_clg_subaddr");
 210         if ((clg_subAddr != NULL) && (*clg_subAddr)) {
 211                 SS7_DEBUG_CHAN(ftdmchan,"Found user supplied Calling Sub-Address value \"%s\"\n", clg_subAddr);
 212                 
 213                 /* clean out the subAddrIE */
 214                 memset(subAddrIE, 0x0, sizeof(subAddrIE));
 215 
 216                 /* check the first character in the sub-address to see what type of encoding to use */
 217                 switch (clg_subAddr[0]) {
 218                 case '0':                                               /* NSAP */
 219                         encode_subAddrIE_nsap(&clg_subAddr[1], subAddrIE, SNG_CALLING);
 220                         break;
 221                 case '1':                                               /* national variant */
 222                         encode_subAddrIE_nat(&clg_subAddr[1], subAddrIE, SNG_CALLING);
 223                         break;
 224                 default:
 225                         SS7_ERROR_CHAN(ftdmchan,"Invalid Calling Sub-Address encoding requested: %c\n", clg_subAddr[0]);
 226                         break;
 227                 } /* switch (cld_subAddr[0]) */
 228 
 229 
 230                 /* if subaddIE is still empty don't copy it in */
 231                 if (subAddrIE[0] != '0') {
 232                         /* check if the clg_subAddr has already been added */
 233                         if (iam.accTrnspt.eh.pres == PRSNT_NODEF) {
 234                                 /* append the subAddrIE */
 235                                 memcpy(&iam.accTrnspt.infoElmts.val[iam.accTrnspt.infoElmts.len], subAddrIE, (subAddrIE[1] + 2));
 236                                 iam.accTrnspt.infoElmts.len             = iam.accTrnspt.infoElmts.len +subAddrIE[1] + 2;
 237                         } else {
 238                                 /* fill in from the beginning */
 239                                 iam.accTrnspt.eh.pres                   = PRSNT_NODEF;
 240                                 iam.accTrnspt.infoElmts.pres    = PRSNT_NODEF;
 241                                 memcpy(iam.accTrnspt.infoElmts.val, subAddrIE, (subAddrIE[1] + 2));
 242                                 iam.accTrnspt.infoElmts.len             = subAddrIE[1] + 2;
 243                         } /* if (iam.accTrnspt.eh.pres */
 244                 } /* if (subAddrIE[0] != '0') */
 245         }
 246 
 247         /* check if the user would like us to send a cld_sub-address */
 248         cld_subAddr = ftdm_call_get_var(&ftdmchan->caller_data, "ss7_cld_subaddr");
 249         if ((cld_subAddr != NULL) && (*cld_subAddr)) {
 250                 SS7_DEBUG_CHAN(ftdmchan,"Found user supplied Called Sub-Address value \"%s\"\n", cld_subAddr);
 251                 
 252                 /* clean out the subAddrIE */
 253                 memset(subAddrIE, 0x0, sizeof(subAddrIE));
 254 
 255                 /* check the first character in the sub-address to see what type of encoding to use */
 256                 switch (cld_subAddr[0]) {
 257                 case '0':                                               /* NSAP */
 258                         encode_subAddrIE_nsap(&cld_subAddr[1], subAddrIE, SNG_CALLED);
 259                         break;
 260                 case '1':                                               /* national variant */
 261                         encode_subAddrIE_nat(&cld_subAddr[1], subAddrIE, SNG_CALLED);
 262                         break;
 263                 default:
 264                         SS7_ERROR_CHAN(ftdmchan,"Invalid Called Sub-Address encoding requested: %c\n", cld_subAddr[0]);
 265                         break;
 266                 } /* switch (cld_subAddr[0]) */
 267 
 268                 /* if subaddIE is still empty don't copy it in */
 269                 if (subAddrIE[0] != '0') {
 270                         /* check if the cld_subAddr has already been added */
 271                         if (iam.accTrnspt.eh.pres == PRSNT_NODEF) {
 272                                 /* append the subAddrIE */
 273                                 memcpy(&iam.accTrnspt.infoElmts.val[iam.accTrnspt.infoElmts.len], subAddrIE, (subAddrIE[1] + 2));
 274                                 iam.accTrnspt.infoElmts.len             = iam.accTrnspt.infoElmts.len +subAddrIE[1] + 2;
 275                         } else {
 276                                 /* fill in from the beginning */
 277                                 iam.accTrnspt.eh.pres                   = PRSNT_NODEF;
 278                                 iam.accTrnspt.infoElmts.pres    = PRSNT_NODEF;
 279                                 memcpy(iam.accTrnspt.infoElmts.val, subAddrIE, (subAddrIE[1] + 2));
 280                                 iam.accTrnspt.infoElmts.len             = subAddrIE[1] + 2;
 281                         } /* if (iam.accTrnspt.eh.pres */
 282                 } /* if (subAddrIE[0] != '0') */
 283         } /* if ((cld_subAddr != NULL) && (*cld_subAddr)) */
 284 
 285 
 286 
 287 
 288         sng_cc_con_request (sngss7_info->spId,
 289                                                 sngss7_info->suInstId,
 290                                                 sngss7_info->spInstId,
 291                                                 sngss7_info->circuit->id, 
 292                                                 &iam, 
 293                                                 0);
 294 
 295         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx IAM clg = \"%s\" (NADI=%d), cld = \"%s\" (NADI=%d)\n",
 296                                                         sngss7_info->circuit->cic,
 297                                                         ftdmchan->caller_data.cid_num.digits,
 298                                                         iam.cgPtyNum.natAddrInd.val,
 299                                                         ftdmchan->caller_data.dnis.digits,
 300                                                         iam.cdPtyNum.natAddrInd.val);
 301 
 302         ftdm_call_clear_vars(&ftdmchan->caller_data);
 303         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 304         return;
 305 }
 306 
 307 /******************************************************************************/
 308 void ft_to_sngss7_acm (ftdm_channel_t * ftdmchan)
 309 {
 310         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 311         
 312         sngss7_chan_data_t      *sngss7_info = ftdmchan->call_data;
 313         sng_isup_inf_t          *isup_intf =  &g_ftdm_sngss7_data.cfg.isupIntf[sngss7_info->circuit->infId];
 314         SiCnStEvnt acm;
 315         
 316         memset (&acm, 0x0, sizeof (acm));
 317         
 318         /* fill in the needed information for the ACM */
 319         acm.bckCallInd.eh.pres                          = PRSNT_NODEF;
 320         acm.bckCallInd.chrgInd.pres                     = PRSNT_NODEF;
 321         acm.bckCallInd.chrgInd.val                      = CHRG_CHRG;
 322         acm.bckCallInd.cadPtyStatInd.pres       = PRSNT_NODEF;
 323         acm.bckCallInd.cadPtyStatInd.val        = 0x01;
 324         acm.bckCallInd.cadPtyCatInd.pres        = PRSNT_NODEF;
 325         acm.bckCallInd.cadPtyCatInd.val         = CADCAT_ORDSUBS;
 326         acm.bckCallInd.end2EndMethInd.pres      = PRSNT_NODEF;
 327         acm.bckCallInd.end2EndMethInd.val       = E2EMTH_NOMETH;
 328         acm.bckCallInd.intInd.pres                      = PRSNT_NODEF;
 329         acm.bckCallInd.intInd.val                       = INTIND_NOINTW;
 330         acm.bckCallInd.end2EndInfoInd.pres      = PRSNT_NODEF;
 331         acm.bckCallInd.end2EndInfoInd.val       = E2EINF_NOINFO;
 332         acm.bckCallInd.isdnUsrPrtInd.pres       = PRSNT_NODEF;
 333         acm.bckCallInd.isdnUsrPrtInd.val        = ISUP_USED;
 334         acm.bckCallInd.holdInd.pres                     = PRSNT_NODEF;
 335         acm.bckCallInd.holdInd.val                      = HOLD_NOTREQD;
 336         acm.bckCallInd.isdnAccInd.pres          = PRSNT_NODEF;
 337         acm.bckCallInd.isdnAccInd.val           = ISDNACC_NONISDN;
 338         acm.bckCallInd.echoCtrlDevInd.pres      = PRSNT_NODEF;
 339         switch (ftdmchan->caller_data.bearer_capability) {
 340         /**********************************************************************/
 341         case (FTDM_BEARER_CAP_SPEECH):
 342                 acm.bckCallInd.echoCtrlDevInd.val       = 0x1;
 343                 break;
 344         /**********************************************************************/
 345         case (FTDM_BEARER_CAP_64K_UNRESTRICTED):
 346                 acm.bckCallInd.echoCtrlDevInd.val       = 0x0;
 347                 break;
 348         /**********************************************************************/
 349         case (FTDM_BEARER_CAP_3_1KHZ_AUDIO):
 350                 acm.bckCallInd.echoCtrlDevInd.val       = 0x1;
 351                 break;
 352         /**********************************************************************/
 353         default:
 354                 SS7_ERROR_CHAN(ftdmchan, "Unknown Bearer capability falling back to speech%s\n", " ");
 355                 acm.bckCallInd.echoCtrlDevInd.val       = 0x1;
 356                 break;
 357         /**********************************************************************/
 358         } /* switch (ftdmchan->caller_data.bearer_capability) */
 359         acm.bckCallInd.sccpMethInd.pres         = PRSNT_NODEF;
 360         acm.bckCallInd.sccpMethInd.val          = SCCPMTH_NOIND;
 361 
 362         /* fill in any optional parameters */
 363         if (sngss7_test_options(isup_intf, SNGSS7_ACM_OBCI_BITA)) {
 364                 SS7_DEBUG_CHAN(ftdmchan, "Found ACM_OBCI_BITA flag:0x%X\n", isup_intf->options);
 365                 acm.optBckCalInd.eh.pres                                = PRSNT_NODEF;
 366                 acm.optBckCalInd.inbndInfoInd.pres              = PRSNT_NODEF;
 367                 acm.optBckCalInd.inbndInfoInd.val               = 0x1;
 368                 acm.optBckCalInd.caFwdMayOcc.pres               = PRSNT_DEF;
 369                 acm.optBckCalInd.simpleSegmInd.pres             = PRSNT_DEF;
 370                 acm.optBckCalInd.mlppUserInd.pres               = PRSNT_DEF;
 371                 acm.optBckCalInd.usrNetIneractInd.pres  = PRSNT_DEF;
 372         } /* if (sngss7_test_options(isup_intf, SNGSS7_ACM_OBCI_BITA)) */
 373 
 374         /* send the ACM request to LibSngSS7 */
 375         sng_cc_con_status  (1,
 376                                                 sngss7_info->suInstId,
 377                                                 sngss7_info->spInstId,
 378                                                 sngss7_info->circuit->id, 
 379                                                 &acm, 
 380                                                 ADDRCMPLT);
 381         
 382         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx ACM\n", sngss7_info->circuit->cic);
 383         ftdm_call_clear_vars(&ftdmchan->caller_data);
 384         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 385         return;
 386 }
 387 
 388 /******************************************************************************/
 389 void ft_to_sngss7_anm (ftdm_channel_t * ftdmchan)
 390 {
 391         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 392         
 393         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 394         SiConEvnt anm;
 395         
 396         memset (&anm, 0x0, sizeof (anm));
 397         
 398         /* send the ANM request to LibSngSS7 */
 399         sng_cc_con_response(1,
 400                                                 sngss7_info->suInstId,
 401                                                 sngss7_info->spInstId,
 402                                                 sngss7_info->circuit->id, 
 403                                                 &anm, 
 404                                                 5);
 405 
 406   SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx ANM\n", sngss7_info->circuit->cic);
 407   ftdm_call_clear_vars(&ftdmchan->caller_data);
 408   SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 409   return;
 410 }
 411 
 412 /******************************************************************************/
 413 void ft_to_sngss7_rel (ftdm_channel_t * ftdmchan)
 414 {
 415         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 416         
 417         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 418         SiRelEvnt rel;
 419         
 420         memset (&rel, 0x0, sizeof (rel));
 421         
 422         rel.causeDgn.eh.pres = PRSNT_NODEF;
 423         rel.causeDgn.location.pres = PRSNT_NODEF;
 424         rel.causeDgn.location.val = 0x01;
 425         rel.causeDgn.cdeStand.pres = PRSNT_NODEF;
 426         rel.causeDgn.cdeStand.val = 0x00;
 427         rel.causeDgn.recommend.pres = NOTPRSNT;
 428         rel.causeDgn.causeVal.pres = PRSNT_NODEF;
 429         rel.causeDgn.causeVal.val = (uint8_t) ftdmchan->caller_data.hangup_cause;
 430         rel.causeDgn.dgnVal.pres = NOTPRSNT;
 431         
 432         /* send the REL request to LibSngSS7 */
 433         sng_cc_rel_request (1,
 434                                                 sngss7_info->suInstId,
 435                                                 sngss7_info->spInstId, 
 436                                                 sngss7_info->circuit->id, 
 437                                                 &rel);
 438         
 439         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx REL cause=%d \n",
 440                                                         sngss7_info->circuit->cic,
 441                                                         ftdmchan->caller_data.hangup_cause );
 442         ftdm_call_clear_vars(&ftdmchan->caller_data);
 443         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 444         return;
 445 }
 446 
 447 /******************************************************************************/
 448 void ft_to_sngss7_rlc (ftdm_channel_t * ftdmchan)
 449 {
 450         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 451         
 452         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 453         SiRelEvnt rlc;
 454         
 455         memset (&rlc, 0x0, sizeof (rlc));
 456         
 457         /* send the RLC request to LibSngSS7 */
 458         sng_cc_rel_response (1,
 459                                                 sngss7_info->suInstId,
 460                                                 sngss7_info->spInstId, 
 461                                                 sngss7_info->circuit->id, 
 462                                                 &rlc);
 463         
 464         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx RLC\n", sngss7_info->circuit->cic);
 465         ftdm_call_clear_vars(&ftdmchan->caller_data);
 466         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 467         return;
 468 }
 469 
 470 /******************************************************************************/
 471 void ft_to_sngss7_rsc (ftdm_channel_t * ftdmchan)
 472 {
 473         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 474         
 475         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 476         
 477         sng_cc_sta_request (1,
 478                                                 sngss7_info->suInstId,
 479                                                 sngss7_info->spInstId,
 480                                                 sngss7_info->circuit->id,
 481                                                 sngss7_info->globalFlg, 
 482                                                 SIT_STA_CIRRESREQ, 
 483                                                 NULL);
 484         
 485         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx RSC\n", sngss7_info->circuit->cic);
 486         ftdm_call_clear_vars(&ftdmchan->caller_data);
 487         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 488         return;
 489 }
 490 
 491 /******************************************************************************/
 492 void ft_to_sngss7_rsca (ftdm_channel_t * ftdmchan)
 493 {
 494         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 495         
 496         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 497         
 498         sng_cc_sta_request (1,
 499                                                 sngss7_info->suInstId,
 500                                                 sngss7_info->spInstId,
 501                                                 sngss7_info->circuit->id,
 502                                                 sngss7_info->globalFlg, 
 503                                                 SIT_STA_CIRRESRSP, 
 504                                                 NULL);
 505         
 506         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx RSC-RLC\n", sngss7_info->circuit->cic);
 507         ftdm_call_clear_vars(&ftdmchan->caller_data);
 508         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 509   return;
 510 }
 511 
 512 /******************************************************************************/
 513 void ft_to_sngss7_blo (ftdm_channel_t * ftdmchan)
 514 {
 515         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 516         
 517         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 518         
 519         sng_cc_sta_request (1,
 520                                                 0,
 521                                                 0,
 522                                                 sngss7_info->circuit->id,
 523                                                 sngss7_info->globalFlg, 
 524                                                 SIT_STA_CIRBLOREQ, 
 525                                                 NULL);
 526         
 527         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx BLO\n", sngss7_info->circuit->cic);
 528         ftdm_call_clear_vars(&ftdmchan->caller_data);
 529         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 530         return;
 531 }
 532 
 533 /******************************************************************************/
 534 void ft_to_sngss7_bla (ftdm_channel_t * ftdmchan)
 535 {
 536         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 537         
 538         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 539         
 540         sng_cc_sta_request (1,
 541                                                 0,
 542                                                 0,
 543                                                 sngss7_info->circuit->id,
 544                                                 sngss7_info->globalFlg, 
 545                                                 SIT_STA_CIRBLORSP, 
 546                                                 NULL);
 547         
 548         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx BLA\n", sngss7_info->circuit->cic);
 549         ftdm_call_clear_vars(&ftdmchan->caller_data);
 550         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 551         return;
 552 }
 553 
 554 /******************************************************************************/
 555 void
 556 ft_to_sngss7_ubl (ftdm_channel_t * ftdmchan)
 557 {
 558         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 559         
 560         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 561         
 562         sng_cc_sta_request (1,
 563                                                 0,
 564                                                 0,
 565                                                 sngss7_info->circuit->id,
 566                                                 sngss7_info->globalFlg, 
 567                                                 SIT_STA_CIRUBLREQ, 
 568                                                 NULL);
 569         
 570         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx UBL\n", sngss7_info->circuit->cic);
 571         ftdm_call_clear_vars(&ftdmchan->caller_data);
 572         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 573         return;
 574 }
 575 
 576 /******************************************************************************/
 577 void ft_to_sngss7_uba (ftdm_channel_t * ftdmchan)
 578 {
 579         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 580         
 581         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 582         
 583         sng_cc_sta_request (1,
 584                                                 0,
 585                                                 0,
 586                                                 sngss7_info->circuit->id,
 587                                                 sngss7_info->globalFlg, 
 588                                                 SIT_STA_CIRUBLRSP, 
 589                                                 NULL);
 590         
 591         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx UBA\n", sngss7_info->circuit->cic);
 592         ftdm_call_clear_vars(&ftdmchan->caller_data);
 593         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 594         return;
 595 }
 596 
 597 /******************************************************************************/
 598 void ft_to_sngss7_lpa (ftdm_channel_t * ftdmchan)
 599 {
 600         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 601         
 602         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 603         
 604         sng_cc_sta_request (1,
 605                                                 sngss7_info->suInstId,
 606                                                 sngss7_info->spInstId,
 607                                                 sngss7_info->circuit->id,
 608                                                 sngss7_info->globalFlg, 
 609                                                 SIT_STA_LOOPBACKACK, 
 610                                                 NULL);
 611         
 612         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx LPA\n", sngss7_info->circuit->cic);
 613         ftdm_call_clear_vars(&ftdmchan->caller_data);
 614         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 615 return;
 616 }
 617 
 618 /******************************************************************************/
 619 void ft_to_sngss7_gra (ftdm_channel_t * ftdmchan)
 620 {
 621         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 622         
 623         sngss7_span_data_t *sngss7_span = ftdmchan->span->signal_data;
 624         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 625         SiStaEvnt       gra;
 626         
 627         /* clean out the gra struct */
 628         memset (&gra, 0x0, sizeof (gra));
 629 
 630         gra.rangStat.eh.pres = PRSNT_NODEF;
 631 
 632         /* fill in the range */ 
 633         gra.rangStat.range.pres = PRSNT_NODEF;
 634         gra.rangStat.range.val = sngss7_span->rx_grs.range;
 635 
 636         /* fill in the status */
 637         gra.rangStat.status.pres = PRSNT_NODEF;
 638         gra.rangStat.status.len = ((sngss7_span->rx_grs.range + 1) >> 3) + (((sngss7_span->rx_grs.range + 1) & 0x07) ? 1 : 0); 
 639         
 640         /* the status field should be 1 if blocked for maintenace reasons 
 641         * and 0 is not blocked....since we memset the struct nothing to do
 642         */
 643         
 644         /* send the GRA to LibSng-SS7 */
 645         sng_cc_sta_request (1,
 646                                                 0,
 647                                                 0,
 648                                                 sngss7_span->rx_grs.circuit,
 649                                                 0,
 650                                                 SIT_STA_GRSRSP,
 651                                                 &gra);
 652         
 653         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx GRA (%d:%d)\n",
 654                                                         sngss7_info->circuit->cic,
 655                                                         sngss7_info->circuit->cic,
 656                                                         (sngss7_info->circuit->cic + sngss7_span->rx_grs.range));
 657         
 658         ftdm_call_clear_vars(&ftdmchan->caller_data);
 659         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 660         return;
 661 }
 662 
 663 /******************************************************************************/
 664 void ft_to_sngss7_grs (ftdm_channel_t * ftdmchan)
 665 {
 666         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 667         
 668         sngss7_span_data_t      *sngss7_span = ftdmchan->span->signal_data;
 669         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 670         
 671         SiStaEvnt grs;
 672         
 673         memset (&grs, 0x0, sizeof(grs));
 674         
 675         grs.rangStat.eh.pres    = PRSNT_NODEF;
 676         grs.rangStat.range.pres = PRSNT_NODEF;
 677         grs.rangStat.range.val  = sngss7_span->tx_grs.range;
 678         
 679         sng_cc_sta_request (1,
 680                                                 0,
 681                                                 0,
 682                                                 sngss7_span->tx_grs.circuit,
 683                                                 0,
 684                                                 SIT_STA_GRSREQ,
 685                                                 &grs);
 686         
 687         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx GRS (%d:%d)\n",
 688                                                         sngss7_info->circuit->cic,
 689                                                         sngss7_info->circuit->cic,
 690                                                         (sngss7_info->circuit->cic + sngss7_span->tx_grs.range));
 691 
 692         ftdm_call_clear_vars(&ftdmchan->caller_data);
 693         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 694 return;
 695 }
 696 
 697 /******************************************************************************/
 698 void ft_to_sngss7_cgba(ftdm_channel_t * ftdmchan)
 699 {       
 700         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 701         
 702         sngss7_span_data_t      *sngss7_span = ftdmchan->span->signal_data;
 703         sngss7_chan_data_t      *sngss7_info = ftdmchan->call_data;
 704         int                                     x = 0;
 705         
 706         SiStaEvnt cgba;
 707 
 708         memset (&cgba, 0x0, sizeof(cgba));
 709 
 710         /* fill in the circuit group supervisory message */
 711         cgba.cgsmti.eh.pres = PRSNT_NODEF;
 712         cgba.cgsmti.typeInd.pres = PRSNT_NODEF;
 713         cgba.cgsmti.typeInd.val = sngss7_span->rx_cgb.type;
 714 
 715         cgba.rangStat.eh.pres = PRSNT_NODEF;
 716         /* fill in the range */ 
 717         cgba.rangStat.range.pres = PRSNT_NODEF;
 718         cgba.rangStat.range.val = sngss7_span->rx_cgb.range;
 719         /* fill in the status */
 720         cgba.rangStat.status.pres = PRSNT_NODEF;
 721         cgba.rangStat.status.len = ((sngss7_span->rx_cgb.range + 1) >> 3) + (((sngss7_span->rx_cgb.range + 1) & 0x07) ? 1 : 0);
 722         for(x = 0; x < cgba.rangStat.status.len; x++){
 723                 cgba.rangStat.status.val[x] = sngss7_span->rx_cgb.status[x];
 724         }
 725 
 726         sng_cc_sta_request (1,
 727                                                 0,
 728                                                 0,
 729                                                 sngss7_span->rx_cgb.circuit,
 730                                                 0,
 731                                                 SIT_STA_CGBRSP,
 732                                                 &cgba);
 733         
 734         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx CGBA (%d:%d)\n",
 735                                                         sngss7_info->circuit->cic,
 736                                                         sngss7_info->circuit->cic,
 737                                                         (sngss7_info->circuit->cic + sngss7_span->rx_cgb.range));
 738 
 739         /* clean out the saved data */
 740         memset(&sngss7_span->rx_cgb, 0x0, sizeof(sngss7_group_data_t));
 741         ftdm_call_clear_vars(&ftdmchan->caller_data);
 742         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 743         return;
 744 }
 745 
 746 /******************************************************************************/
 747 void ft_to_sngss7_cgua(ftdm_channel_t * ftdmchan)
 748 {       
 749         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 750         
 751         sngss7_span_data_t      *sngss7_span = ftdmchan->span->signal_data;
 752         sngss7_chan_data_t      *sngss7_info = ftdmchan->call_data;
 753         int                                     x = 0;
 754         
 755         SiStaEvnt cgua;
 756 
 757         memset (&cgua, 0x0, sizeof(cgua));
 758 
 759         /* fill in the circuit group supervisory message */
 760         cgua.cgsmti.eh.pres = PRSNT_NODEF;
 761         cgua.cgsmti.typeInd.pres = PRSNT_NODEF;
 762         cgua.cgsmti.typeInd.val = sngss7_span->rx_cgu.type;
 763 
 764         cgua.rangStat.eh.pres = PRSNT_NODEF;
 765         /* fill in the range */ 
 766         cgua.rangStat.range.pres = PRSNT_NODEF;
 767         cgua.rangStat.range.val = sngss7_span->rx_cgu.range;
 768         /* fill in the status */
 769         cgua.rangStat.status.pres = PRSNT_NODEF;
 770         cgua.rangStat.status.len = ((sngss7_span->rx_cgu.range + 1) >> 3) + (((sngss7_span->rx_cgu.range + 1) & 0x07) ? 1 : 0);
 771         for(x = 0; x < cgua.rangStat.status.len; x++){
 772                 cgua.rangStat.status.val[x] = sngss7_span->rx_cgu.status[x];
 773         }
 774 
 775         sng_cc_sta_request (1,
 776                                                 0,
 777                                                 0,
 778                                                 sngss7_span->rx_cgu.circuit,
 779                                                 0,
 780                                                 SIT_STA_CGURSP,
 781                                                 &cgua);
 782         
 783         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx CGUA (%d:%d)\n",
 784                                                         sngss7_info->circuit->cic,
 785                                                         sngss7_info->circuit->cic,
 786                                                         (sngss7_info->circuit->cic + sngss7_span->rx_cgu.range));
 787 
 788         /* clean out the saved data */
 789         memset(&sngss7_span->rx_cgu, 0x0, sizeof(sngss7_group_data_t));
 790 
 791         ftdm_call_clear_vars(&ftdmchan->caller_data);
 792         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 793         return;
 794 }
 795 
 796 /******************************************************************************/
 797 void ft_to_sngss7_cgb(ftdm_channel_t * ftdmchan)
 798 {
 799         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 800 
 801         sngss7_span_data_t      *sngss7_span = ftdmchan->span->signal_data;
 802         sngss7_chan_data_t      *sngss7_info = ftdmchan->call_data;
 803         SiStaEvnt                       cgb;
 804         int                                     x = 0;
 805 
 806 
 807         memset (&cgb, 0x0, sizeof(cgb));
 808 
 809         /* fill in the circuit group supervisory message */
 810         cgb.cgsmti.eh.pres                      = PRSNT_NODEF;
 811         cgb.cgsmti.typeInd.pres         = PRSNT_NODEF;
 812         cgb.cgsmti.typeInd.val          = sngss7_span->tx_cgb.type;
 813 
 814         /* fill in the range */ 
 815         cgb.rangStat.eh.pres            = PRSNT_NODEF;
 816         cgb.rangStat.range.pres         = PRSNT_NODEF;
 817         cgb.rangStat.range.val          = sngss7_span->tx_cgb.range;
 818 
 819         /* fill in the status */
 820         cgb.rangStat.status.pres        = PRSNT_NODEF;
 821         cgb.rangStat.status.len         = ((sngss7_span->tx_cgb.range + 1) >> 3) + (((sngss7_span->tx_cgb.range + 1) & 0x07) ? 1 : 0);
 822         for(x = 0; x < cgb.rangStat.status.len; x++){
 823                 cgb.rangStat.status.val[x] = sngss7_span->tx_cgb.status[x];
 824         }
 825 
 826         sng_cc_sta_request (1,
 827                                                 0,
 828                                                 0,
 829                                                 sngss7_span->tx_cgb.circuit,
 830                                                 0,
 831                                                 SIT_STA_CGBREQ,
 832                                                 &cgb);
 833         
 834         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx CGB (%d:%d)\n",
 835                                                         sngss7_info->circuit->cic,
 836                                                         sngss7_info->circuit->cic,
 837                                                         (sngss7_info->circuit->cic + sngss7_span->tx_cgb.range));
 838 
 839         /* clean out the saved data */
 840         memset(&sngss7_span->tx_cgb, 0x0, sizeof(sngss7_group_data_t));
 841 
 842         ftdm_call_clear_vars(&ftdmchan->caller_data);
 843         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 844         return;
 845 }
 846 
 847 /******************************************************************************/
 848 void ft_to_sngss7_cgu(ftdm_channel_t * ftdmchan)
 849 {
 850         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 851 
 852         sngss7_span_data_t      *sngss7_span = ftdmchan->span->signal_data;
 853         sngss7_chan_data_t      *sngss7_info = ftdmchan->call_data;
 854         SiStaEvnt                       cgu;
 855         int                                     x = 0;
 856 
 857 
 858         memset (&cgu, 0x0, sizeof(cgu));
 859 
 860         /* fill in the circuit group supervisory message */
 861         cgu.cgsmti.eh.pres                      = PRSNT_NODEF;
 862         cgu.cgsmti.typeInd.pres         = PRSNT_NODEF;
 863         cgu.cgsmti.typeInd.val          = sngss7_span->tx_cgu.type;
 864 
 865         /* fill in the range */ 
 866         cgu.rangStat.eh.pres            = PRSNT_NODEF;
 867         cgu.rangStat.range.pres         = PRSNT_NODEF;
 868         cgu.rangStat.range.val          = sngss7_span->tx_cgu.range;
 869 
 870         /* fill in the status */
 871         cgu.rangStat.status.pres        = PRSNT_NODEF;
 872         cgu.rangStat.status.len         = ((sngss7_span->tx_cgu.range + 1) >> 3) + (((sngss7_span->tx_cgu.range + 1) & 0x07) ? 1 : 0);
 873         for(x = 0; x < cgu.rangStat.status.len; x++){
 874                 cgu.rangStat.status.val[x] = sngss7_span->tx_cgu.status[x];
 875         }
 876 
 877         sng_cc_sta_request (1,
 878                                                 0,
 879                                                 0,
 880                                                 sngss7_span->tx_cgu.circuit,
 881                                                 0,
 882                                                 SIT_STA_CGUREQ,
 883                                                 &cgu);
 884         
 885         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx CGU (%d:%d)\n",
 886                                                         sngss7_info->circuit->cic,
 887                                                         sngss7_info->circuit->cic,
 888                                                         (sngss7_info->circuit->cic + sngss7_span->tx_cgu.range));
 889 
 890         /* clean out the saved data */
 891         memset(&sngss7_span->tx_cgu, 0x0, sizeof(sngss7_group_data_t));
 892 
 893         ftdm_call_clear_vars(&ftdmchan->caller_data);
 894         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 895         return;
 896 }
 897 
 898 
 899 /******************************************************************************/
 900 /* For Emacs:
 901  * Local Variables:
 902  * mode:c
 903  * indent-tabs-mode:t
 904  * tab-width:4
 905  * c-basic-offset:4
 906  * End:
 907  * For VIM:
 908  * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
 909  */
 910 /******************************************************************************/

/* [<][>][^][v][top][bottom][index][help] */