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                      *nadi = NULL;
  78         SiConEvnt                       iam;
  79         
  80         sngss7_info->suInstId   = get_unique_id ();
  81         sngss7_info->spInstId   = 0;
  82         sngss7_info->spId               = 1;
  83         
  84         memset (&iam, 0x0, sizeof (iam));
  85         
  86         /* copy down the nature of connection indicators */
  87         iam.natConInd.eh.pres                           = PRSNT_NODEF;
  88         iam.natConInd.satInd.pres                       = PRSNT_NODEF;
  89         iam.natConInd.satInd.val                        = 0; /* no satellite circuit */
  90         iam.natConInd.contChkInd.pres           = PRSNT_NODEF;
  91         iam.natConInd.contChkInd.val            = CONTCHK_NOTREQ;
  92         iam.natConInd.echoCntrlDevInd.pres      = PRSNT_NODEF;
  93         iam.natConInd.echoCntrlDevInd.val       = ECHOCDEV_INCL;
  94         
  95         /* copy down the forward call indicators */
  96         iam.fwdCallInd.eh.pres                          = PRSNT_NODEF;
  97         iam.fwdCallInd.natIntCallInd.pres       = PRSNT_NODEF;
  98         iam.fwdCallInd.natIntCallInd.val        = 0x00;
  99         iam.fwdCallInd.end2EndMethInd.pres      = PRSNT_NODEF;
 100         iam.fwdCallInd.end2EndMethInd.val       = E2EMTH_NOMETH;
 101         iam.fwdCallInd.intInd.pres                      = PRSNT_NODEF;
 102         iam.fwdCallInd.intInd.val                       = INTIND_NOINTW;
 103         iam.fwdCallInd.end2EndInfoInd.pres      = PRSNT_NODEF;
 104         iam.fwdCallInd.end2EndInfoInd.val       = E2EINF_NOINFO;
 105         iam.fwdCallInd.isdnUsrPrtInd.pres       = PRSNT_NODEF;
 106         iam.fwdCallInd.isdnUsrPrtInd.val        = ISUP_USED;
 107         iam.fwdCallInd.isdnUsrPrtPrfInd.pres = PRSNT_NODEF;
 108         iam.fwdCallInd.isdnUsrPrtPrfInd.val = PREF_PREFAW;
 109         iam.fwdCallInd.isdnAccInd.pres          = PRSNT_NODEF;
 110         iam.fwdCallInd.isdnAccInd.val           = ISDNACC_ISDN;
 111         iam.fwdCallInd.sccpMethInd.pres         = PRSNT_NODEF;
 112         iam.fwdCallInd.sccpMethInd.val          = SCCPMTH_NOIND;
 113         
 114         /* copy down the calling number information */
 115         iam.cgPtyCat.eh.pres                            = PRSNT_NODEF;
 116         iam.cgPtyCat.cgPtyCat.pres                      = PRSNT_NODEF;
 117         iam.cgPtyCat.cgPtyCat.val                       = CAT_ORD;      /* ordinary suscriber */
 118         
 119         /* copy down the transmission medium requirements */
 120         iam.txMedReq.eh.pres                            = PRSNT_NODEF;
 121         iam.txMedReq.trMedReq.pres                      = PRSNT_NODEF;
 122         iam.txMedReq.trMedReq.val                       = ftdmchan->caller_data.bearer_capability;
 123 
 124         if ((g_ftdm_sngss7_data.cfg.isupIntf[sngss7_info->circuit->infId].switchType == LSI_SW_ANS88) ||
 125                 (g_ftdm_sngss7_data.cfg.isupIntf[sngss7_info->circuit->infId].switchType == LSI_SW_ANS92) ||
 126                 (g_ftdm_sngss7_data.cfg.isupIntf[sngss7_info->circuit->infId].switchType == LSI_SW_ANS95)) {
 127 
 128                 /* include only if we're running ANSI */
 129                 iam.fwdCallInd.transCallNInd.pres   = PRSNT_NODEF;
 130                 iam.fwdCallInd.transCallNInd.val    = 0x0;
 131 
 132                 iam.usrServInfoA.eh.pres                                = PRSNT_NODEF;
 133 
 134                 iam.usrServInfoA.infoTranCap.pres               = PRSNT_NODEF;
 135                 switch (ftdmchan->caller_data.bearer_capability) {
 136                 /**********************************************************************/
 137                 case (FTDM_BEARER_CAP_SPEECH):
 138                         iam.usrServInfoA.infoTranCap.val        = 0x0;                  /* speech as per ATIS-1000113.3.2005 */
 139                         break;
 140                 /**********************************************************************/
 141                 case (FTDM_BEARER_CAP_64K_UNRESTRICTED):
 142                         iam.usrServInfoA.infoTranCap.val        = 0x8;                  /* unrestricted digital as per ATIS-1000113.3.2005 */
 143                         break;
 144                 /**********************************************************************/
 145                 case (FTDM_BEARER_CAP_3_1KHZ_AUDIO):
 146                         iam.usrServInfoA.infoTranCap.val        = 0x10;                 /* 3.1kHz audio as per ATIS-1000113.3.2005 */
 147                         break;
 148                 /**********************************************************************/
 149                 default:
 150                         SS7_ERROR_CHAN(ftdmchan, "Unknown Bearer capability falling back to speech%s\n", " ");
 151                         iam.usrServInfoA.infoTranCap.val        = 0x0;                  /* speech as per ATIS-1000113.3.2005 */
 152                         break;
 153                 /**********************************************************************/
 154                 } /* switch (ftdmchan->caller_data.bearer_capability) */
 155 
 156                 iam.usrServInfoA.cdeStand.pres                  = PRSNT_NODEF;
 157                 iam.usrServInfoA.cdeStand.val                   = 0x0;                          /* ITU-T standardized coding */
 158                 iam.usrServInfoA.tranMode.pres                  = PRSNT_NODEF;
 159                 iam.usrServInfoA.tranMode.val                   = 0x0;                          /* circuit mode */
 160                 iam.usrServInfoA.infoTranRate0.pres             = PRSNT_NODEF;
 161                 iam.usrServInfoA.infoTranRate0.val              = 0x10;                         /* 64kbps origination to destination */
 162                 iam.usrServInfoA.infoTranRate1.pres             = PRSNT_NODEF;
 163                 iam.usrServInfoA.infoTranRate1.val              = 0x10;                         /* 64kbps destination to origination */
 164                 iam.usrServInfoA.chanStruct.pres                = PRSNT_NODEF;
 165                 iam.usrServInfoA.chanStruct.val                 = 0x1;                          /* 8kHz integrity */
 166                 iam.usrServInfoA.config.pres                    = PRSNT_NODEF;
 167                 iam.usrServInfoA.config.val                             = 0x0;                          /* point to point configuration */
 168                 iam.usrServInfoA.establish.pres                 = PRSNT_NODEF;
 169                 iam.usrServInfoA.establish.val                  = 0x0;                          /* on demand */
 170                 iam.usrServInfoA.symmetry.pres                  = PRSNT_NODEF;
 171                 iam.usrServInfoA.symmetry.val                   = 0x0;                          /* bi-directional symmetric */
 172                 iam.usrServInfoA.usrInfLyr1Prot.pres    = PRSNT_NODEF;
 173                 iam.usrServInfoA.usrInfLyr1Prot.val             = 0x2;                          /* G.711 ulaw */
 174                 iam.usrServInfoA.rateMultiplier.pres    = PRSNT_NODEF;
 175                 iam.usrServInfoA.rateMultiplier.val             = 0x1;                          /* 1x rate multipler */
 176         } /* if ANSI */
 177         
 178         /* copy down the called number information */
 179         copy_cdPtyNum_to_sngss7 (&ftdmchan->caller_data, &iam.cdPtyNum);
 180         
 181         /* copy down the calling number information */
 182         
 183         copy_cgPtyNum_to_sngss7 (&ftdmchan->caller_data, &iam.cgPtyNum);
 184 
 185         /* check if the user would like a custom NADI value for the calling Pty Num */
 186         nadi = ftdm_channel_get_var(ftdmchan, "ss7_nadi");
 187         if ((nadi != NULL) && (*nadi)) {
 188                 SS7_DEBUG_CHAN(ftdmchan,"Found user supplied NADI value \"%s\"\n", nadi);
 189                 iam.cgPtyNum.natAddrInd.val     = atoi(nadi);
 190         } else {
 191                 SS7_DEBUG_CHAN(ftdmchan,"No user supplied NADI value found, using \"3\" %s\n", " ");
 192                 iam.cgPtyNum.natAddrInd.val     = 0x03;
 193         }
 194 
 195         sng_cc_con_request (sngss7_info->spId,
 196                                                 sngss7_info->suInstId,
 197                                                 sngss7_info->spInstId,
 198                                                 sngss7_info->circuit->id, 
 199                                                 &iam, 
 200                                                 0);
 201 
 202         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx IAM clg = \"%s\", cld = \"%s\"\n",
 203                                                         sngss7_info->circuit->cic,
 204                                                         ftdmchan->caller_data.cid_num.digits,
 205                                                         ftdmchan->caller_data.dnis.digits);
 206         
 207         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 208         return;
 209 }
 210 
 211 /******************************************************************************/
 212 void ft_to_sngss7_acm (ftdm_channel_t * ftdmchan)
 213 {
 214         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 215         
 216         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 217         SiCnStEvnt acm;
 218         
 219         memset (&acm, 0x0, sizeof (acm));
 220         
 221         /* fill in the needed information for the ACM */
 222         acm.bckCallInd.eh.pres                          = PRSNT_NODEF;
 223         acm.bckCallInd.chrgInd.pres                     = PRSNT_NODEF;
 224         acm.bckCallInd.chrgInd.val                      = CHRG_CHRG;
 225         acm.bckCallInd.cadPtyStatInd.pres       = PRSNT_NODEF;
 226         acm.bckCallInd.cadPtyStatInd.val        = 0x01;
 227         acm.bckCallInd.cadPtyCatInd.pres        = PRSNT_NODEF;
 228         acm.bckCallInd.cadPtyCatInd.val         = CADCAT_ORDSUBS;
 229         acm.bckCallInd.end2EndMethInd.pres      = PRSNT_NODEF;
 230         acm.bckCallInd.end2EndMethInd.val       = E2EMTH_NOMETH;
 231         acm.bckCallInd.intInd.pres                      = PRSNT_NODEF;
 232         acm.bckCallInd.intInd.val                       = INTIND_NOINTW;
 233         acm.bckCallInd.end2EndInfoInd.pres      = PRSNT_NODEF;
 234         acm.bckCallInd.end2EndInfoInd.val       = E2EINF_NOINFO;
 235         acm.bckCallInd.isdnUsrPrtInd.pres       = PRSNT_NODEF;
 236         acm.bckCallInd.isdnUsrPrtInd.val        = ISUP_USED;
 237         acm.bckCallInd.holdInd.pres                     = PRSNT_NODEF;
 238         acm.bckCallInd.holdInd.val                      = HOLD_NOTREQD;
 239         acm.bckCallInd.isdnAccInd.pres          = PRSNT_NODEF;
 240         acm.bckCallInd.isdnAccInd.val           = ISDNACC_NONISDN;
 241         acm.bckCallInd.echoCtrlDevInd.pres      = PRSNT_NODEF;
 242         acm.bckCallInd.echoCtrlDevInd.val       = 0x1;  /* ec device present */
 243         acm.bckCallInd.sccpMethInd.pres         = PRSNT_NODEF;
 244         acm.bckCallInd.sccpMethInd.val          = SCCPMTH_NOIND;
 245         
 246         /* send the ACM request to LibSngSS7 */
 247         sng_cc_con_status  (1,
 248                                                 sngss7_info->suInstId,
 249                                                 sngss7_info->spInstId,
 250                                                 sngss7_info->circuit->id, 
 251                                                 &acm, 
 252                                                 ADDRCMPLT);
 253         
 254         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx ACM\n", sngss7_info->circuit->cic);
 255         
 256         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 257         return;
 258 }
 259 
 260 /******************************************************************************/
 261 void ft_to_sngss7_anm (ftdm_channel_t * ftdmchan)
 262 {
 263         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 264         
 265         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 266         SiConEvnt anm;
 267         
 268         memset (&anm, 0x0, sizeof (anm));
 269         
 270         /* send the ANM request to LibSngSS7 */
 271         sng_cc_con_response(1,
 272                                                 sngss7_info->suInstId,
 273                                                 sngss7_info->spInstId,
 274                                                 sngss7_info->circuit->id, 
 275                                                 &anm, 
 276                                                 5);
 277 
 278   SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx ANM\n", sngss7_info->circuit->cic);
 279 
 280   SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 281   return;
 282 }
 283 
 284 /******************************************************************************/
 285 void ft_to_sngss7_rel (ftdm_channel_t * ftdmchan)
 286 {
 287         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 288         
 289         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 290         SiRelEvnt rel;
 291         
 292         memset (&rel, 0x0, sizeof (rel));
 293         
 294         rel.causeDgn.eh.pres = PRSNT_NODEF;
 295         rel.causeDgn.location.pres = PRSNT_NODEF;
 296         rel.causeDgn.location.val = 0x01;
 297         rel.causeDgn.cdeStand.pres = PRSNT_NODEF;
 298         rel.causeDgn.cdeStand.val = 0x00;
 299         rel.causeDgn.recommend.pres = NOTPRSNT;
 300         rel.causeDgn.causeVal.pres = PRSNT_NODEF;
 301         rel.causeDgn.causeVal.val = (uint8_t) ftdmchan->caller_data.hangup_cause;
 302         rel.causeDgn.dgnVal.pres = NOTPRSNT;
 303         
 304         /* send the REL request to LibSngSS7 */
 305         sng_cc_rel_request (1,
 306                                                 sngss7_info->suInstId,
 307                                                 sngss7_info->spInstId, 
 308                                                 sngss7_info->circuit->id, 
 309                                                 &rel);
 310         
 311         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx REL cause=%d \n",
 312                                                         sngss7_info->circuit->cic,
 313                                                         ftdmchan->caller_data.hangup_cause );
 314         
 315         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 316         return;
 317 }
 318 
 319 /******************************************************************************/
 320 void ft_to_sngss7_rlc (ftdm_channel_t * ftdmchan)
 321 {
 322         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 323         
 324         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 325         SiRelEvnt rlc;
 326         
 327         memset (&rlc, 0x0, sizeof (rlc));
 328         
 329         /* send the RLC request to LibSngSS7 */
 330         sng_cc_rel_response (1,
 331                                                 sngss7_info->suInstId,
 332                                                 sngss7_info->spInstId, 
 333                                                 sngss7_info->circuit->id, 
 334                                                 &rlc);
 335         
 336         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx RLC\n", sngss7_info->circuit->cic);
 337         
 338         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 339         return;
 340 }
 341 
 342 /******************************************************************************/
 343 void ft_to_sngss7_rsc (ftdm_channel_t * ftdmchan)
 344 {
 345         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 346         
 347         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 348         
 349         sng_cc_sta_request (1,
 350                                                 sngss7_info->suInstId,
 351                                                 sngss7_info->spInstId,
 352                                                 sngss7_info->circuit->id,
 353                                                 sngss7_info->globalFlg, 
 354                                                 SIT_STA_CIRRESREQ, 
 355                                                 NULL);
 356         
 357         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx RSC\n", sngss7_info->circuit->cic);
 358         
 359         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 360         return;
 361 }
 362 
 363 /******************************************************************************/
 364 void ft_to_sngss7_rsca (ftdm_channel_t * ftdmchan)
 365 {
 366         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 367         
 368         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 369         
 370         sng_cc_sta_request (1,
 371                                                 sngss7_info->suInstId,
 372                                                 sngss7_info->spInstId,
 373                                                 sngss7_info->circuit->id,
 374                                                 sngss7_info->globalFlg, 
 375                                                 SIT_STA_CIRRESRSP, 
 376                                                 NULL);
 377         
 378         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx RSC-RLC\n", sngss7_info->circuit->cic);
 379         
 380         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 381   return;
 382 }
 383 
 384 /******************************************************************************/
 385 void ft_to_sngss7_blo (ftdm_channel_t * ftdmchan)
 386 {
 387         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 388         
 389         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 390         
 391         sng_cc_sta_request (1,
 392                                                 0,
 393                                                 0,
 394                                                 sngss7_info->circuit->id,
 395                                                 sngss7_info->globalFlg, 
 396                                                 SIT_STA_CIRBLOREQ, 
 397                                                 NULL);
 398         
 399         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx BLO\n", sngss7_info->circuit->cic);
 400         
 401         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 402         return;
 403 }
 404 
 405 /******************************************************************************/
 406 void ft_to_sngss7_bla (ftdm_channel_t * ftdmchan)
 407 {
 408         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 409         
 410         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 411         
 412         sng_cc_sta_request (1,
 413                                                 0,
 414                                                 0,
 415                                                 sngss7_info->circuit->id,
 416                                                 sngss7_info->globalFlg, 
 417                                                 SIT_STA_CIRBLORSP, 
 418                                                 NULL);
 419         
 420         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx BLA\n", sngss7_info->circuit->cic);
 421         
 422         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 423         return;
 424 }
 425 
 426 /******************************************************************************/
 427 void
 428 ft_to_sngss7_ubl (ftdm_channel_t * ftdmchan)
 429 {
 430         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 431         
 432         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 433         
 434         sng_cc_sta_request (1,
 435                                                 0,
 436                                                 0,
 437                                                 sngss7_info->circuit->id,
 438                                                 sngss7_info->globalFlg, 
 439                                                 SIT_STA_CIRUBLREQ, 
 440                                                 NULL);
 441         
 442         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx UBL\n", sngss7_info->circuit->cic);
 443         
 444         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 445         return;
 446 }
 447 
 448 /******************************************************************************/
 449 void ft_to_sngss7_uba (ftdm_channel_t * ftdmchan)
 450 {
 451         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 452         
 453         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 454         
 455         sng_cc_sta_request (1,
 456                                                 0,
 457                                                 0,
 458                                                 sngss7_info->circuit->id,
 459                                                 sngss7_info->globalFlg, 
 460                                                 SIT_STA_CIRUBLRSP, 
 461                                                 NULL);
 462         
 463         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx UBA\n", sngss7_info->circuit->cic);
 464         
 465         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 466         return;
 467 }
 468 
 469 /******************************************************************************/
 470 void ft_to_sngss7_lpa (ftdm_channel_t * ftdmchan)
 471 {
 472         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 473         
 474         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 475         
 476         sng_cc_sta_request (1,
 477                                                 sngss7_info->suInstId,
 478                                                 sngss7_info->spInstId,
 479                                                 sngss7_info->circuit->id,
 480                                                 sngss7_info->globalFlg, 
 481                                                 SIT_STA_LOOPBACKACK, 
 482                                                 NULL);
 483         
 484         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx LPA\n", sngss7_info->circuit->cic);
 485         
 486         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 487 return;
 488 }
 489 
 490 /******************************************************************************/
 491 void ft_to_sngss7_gra (ftdm_channel_t * ftdmchan)
 492 {
 493         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 494         
 495         sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
 496         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 497         SiStaEvnt       gra;
 498         
 499         /* clean out the gra struct */
 500         memset (&gra, 0x0, sizeof (gra));
 501 
 502         gra.rangStat.eh.pres = PRSNT_NODEF;
 503 
 504         /* fill in the range */ 
 505         gra.rangStat.range.pres = PRSNT_NODEF;
 506         gra.rangStat.range.val = sngss7_span->rx_grs.range;
 507 
 508         /* fill in the status */
 509         gra.rangStat.status.pres = PRSNT_NODEF;
 510         gra.rangStat.status.len = ((sngss7_span->rx_grs.range + 1) >> 3) + (((sngss7_span->rx_grs.range + 1) & 0x07) ? 1 : 0); 
 511         
 512         /* the status field should be 1 if blocked for maintenace reasons 
 513         * and 0 is not blocked....since we memset the struct nothing to do
 514         */
 515         
 516         /* send the GRA to LibSng-SS7 */
 517         sng_cc_sta_request (1,
 518                                                 0,
 519                                                 0,
 520                                                 sngss7_span->rx_grs.circuit,
 521                                                 0,
 522                                                 SIT_STA_GRSRSP,
 523                                                 &gra);
 524         
 525         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx GRA (%d:%d)\n",
 526                                                         sngss7_info->circuit->cic,
 527                                                         sngss7_info->circuit->cic,
 528                                                         (sngss7_info->circuit->cic + sngss7_span->rx_grs.range));
 529         
 530         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 531         return;
 532 }
 533 
 534 /******************************************************************************/
 535 void ft_to_sngss7_grs (ftdm_channel_t * ftdmchan)
 536 {
 537         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 538         
 539         sngss7_span_data_t      *sngss7_span = ftdmchan->span->mod_data;
 540         sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
 541         
 542         SiStaEvnt grs;
 543         
 544         memset (&grs, 0x0, sizeof(grs));
 545         
 546         grs.rangStat.eh.pres    = PRSNT_NODEF;
 547         grs.rangStat.range.pres = PRSNT_NODEF;
 548         grs.rangStat.range.val  = sngss7_span->tx_grs.range;
 549         
 550         sng_cc_sta_request (1,
 551                                                 0,
 552                                                 0,
 553                                                 sngss7_span->tx_grs.circuit,
 554                                                 0,
 555                                                 SIT_STA_GRSREQ,
 556                                                 &grs);
 557         
 558         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx GRS (%d:%d)\n",
 559                                                         sngss7_info->circuit->cic,
 560                                                         sngss7_info->circuit->cic,
 561                                                         (sngss7_info->circuit->cic + sngss7_span->tx_grs.range));
 562         
 563         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 564 return;
 565 }
 566 
 567 /******************************************************************************/
 568 void ft_to_sngss7_cgba(ftdm_channel_t * ftdmchan)
 569 {       
 570         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 571         
 572         sngss7_span_data_t      *sngss7_span = ftdmchan->span->mod_data;
 573         sngss7_chan_data_t      *sngss7_info = ftdmchan->call_data;
 574         int                                     x = 0;
 575         
 576         SiStaEvnt cgba;
 577 
 578         memset (&cgba, 0x0, sizeof(cgba));
 579 
 580         /* fill in the circuit group supervisory message */
 581         cgba.cgsmti.eh.pres = PRSNT_NODEF;
 582         cgba.cgsmti.typeInd.pres = PRSNT_NODEF;
 583         cgba.cgsmti.typeInd.val = sngss7_span->rx_cgb.type;
 584 
 585         cgba.rangStat.eh.pres = PRSNT_NODEF;
 586         /* fill in the range */ 
 587         cgba.rangStat.range.pres = PRSNT_NODEF;
 588         cgba.rangStat.range.val = sngss7_span->rx_cgb.range;
 589         /* fill in the status */
 590         cgba.rangStat.status.pres = PRSNT_NODEF;
 591         cgba.rangStat.status.len = ((sngss7_span->rx_cgb.range + 1) >> 3) + (((sngss7_span->rx_cgb.range + 1) & 0x07) ? 1 : 0);
 592         for(x = 0; x < cgba.rangStat.status.len; x++){
 593                 cgba.rangStat.status.val[x] = sngss7_span->rx_cgb.status[x];
 594         }
 595 
 596         sng_cc_sta_request (1,
 597                                                 0,
 598                                                 0,
 599                                                 sngss7_span->rx_cgb.circuit,
 600                                                 0,
 601                                                 SIT_STA_CGBRSP,
 602                                                 &cgba);
 603         
 604         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx CGBA (%d:%d)\n",
 605                                                         sngss7_info->circuit->cic,
 606                                                         sngss7_info->circuit->cic,
 607                                                         (sngss7_info->circuit->cic + sngss7_span->rx_cgb.range));
 608 
 609         /* clean out the saved data */
 610         memset(&sngss7_span->rx_cgb, 0x0, sizeof(sngss7_group_data_t));
 611 
 612         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 613         return;
 614 }
 615 
 616 /******************************************************************************/
 617 void ft_to_sngss7_cgua(ftdm_channel_t * ftdmchan)
 618 {       
 619         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 620         
 621         sngss7_span_data_t      *sngss7_span = ftdmchan->span->mod_data;
 622         sngss7_chan_data_t      *sngss7_info = ftdmchan->call_data;
 623         int                                     x = 0;
 624         
 625         SiStaEvnt cgua;
 626 
 627         memset (&cgua, 0x0, sizeof(cgua));
 628 
 629         /* fill in the circuit group supervisory message */
 630         cgua.cgsmti.eh.pres = PRSNT_NODEF;
 631         cgua.cgsmti.typeInd.pres = PRSNT_NODEF;
 632         cgua.cgsmti.typeInd.val = sngss7_span->rx_cgu.type;
 633 
 634         cgua.rangStat.eh.pres = PRSNT_NODEF;
 635         /* fill in the range */ 
 636         cgua.rangStat.range.pres = PRSNT_NODEF;
 637         cgua.rangStat.range.val = sngss7_span->rx_cgu.range;
 638         /* fill in the status */
 639         cgua.rangStat.status.pres = PRSNT_NODEF;
 640         cgua.rangStat.status.len = ((sngss7_span->rx_cgu.range + 1) >> 3) + (((sngss7_span->rx_cgu.range + 1) & 0x07) ? 1 : 0);
 641         for(x = 0; x < cgua.rangStat.status.len; x++){
 642                 cgua.rangStat.status.val[x] = sngss7_span->rx_cgu.status[x];
 643         }
 644 
 645         sng_cc_sta_request (1,
 646                                                 0,
 647                                                 0,
 648                                                 sngss7_span->rx_cgu.circuit,
 649                                                 0,
 650                                                 SIT_STA_CGURSP,
 651                                                 &cgua);
 652         
 653         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx CGUA (%d:%d)\n",
 654                                                         sngss7_info->circuit->cic,
 655                                                         sngss7_info->circuit->cic,
 656                                                         (sngss7_info->circuit->cic + sngss7_span->rx_cgu.range));
 657 
 658         /* clean out the saved data */
 659         memset(&sngss7_span->rx_cgu, 0x0, sizeof(sngss7_group_data_t));
 660 
 661         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 662         return;
 663 }
 664 
 665 /******************************************************************************/
 666 void ft_to_sngss7_cgb(ftdm_channel_t * ftdmchan)
 667 {
 668         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 669 
 670         sngss7_span_data_t      *sngss7_span = ftdmchan->span->mod_data;
 671         sngss7_chan_data_t      *sngss7_info = ftdmchan->call_data;
 672         SiStaEvnt                       cgb;
 673         int                                     x = 0;
 674 
 675 
 676         memset (&cgb, 0x0, sizeof(cgb));
 677 
 678         /* fill in the circuit group supervisory message */
 679         cgb.cgsmti.eh.pres                      = PRSNT_NODEF;
 680         cgb.cgsmti.typeInd.pres         = PRSNT_NODEF;
 681         cgb.cgsmti.typeInd.val          = sngss7_span->tx_cgb.type;
 682 
 683         /* fill in the range */ 
 684         cgb.rangStat.eh.pres            = PRSNT_NODEF;
 685         cgb.rangStat.range.pres         = PRSNT_NODEF;
 686         cgb.rangStat.range.val          = sngss7_span->tx_cgb.range;
 687 
 688         /* fill in the status */
 689         cgb.rangStat.status.pres        = PRSNT_NODEF;
 690         cgb.rangStat.status.len         = ((sngss7_span->tx_cgb.range + 1) >> 3) + (((sngss7_span->tx_cgb.range + 1) & 0x07) ? 1 : 0);
 691         for(x = 0; x < cgb.rangStat.status.len; x++){
 692                 cgb.rangStat.status.val[x] = sngss7_span->tx_cgb.status[x];
 693         }
 694 
 695         sng_cc_sta_request (1,
 696                                                 0,
 697                                                 0,
 698                                                 sngss7_span->tx_cgb.circuit,
 699                                                 0,
 700                                                 SIT_STA_CGBREQ,
 701                                                 &cgb);
 702         
 703         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx CGB (%d:%d)\n",
 704                                                         sngss7_info->circuit->cic,
 705                                                         sngss7_info->circuit->cic,
 706                                                         (sngss7_info->circuit->cic + sngss7_span->tx_cgb.range));
 707 
 708         /* clean out the saved data */
 709         memset(&sngss7_span->tx_cgb, 0x0, sizeof(sngss7_group_data_t));
 710 
 711         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 712         return;
 713 }
 714 
 715 /******************************************************************************/
 716 void ft_to_sngss7_cgu(ftdm_channel_t * ftdmchan)
 717 {
 718         SS7_FUNC_TRACE_ENTER (__FUNCTION__);
 719 
 720         sngss7_span_data_t      *sngss7_span = ftdmchan->span->mod_data;
 721         sngss7_chan_data_t      *sngss7_info = ftdmchan->call_data;
 722         SiStaEvnt                       cgu;
 723         int                                     x = 0;
 724 
 725 
 726         memset (&cgu, 0x0, sizeof(cgu));
 727 
 728         /* fill in the circuit group supervisory message */
 729         cgu.cgsmti.eh.pres                      = PRSNT_NODEF;
 730         cgu.cgsmti.typeInd.pres         = PRSNT_NODEF;
 731         cgu.cgsmti.typeInd.val          = sngss7_span->tx_cgu.type;
 732 
 733         /* fill in the range */ 
 734         cgu.rangStat.eh.pres            = PRSNT_NODEF;
 735         cgu.rangStat.range.pres         = PRSNT_NODEF;
 736         cgu.rangStat.range.val          = sngss7_span->tx_cgu.range;
 737 
 738         /* fill in the status */
 739         cgu.rangStat.status.pres        = PRSNT_NODEF;
 740         cgu.rangStat.status.len         = ((sngss7_span->tx_cgu.range + 1) >> 3) + (((sngss7_span->tx_cgu.range + 1) & 0x07) ? 1 : 0);
 741         for(x = 0; x < cgu.rangStat.status.len; x++){
 742                 cgu.rangStat.status.val[x] = sngss7_span->tx_cgu.status[x];
 743         }
 744 
 745         sng_cc_sta_request (1,
 746                                                 0,
 747                                                 0,
 748                                                 sngss7_span->tx_cgu.circuit,
 749                                                 0,
 750                                                 SIT_STA_CGUREQ,
 751                                                 &cgu);
 752         
 753         SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx CGU (%d:%d)\n",
 754                                                         sngss7_info->circuit->cic,
 755                                                         sngss7_info->circuit->cic,
 756                                                         (sngss7_info->circuit->cic + sngss7_span->tx_cgu.range));
 757 
 758         /* clean out the saved data */
 759         memset(&sngss7_span->tx_cgu, 0x0, sizeof(sngss7_group_data_t));
 760 
 761         SS7_FUNC_TRACE_EXIT (__FUNCTION__);
 762         return;
 763 }
 764 
 765 
 766 /******************************************************************************/
 767 /* For Emacs:
 768  * Local Variables:
 769  * mode:c
 770  * indent-tabs-mode:t
 771  * tab-width:4
 772  * c-basic-offset:4
 773  * End:
 774  * For VIM:
 775  * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
 776  */
 777 /******************************************************************************/

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