This source file includes following definitions.
- ft_to_sngss7_iam
- ft_to_sngss7_acm
- ft_to_sngss7_anm
- ft_to_sngss7_rel
- ft_to_sngss7_rlc
- ft_to_sngss7_rsc
- ft_to_sngss7_rsca
- ft_to_sngss7_blo
- ft_to_sngss7_bla
- ft_to_sngss7_ubl
- ft_to_sngss7_uba
- ft_to_sngss7_lpa
- ft_to_sngss7_gra
- ft_to_sngss7_grs
- ft_to_sngss7_cgba
- ft_to_sngss7_cgua
- ft_to_sngss7_cgb
- ft_to_sngss7_cgu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 #include "ftmod_sangoma_ss7_main.h"
36
37
38
39
40
41
42
43
44
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
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
91 iam.natConInd.eh.pres = PRSNT_NODEF;
92 iam.natConInd.satInd.pres = PRSNT_NODEF;
93 iam.natConInd.satInd.val = 0;
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
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
119 iam.cgPtyCat.eh.pres = PRSNT_NODEF;
120 iam.cgPtyCat.cgPtyCat.pres = PRSNT_NODEF;
121 iam.cgPtyCat.cgPtyCat.val = CAT_ORD;
122
123
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
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;
143 break;
144
145 case (FTDM_BEARER_CAP_64K_UNRESTRICTED):
146 iam.usrServInfoA.infoTranCap.val = 0x8;
147 break;
148
149 case (FTDM_BEARER_CAP_3_1KHZ_AUDIO):
150 iam.usrServInfoA.infoTranCap.val = 0x10;
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;
156 break;
157
158 }
159
160 iam.usrServInfoA.cdeStand.pres = PRSNT_NODEF;
161 iam.usrServInfoA.cdeStand.val = 0x0;
162 iam.usrServInfoA.tranMode.pres = PRSNT_NODEF;
163 iam.usrServInfoA.tranMode.val = 0x0;
164 iam.usrServInfoA.infoTranRate0.pres = PRSNT_NODEF;
165 iam.usrServInfoA.infoTranRate0.val = 0x10;
166 iam.usrServInfoA.infoTranRate1.pres = PRSNT_NODEF;
167 iam.usrServInfoA.infoTranRate1.val = 0x10;
168 iam.usrServInfoA.chanStruct.pres = PRSNT_NODEF;
169 iam.usrServInfoA.chanStruct.val = 0x1;
170 iam.usrServInfoA.config.pres = PRSNT_NODEF;
171 iam.usrServInfoA.config.val = 0x0;
172 iam.usrServInfoA.establish.pres = PRSNT_NODEF;
173 iam.usrServInfoA.establish.val = 0x0;
174 iam.usrServInfoA.symmetry.pres = PRSNT_NODEF;
175 iam.usrServInfoA.symmetry.val = 0x0;
176 iam.usrServInfoA.usrInfLyr1Prot.pres = PRSNT_NODEF;
177 iam.usrServInfoA.usrInfLyr1Prot.val = 0x2;
178 iam.usrServInfoA.rateMultiplier.pres = PRSNT_NODEF;
179 iam.usrServInfoA.rateMultiplier.val = 0x1;
180 }
181
182
183 copy_cdPtyNum_to_sngss7 (&ftdmchan->caller_data, &iam.cdPtyNum);
184
185
186
187 copy_cgPtyNum_to_sngss7 (&ftdmchan->caller_data, &iam.cgPtyNum);
188
189
190 clg_nadi = ftdm_channel_get_var(ftdmchan, "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_channel_get_var(ftdmchan, "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
209 clg_subAddr = ftdm_channel_get_var(ftdmchan, "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
214 memset(subAddrIE, 0x0, sizeof(subAddrIE));
215
216
217 switch (clg_subAddr[0]) {
218 case '0':
219 encode_subAddrIE_nsap(&clg_subAddr[1], subAddrIE, SNG_CALLING);
220 break;
221 case '1':
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 }
228
229
230
231 if (subAddrIE[0] != '0') {
232
233 if (iam.accTrnspt.eh.pres == PRSNT_NODEF) {
234
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
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 }
244 }
245 }
246
247
248 cld_subAddr = ftdm_channel_get_var(ftdmchan, "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
253 memset(subAddrIE, 0x0, sizeof(subAddrIE));
254
255
256 switch (cld_subAddr[0]) {
257 case '0':
258 encode_subAddrIE_nsap(&cld_subAddr[1], subAddrIE, SNG_CALLED);
259 break;
260 case '1':
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 }
267
268
269 if (subAddrIE[0] != '0') {
270
271 if (iam.accTrnspt.eh.pres == PRSNT_NODEF) {
272
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
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 }
282 }
283 }
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 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
303 return;
304 }
305
306
307 void ft_to_sngss7_acm (ftdm_channel_t * ftdmchan)
308 {
309 SS7_FUNC_TRACE_ENTER (__FUNCTION__);
310
311 sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
312 sng_isup_inf_t *isup_intf = &g_ftdm_sngss7_data.cfg.isupIntf[sngss7_info->circuit->infId];
313 SiCnStEvnt acm;
314
315 memset (&acm, 0x0, sizeof (acm));
316
317
318 acm.bckCallInd.eh.pres = PRSNT_NODEF;
319 acm.bckCallInd.chrgInd.pres = PRSNT_NODEF;
320 acm.bckCallInd.chrgInd.val = CHRG_CHRG;
321 acm.bckCallInd.cadPtyStatInd.pres = PRSNT_NODEF;
322 acm.bckCallInd.cadPtyStatInd.val = 0x01;
323 acm.bckCallInd.cadPtyCatInd.pres = PRSNT_NODEF;
324 acm.bckCallInd.cadPtyCatInd.val = CADCAT_ORDSUBS;
325 acm.bckCallInd.end2EndMethInd.pres = PRSNT_NODEF;
326 acm.bckCallInd.end2EndMethInd.val = E2EMTH_NOMETH;
327 acm.bckCallInd.intInd.pres = PRSNT_NODEF;
328 acm.bckCallInd.intInd.val = INTIND_NOINTW;
329 acm.bckCallInd.end2EndInfoInd.pres = PRSNT_NODEF;
330 acm.bckCallInd.end2EndInfoInd.val = E2EINF_NOINFO;
331 acm.bckCallInd.isdnUsrPrtInd.pres = PRSNT_NODEF;
332 acm.bckCallInd.isdnUsrPrtInd.val = ISUP_USED;
333 acm.bckCallInd.holdInd.pres = PRSNT_NODEF;
334 acm.bckCallInd.holdInd.val = HOLD_NOTREQD;
335 acm.bckCallInd.isdnAccInd.pres = PRSNT_NODEF;
336 acm.bckCallInd.isdnAccInd.val = ISDNACC_NONISDN;
337 acm.bckCallInd.echoCtrlDevInd.pres = PRSNT_NODEF;
338 acm.bckCallInd.echoCtrlDevInd.val = 0x1;
339 acm.bckCallInd.sccpMethInd.pres = PRSNT_NODEF;
340 acm.bckCallInd.sccpMethInd.val = SCCPMTH_NOIND;
341
342
343 if (sngss7_test_options(isup_intf, SNGSS7_ACM_OBCI_BITA)) {
344 acm.optBckCalInd.eh.pres = PRSNT_NODEF;
345 acm.optBckCalInd.inbndInfoInd.pres = PRSNT_NODEF;
346 acm.optBckCalInd.inbndInfoInd.val = sngss7_test_options(isup_intf, SNGSS7_ACM_OBCI_BITA);
347 acm.optBckCalInd.caFwdMayOcc.pres = PRSNT_DEF;
348 acm.optBckCalInd.simpleSegmInd.pres = PRSNT_DEF;
349 acm.optBckCalInd.mlppUserInd.pres = PRSNT_DEF;
350 acm.optBckCalInd.usrNetIneractInd.pres = PRSNT_DEF;
351 }
352
353
354 sng_cc_con_status (1,
355 sngss7_info->suInstId,
356 sngss7_info->spInstId,
357 sngss7_info->circuit->id,
358 &acm,
359 ADDRCMPLT);
360
361 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx ACM\n", sngss7_info->circuit->cic);
362
363 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
364 return;
365 }
366
367
368 void ft_to_sngss7_anm (ftdm_channel_t * ftdmchan)
369 {
370 SS7_FUNC_TRACE_ENTER (__FUNCTION__);
371
372 sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
373 SiConEvnt anm;
374
375 memset (&anm, 0x0, sizeof (anm));
376
377
378 sng_cc_con_response(1,
379 sngss7_info->suInstId,
380 sngss7_info->spInstId,
381 sngss7_info->circuit->id,
382 &anm,
383 5);
384
385 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx ANM\n", sngss7_info->circuit->cic);
386
387 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
388 return;
389 }
390
391
392 void ft_to_sngss7_rel (ftdm_channel_t * ftdmchan)
393 {
394 SS7_FUNC_TRACE_ENTER (__FUNCTION__);
395
396 sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
397 SiRelEvnt rel;
398
399 memset (&rel, 0x0, sizeof (rel));
400
401 rel.causeDgn.eh.pres = PRSNT_NODEF;
402 rel.causeDgn.location.pres = PRSNT_NODEF;
403 rel.causeDgn.location.val = 0x01;
404 rel.causeDgn.cdeStand.pres = PRSNT_NODEF;
405 rel.causeDgn.cdeStand.val = 0x00;
406 rel.causeDgn.recommend.pres = NOTPRSNT;
407 rel.causeDgn.causeVal.pres = PRSNT_NODEF;
408 rel.causeDgn.causeVal.val = (uint8_t) ftdmchan->caller_data.hangup_cause;
409 rel.causeDgn.dgnVal.pres = NOTPRSNT;
410
411
412 sng_cc_rel_request (1,
413 sngss7_info->suInstId,
414 sngss7_info->spInstId,
415 sngss7_info->circuit->id,
416 &rel);
417
418 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx REL cause=%d \n",
419 sngss7_info->circuit->cic,
420 ftdmchan->caller_data.hangup_cause );
421
422 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
423 return;
424 }
425
426
427 void ft_to_sngss7_rlc (ftdm_channel_t * ftdmchan)
428 {
429 SS7_FUNC_TRACE_ENTER (__FUNCTION__);
430
431 sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
432 SiRelEvnt rlc;
433
434 memset (&rlc, 0x0, sizeof (rlc));
435
436
437 sng_cc_rel_response (1,
438 sngss7_info->suInstId,
439 sngss7_info->spInstId,
440 sngss7_info->circuit->id,
441 &rlc);
442
443 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx RLC\n", sngss7_info->circuit->cic);
444
445 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
446 return;
447 }
448
449
450 void ft_to_sngss7_rsc (ftdm_channel_t * ftdmchan)
451 {
452 SS7_FUNC_TRACE_ENTER (__FUNCTION__);
453
454 sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
455
456 sng_cc_sta_request (1,
457 sngss7_info->suInstId,
458 sngss7_info->spInstId,
459 sngss7_info->circuit->id,
460 sngss7_info->globalFlg,
461 SIT_STA_CIRRESREQ,
462 NULL);
463
464 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx RSC\n", sngss7_info->circuit->cic);
465
466 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
467 return;
468 }
469
470
471 void ft_to_sngss7_rsca (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_CIRRESRSP,
483 NULL);
484
485 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx RSC-RLC\n", sngss7_info->circuit->cic);
486
487 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
488 return;
489 }
490
491
492 void ft_to_sngss7_blo (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 0,
500 0,
501 sngss7_info->circuit->id,
502 sngss7_info->globalFlg,
503 SIT_STA_CIRBLOREQ,
504 NULL);
505
506 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx BLO\n", sngss7_info->circuit->cic);
507
508 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
509 return;
510 }
511
512
513 void ft_to_sngss7_bla (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_CIRBLORSP,
525 NULL);
526
527 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx BLA\n", sngss7_info->circuit->cic);
528
529 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
530 return;
531 }
532
533
534 void
535 ft_to_sngss7_ubl (ftdm_channel_t * ftdmchan)
536 {
537 SS7_FUNC_TRACE_ENTER (__FUNCTION__);
538
539 sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
540
541 sng_cc_sta_request (1,
542 0,
543 0,
544 sngss7_info->circuit->id,
545 sngss7_info->globalFlg,
546 SIT_STA_CIRUBLREQ,
547 NULL);
548
549 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx UBL\n", sngss7_info->circuit->cic);
550
551 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
552 return;
553 }
554
555
556 void ft_to_sngss7_uba (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_CIRUBLRSP,
568 NULL);
569
570 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx UBA\n", sngss7_info->circuit->cic);
571
572 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
573 return;
574 }
575
576
577 void ft_to_sngss7_lpa (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 sngss7_info->suInstId,
585 sngss7_info->spInstId,
586 sngss7_info->circuit->id,
587 sngss7_info->globalFlg,
588 SIT_STA_LOOPBACKACK,
589 NULL);
590
591 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx LPA\n", sngss7_info->circuit->cic);
592
593 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
594 return;
595 }
596
597
598 void ft_to_sngss7_gra (ftdm_channel_t * ftdmchan)
599 {
600 SS7_FUNC_TRACE_ENTER (__FUNCTION__);
601
602 sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
603 sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
604 SiStaEvnt gra;
605
606
607 memset (&gra, 0x0, sizeof (gra));
608
609 gra.rangStat.eh.pres = PRSNT_NODEF;
610
611
612 gra.rangStat.range.pres = PRSNT_NODEF;
613 gra.rangStat.range.val = sngss7_span->rx_grs.range;
614
615
616 gra.rangStat.status.pres = PRSNT_NODEF;
617 gra.rangStat.status.len = ((sngss7_span->rx_grs.range + 1) >> 3) + (((sngss7_span->rx_grs.range + 1) & 0x07) ? 1 : 0);
618
619
620
621
622
623
624 sng_cc_sta_request (1,
625 0,
626 0,
627 sngss7_span->rx_grs.circuit,
628 0,
629 SIT_STA_GRSRSP,
630 &gra);
631
632 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx GRA (%d:%d)\n",
633 sngss7_info->circuit->cic,
634 sngss7_info->circuit->cic,
635 (sngss7_info->circuit->cic + sngss7_span->rx_grs.range));
636
637 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
638 return;
639 }
640
641
642 void ft_to_sngss7_grs (ftdm_channel_t * ftdmchan)
643 {
644 SS7_FUNC_TRACE_ENTER (__FUNCTION__);
645
646 sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
647 sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
648
649 SiStaEvnt grs;
650
651 memset (&grs, 0x0, sizeof(grs));
652
653 grs.rangStat.eh.pres = PRSNT_NODEF;
654 grs.rangStat.range.pres = PRSNT_NODEF;
655 grs.rangStat.range.val = sngss7_span->tx_grs.range;
656
657 sng_cc_sta_request (1,
658 0,
659 0,
660 sngss7_span->tx_grs.circuit,
661 0,
662 SIT_STA_GRSREQ,
663 &grs);
664
665 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx GRS (%d:%d)\n",
666 sngss7_info->circuit->cic,
667 sngss7_info->circuit->cic,
668 (sngss7_info->circuit->cic + sngss7_span->tx_grs.range));
669
670 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
671 return;
672 }
673
674
675 void ft_to_sngss7_cgba(ftdm_channel_t * ftdmchan)
676 {
677 SS7_FUNC_TRACE_ENTER (__FUNCTION__);
678
679 sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
680 sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
681 int x = 0;
682
683 SiStaEvnt cgba;
684
685 memset (&cgba, 0x0, sizeof(cgba));
686
687
688 cgba.cgsmti.eh.pres = PRSNT_NODEF;
689 cgba.cgsmti.typeInd.pres = PRSNT_NODEF;
690 cgba.cgsmti.typeInd.val = sngss7_span->rx_cgb.type;
691
692 cgba.rangStat.eh.pres = PRSNT_NODEF;
693
694 cgba.rangStat.range.pres = PRSNT_NODEF;
695 cgba.rangStat.range.val = sngss7_span->rx_cgb.range;
696
697 cgba.rangStat.status.pres = PRSNT_NODEF;
698 cgba.rangStat.status.len = ((sngss7_span->rx_cgb.range + 1) >> 3) + (((sngss7_span->rx_cgb.range + 1) & 0x07) ? 1 : 0);
699 for(x = 0; x < cgba.rangStat.status.len; x++){
700 cgba.rangStat.status.val[x] = sngss7_span->rx_cgb.status[x];
701 }
702
703 sng_cc_sta_request (1,
704 0,
705 0,
706 sngss7_span->rx_cgb.circuit,
707 0,
708 SIT_STA_CGBRSP,
709 &cgba);
710
711 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx CGBA (%d:%d)\n",
712 sngss7_info->circuit->cic,
713 sngss7_info->circuit->cic,
714 (sngss7_info->circuit->cic + sngss7_span->rx_cgb.range));
715
716
717 memset(&sngss7_span->rx_cgb, 0x0, sizeof(sngss7_group_data_t));
718
719 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
720 return;
721 }
722
723
724 void ft_to_sngss7_cgua(ftdm_channel_t * ftdmchan)
725 {
726 SS7_FUNC_TRACE_ENTER (__FUNCTION__);
727
728 sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
729 sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
730 int x = 0;
731
732 SiStaEvnt cgua;
733
734 memset (&cgua, 0x0, sizeof(cgua));
735
736
737 cgua.cgsmti.eh.pres = PRSNT_NODEF;
738 cgua.cgsmti.typeInd.pres = PRSNT_NODEF;
739 cgua.cgsmti.typeInd.val = sngss7_span->rx_cgu.type;
740
741 cgua.rangStat.eh.pres = PRSNT_NODEF;
742
743 cgua.rangStat.range.pres = PRSNT_NODEF;
744 cgua.rangStat.range.val = sngss7_span->rx_cgu.range;
745
746 cgua.rangStat.status.pres = PRSNT_NODEF;
747 cgua.rangStat.status.len = ((sngss7_span->rx_cgu.range + 1) >> 3) + (((sngss7_span->rx_cgu.range + 1) & 0x07) ? 1 : 0);
748 for(x = 0; x < cgua.rangStat.status.len; x++){
749 cgua.rangStat.status.val[x] = sngss7_span->rx_cgu.status[x];
750 }
751
752 sng_cc_sta_request (1,
753 0,
754 0,
755 sngss7_span->rx_cgu.circuit,
756 0,
757 SIT_STA_CGURSP,
758 &cgua);
759
760 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx CGUA (%d:%d)\n",
761 sngss7_info->circuit->cic,
762 sngss7_info->circuit->cic,
763 (sngss7_info->circuit->cic + sngss7_span->rx_cgu.range));
764
765
766 memset(&sngss7_span->rx_cgu, 0x0, sizeof(sngss7_group_data_t));
767
768 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
769 return;
770 }
771
772
773 void ft_to_sngss7_cgb(ftdm_channel_t * ftdmchan)
774 {
775 SS7_FUNC_TRACE_ENTER (__FUNCTION__);
776
777 sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
778 sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
779 SiStaEvnt cgb;
780 int x = 0;
781
782
783 memset (&cgb, 0x0, sizeof(cgb));
784
785
786 cgb.cgsmti.eh.pres = PRSNT_NODEF;
787 cgb.cgsmti.typeInd.pres = PRSNT_NODEF;
788 cgb.cgsmti.typeInd.val = sngss7_span->tx_cgb.type;
789
790
791 cgb.rangStat.eh.pres = PRSNT_NODEF;
792 cgb.rangStat.range.pres = PRSNT_NODEF;
793 cgb.rangStat.range.val = sngss7_span->tx_cgb.range;
794
795
796 cgb.rangStat.status.pres = PRSNT_NODEF;
797 cgb.rangStat.status.len = ((sngss7_span->tx_cgb.range + 1) >> 3) + (((sngss7_span->tx_cgb.range + 1) & 0x07) ? 1 : 0);
798 for(x = 0; x < cgb.rangStat.status.len; x++){
799 cgb.rangStat.status.val[x] = sngss7_span->tx_cgb.status[x];
800 }
801
802 sng_cc_sta_request (1,
803 0,
804 0,
805 sngss7_span->tx_cgb.circuit,
806 0,
807 SIT_STA_CGBREQ,
808 &cgb);
809
810 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx CGB (%d:%d)\n",
811 sngss7_info->circuit->cic,
812 sngss7_info->circuit->cic,
813 (sngss7_info->circuit->cic + sngss7_span->tx_cgb.range));
814
815
816 memset(&sngss7_span->tx_cgb, 0x0, sizeof(sngss7_group_data_t));
817
818 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
819 return;
820 }
821
822
823 void ft_to_sngss7_cgu(ftdm_channel_t * ftdmchan)
824 {
825 SS7_FUNC_TRACE_ENTER (__FUNCTION__);
826
827 sngss7_span_data_t *sngss7_span = ftdmchan->span->mod_data;
828 sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
829 SiStaEvnt cgu;
830 int x = 0;
831
832
833 memset (&cgu, 0x0, sizeof(cgu));
834
835
836 cgu.cgsmti.eh.pres = PRSNT_NODEF;
837 cgu.cgsmti.typeInd.pres = PRSNT_NODEF;
838 cgu.cgsmti.typeInd.val = sngss7_span->tx_cgu.type;
839
840
841 cgu.rangStat.eh.pres = PRSNT_NODEF;
842 cgu.rangStat.range.pres = PRSNT_NODEF;
843 cgu.rangStat.range.val = sngss7_span->tx_cgu.range;
844
845
846 cgu.rangStat.status.pres = PRSNT_NODEF;
847 cgu.rangStat.status.len = ((sngss7_span->tx_cgu.range + 1) >> 3) + (((sngss7_span->tx_cgu.range + 1) & 0x07) ? 1 : 0);
848 for(x = 0; x < cgu.rangStat.status.len; x++){
849 cgu.rangStat.status.val[x] = sngss7_span->tx_cgu.status[x];
850 }
851
852 sng_cc_sta_request (1,
853 0,
854 0,
855 sngss7_span->tx_cgu.circuit,
856 0,
857 SIT_STA_CGUREQ,
858 &cgu);
859
860 SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx CGU (%d:%d)\n",
861 sngss7_info->circuit->cic,
862 sngss7_info->circuit->cic,
863 (sngss7_info->circuit->cic + sngss7_span->tx_cgu.range));
864
865
866 memset(&sngss7_span->tx_cgu, 0x0, sizeof(sngss7_group_data_t));
867
868 SS7_FUNC_TRACE_EXIT (__FUNCTION__);
869 return;
870 }
871
872
873
874
875
876
877
878
879
880
881
882
883
884