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_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
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
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_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
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 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
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 }
359 acm.bckCallInd.sccpMethInd.pres = PRSNT_NODEF;
360 acm.bckCallInd.sccpMethInd.val = SCCPMTH_NOIND;
361
362
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 }
373
374
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
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
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
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
628 memset (&gra, 0x0, sizeof (gra));
629
630 gra.rangStat.eh.pres = PRSNT_NODEF;
631
632
633 gra.rangStat.range.pres = PRSNT_NODEF;
634 gra.rangStat.range.val = sngss7_span->rx_grs.range;
635
636
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
641
642
643
644
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
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
717 cgba.rangStat.range.pres = PRSNT_NODEF;
718 cgba.rangStat.range.val = sngss7_span->rx_cgb.range;
719
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
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
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
766 cgua.rangStat.range.pres = PRSNT_NODEF;
767 cgua.rangStat.range.val = sngss7_span->rx_cgu.range;
768
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
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
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
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
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
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
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
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
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
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
901
902
903
904
905
906
907
908
909
910