FreeCalypso > hg > fc-tourmaline
comparison src/g23m-gsm/cc/cc_ffk.c @ 1:fa8dc04885d8
src/g23m-*: import from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:25:50 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:4e78acac3d88 | 1:fa8dc04885d8 |
---|---|
1 /* | |
2 +----------------------------------------------------------------------------- | |
3 | Project : GSM-PS (6147) | |
4 | Modul : CC_FFK | |
5 +----------------------------------------------------------------------------- | |
6 | Copyright 2002 Texas Instruments Berlin, AG | |
7 | All rights reserved. | |
8 | | |
9 | This file is confidential and a trade secret of Texas | |
10 | Instruments Berlin, AG | |
11 | The receipt of or possession of this file does not convey | |
12 | any rights to reproduce or disclose its contents or to | |
13 | manufacture, use, or sell anything it may describe, in | |
14 | whole, or in part, without the specific written consent of | |
15 | Texas Instruments Berlin, AG. | |
16 +----------------------------------------------------------------------------- | |
17 | Purpose : This Modul defines the functions called by the primitive | |
18 | processing functions of the SDL process FORMATTER. | |
19 +----------------------------------------------------------------------------- | |
20 */ | |
21 | |
22 #ifndef CC_FFK_C | |
23 #define CC_FFK_C | |
24 | |
25 #define ENTITY_CC | |
26 /*==== INCLUDES ===================================================*/ | |
27 | |
28 #include <string.h> | |
29 #include "typedefs.h" | |
30 #include "pcm.h" | |
31 #include "vsi.h" | |
32 #include "custom.h" | |
33 #include "gsm.h" | |
34 #include "message.h" | |
35 #include "ccdapi.h" | |
36 #include "prim.h" | |
37 #include "cnf_cc.h" | |
38 #include "mon_cc.h" | |
39 #include "pei.h" | |
40 #include "tok.h" | |
41 #include "cc.h" | |
42 | |
43 /*==== EXPORT =====================================================*/ | |
44 | |
45 /*==== PRIVAT =====================================================*/ | |
46 | |
47 /*==== VARIABLES ==================================================*/ | |
48 | |
49 /*==== FUNCTIONS ==================================================*/ | |
50 /* | |
51 +--------------------------------------------------------------------+ | |
52 | PROJECT : GSM-PS (6147) MODULE : CC_FFK | | |
53 | STATE : code ROUTINE : for_check_called_party_bcd | | |
54 +--------------------------------------------------------------------+ | |
55 | |
56 PURPOSE : Checks the content of a called party bcd information | |
57 element. | |
58 | |
59 */ | |
60 | |
61 GLOBAL BOOL for_check_called_party_bcd (UBYTE ton, UBYTE npi) | |
62 { | |
63 TRACE_FUNCTION ("for_check_called_party_bcd()"); | |
64 | |
65 /* | |
66 * Check numbering type | |
67 */ | |
68 if (ton <= M_CC_TON_DEDICATED) | |
69 { | |
70 /* | |
71 * Check numbering plan | |
72 */ | |
73 switch (npi) | |
74 { | |
75 case M_CC_NPI_UNKNOWN: | |
76 case M_CC_NPI_ISDN: | |
77 case M_CC_NPI_X121: | |
78 case M_CC_NPI_F69: | |
79 case M_CC_NPI_NATIONAL: | |
80 case M_CC_NPI_PRIVATE: | |
81 return TRUE; | |
82 default: | |
83 break; | |
84 } | |
85 } | |
86 return FALSE; | |
87 } | |
88 | |
89 /* | |
90 +--------------------------------------------------------------------+ | |
91 | PROJECT : GSM-PS (6147) MODULE : CC_FFK | | |
92 | STATE : code ROUTINE : for_check_called_party_sub | | |
93 +--------------------------------------------------------------------+ | |
94 | |
95 PURPOSE : Checks the content of a called party sub information | |
96 element. | |
97 | |
98 */ | |
99 | |
100 GLOBAL BOOL for_check_called_party_sub (T_M_CC_called_subaddr * called_subaddr) | |
101 { | |
102 TRACE_FUNCTION ("for_check_called_party_sub()"); | |
103 | |
104 switch (called_subaddr->tos) | |
105 { | |
106 case M_CC_TOS_NSAP: | |
107 case M_CC_TOS_USER: | |
108 return TRUE; | |
109 default: | |
110 return FALSE; | |
111 } | |
112 } | |
113 | |
114 /* | |
115 +--------------------------------------------------------------------+ | |
116 | PROJECT : GSM-PS (6147) MODULE : CC_FFK | | |
117 | STATE : code ROUTINE : for_check_calling_party_bcd| | |
118 +--------------------------------------------------------------------+ | |
119 | |
120 PURPOSE : Checks the content of a calling party bcd information | |
121 element. | |
122 | |
123 */ | |
124 | |
125 GLOBAL BOOL for_check_calling_party_bcd (T_M_CC_calling_num * calling_num) | |
126 { | |
127 TRACE_FUNCTION ("for_check_calling_party_bcd()"); | |
128 | |
129 /* | |
130 * Check numbering type | |
131 */ | |
132 if (calling_num->ton <= M_CC_TON_DEDICATED) | |
133 { | |
134 /* | |
135 * Check numbering plan | |
136 */ | |
137 switch (calling_num->npi) | |
138 { | |
139 case M_CC_NPI_UNKNOWN: | |
140 case M_CC_NPI_ISDN: | |
141 case M_CC_NPI_X121: | |
142 case M_CC_NPI_F69: | |
143 case M_CC_NPI_NATIONAL: | |
144 case M_CC_NPI_PRIVATE: | |
145 break; | |
146 default: | |
147 return FALSE; | |
148 } | |
149 /* | |
150 * Check Present Indicator | |
151 */ | |
152 if (calling_num->v_present AND | |
153 (calling_num->present > M_CC_PRES_NOT_AVAIL)) | |
154 return FALSE; | |
155 else | |
156 return TRUE; | |
157 } | |
158 return FALSE; | |
159 } | |
160 | |
161 /* | |
162 +--------------------------------------------------------------------+ | |
163 | PROJECT : GSM-PS (6147) MODULE : CC_FFK | | |
164 | STATE : code ROUTINE : for_check_calling_party_sub | | |
165 +--------------------------------------------------------------------+ | |
166 | |
167 PURPOSE : Checks the content of a calling party sub information | |
168 element. | |
169 | |
170 */ | |
171 | |
172 GLOBAL BOOL for_check_calling_party_sub (T_M_CC_calling_subaddr * calling_subaddr) | |
173 { | |
174 TRACE_FUNCTION ("for_check_calling_party_sub()"); | |
175 | |
176 switch (calling_subaddr->tos) | |
177 { | |
178 case M_CC_TOS_NSAP: | |
179 case M_CC_TOS_USER: | |
180 return TRUE; | |
181 default: | |
182 return FALSE; | |
183 } | |
184 } | |
185 | |
186 /* | |
187 +--------------------------------------------------------------------+ | |
188 | PROJECT : GSM-PS (6147) MODULE : CC_FFK | | |
189 | STATE : code ROUTINE : for_check_callstate | | |
190 +--------------------------------------------------------------------+ | |
191 | |
192 PURPOSE : Checks the content of a callstate information | |
193 element. | |
194 | |
195 */ | |
196 | |
197 GLOBAL void for_check_call_state (T_M_CC_call_state * call_state) | |
198 { | |
199 TRACE_FUNCTION ("for_check_call_state()"); | |
200 | |
201 if ( call_state->cs NEQ M_CC_CS_GSM_PLMN ) /* VK 04-jul-97 */ | |
202 call_state->state = M_CC_CS_10; /* VK 04-jul-97 */ | |
203 } | |
204 | |
205 /* | |
206 +--------------------------------------------------------------------+ | |
207 | PROJECT : GSM-PS (6147) MODULE : CC_FFK | | |
208 | STATE : code ROUTINE : for_check_cc_cause | | |
209 +--------------------------------------------------------------------+ | |
210 | |
211 PURPOSE : Checks the content of a cc cause information | |
212 element. | |
213 | |
214 */ | |
215 | |
216 GLOBAL BOOL for_check_cc_cause (T_M_CC_cc_cause* cc_cause) | |
217 { | |
218 TRACE_FUNCTION ("for_check_cc_cause()"); | |
219 //TISH patch for OMAPS00129223 | |
220 #if 0 | |
221 /* | |
222 * this is a (dirty) "trick" to detect that the cause IE was not present | |
223 * although mandatory (for some messages): value 0 is reserved, i.e. it is not | |
224 * expected that it will be sent by a network; CCD/the frame ensures that the | |
225 * memory contents is 0 which will be seen as value if the cause IE was not present | |
226 */ | |
227 if (cc_cause->cause EQ 0) | |
228 return FALSE; | |
229 #endif | |
230 /* | |
231 * coding standards other than GSM are not supported (which is a valid option); | |
232 * map the cause value to interworking, unspecified then, skip further checks | |
233 */ | |
234 if (cc_cause->cs NEQ M_CC_CS_GSM_PLMN ) | |
235 { | |
236 cc_cause->cause = M_CC_CAUSE_INTERWORKING; | |
237 return TRUE; | |
238 } | |
239 | |
240 /* check for reserved Location (octet 3) */ | |
241 switch (cc_cause->loc) | |
242 { | |
243 case M_CC_LOC_USER: | |
244 case M_CC_LOC_PRIV_NET_LOCAL_USER: | |
245 case M_CC_LOC_PUB_NET_LOCAL_USER: | |
246 case M_CC_LOC_TRANSIT_NET: | |
247 case M_CC_LOC_PRIV_NET_REMOTE_USER: | |
248 case M_CC_LOC_PUB_NET_REMOTE_USER: | |
249 case M_CC_LOC_INTERNATIONAL_NET: | |
250 case M_CC_LOC_BEYOND_POINT: | |
251 break; | |
252 default: | |
253 return FALSE; | |
254 } | |
255 | |
256 /* check Recommendation (octet 3a) */ | |
257 /* | |
258 * the condition below also checks the value of octet 3a (if present); | |
259 * this stems from GSM 04.08 of Ph1 were the value 1 was defined as indicating | |
260 * GSM; since Ph2 there is the requirement that octet 3a shall not be included | |
261 * for coding standard being equal to GSM; however, the design decision is | |
262 * to keep the Ph1 behaviour in order to be a "tolerant" MS and to avoid | |
263 * interworking problems with Ph1 infrastructure, especially as this case is | |
264 * not treated in GSM 09.90 | |
265 */ | |
266 if (cc_cause->v_rec AND | |
267 (cc_cause->rec NEQ 1)) | |
268 return FALSE; | |
269 else | |
270 return TRUE; | |
271 } | |
272 | |
273 /* | |
274 +--------------------------------------------------------------------+ | |
275 | PROJECT : GSM-PS (6147) MODULE : CC_FFK | | |
276 | STATE : code ROUTINE : for_check_progress_indicator| | |
277 +--------------------------------------------------------------------+ | |
278 | |
279 PURPOSE : Checks the content of a progress indicator information | |
280 element. | |
281 | |
282 */ | |
283 | |
284 GLOBAL BOOL for_check_progress_indicator (T_M_CC_progress * progress) | |
285 { | |
286 TRACE_FUNCTION ("for_check_progress_indicator()"); | |
287 | |
288 /* coding standard and progress description are not in optional octets (3 and 4) */ | |
289 if ((progress->v_cs EQ FALSE) OR | |
290 (progress->v_progress_desc EQ FALSE)) | |
291 return FALSE; | |
292 | |
293 /* | |
294 * map progress description to "Unspecific" if coding standard other than | |
295 * GSM is used; note that it is an option to not support coding standards | |
296 * other than GSM (which Condat takes) | |
297 */ | |
298 if (progress->cs NEQ M_CC_CS_GSM_PLMN) | |
299 { | |
300 progress->progress_desc = MNCC_PROG_UNSPECIFIC; | |
301 return TRUE; /* don't care about reserved values for Location anymore of other standards */ | |
302 } | |
303 | |
304 /* check for reserved Location values */ | |
305 switch (progress->loc) | |
306 { | |
307 case M_CC_LOC_USER: | |
308 case M_CC_LOC_PRIV_NET_LOCAL_USER: | |
309 case M_CC_LOC_PUB_NET_LOCAL_USER: | |
310 case M_CC_LOC_PRIV_NET_REMOTE_USER: | |
311 case M_CC_LOC_PUB_NET_REMOTE_USER: | |
312 case M_CC_LOC_BEYOND_POINT: | |
313 break; | |
314 default: | |
315 return FALSE; | |
316 } | |
317 | |
318 return TRUE; | |
319 } | |
320 | |
321 /* | |
322 +--------------------------------------------------------------------+ | |
323 | PROJECT : GSM-PS (6147) MODULE : CC_FFK | | |
324 | STATE : code ROUTINE : for_check_repeat_indicator | | |
325 +--------------------------------------------------------------------+ | |
326 | |
327 PURPOSE : Checks the content of a repeat indicator information | |
328 element. | |
329 | |
330 */ | |
331 | |
332 GLOBAL BOOL for_check_repeat_indicator (UBYTE repeat) | |
333 { | |
334 TRACE_FUNCTION ("for_check_repeat_indicator()"); | |
335 | |
336 if ((repeat EQ M_CC_REPEAT_CIRCULAR) | |
337 OR | |
338 (repeat EQ M_CC_REPEAT_SEQUENTIAL) | |
339 ) | |
340 return TRUE; | |
341 else | |
342 return FALSE; | |
343 } | |
344 | |
345 /* | |
346 +--------------------------------------------------------------------+ | |
347 | PROJECT : GSM-PS (6147) MODULE : CC_FFK | | |
348 | STATE : code ROUTINE : for_check_signal | | |
349 +--------------------------------------------------------------------+ | |
350 | |
351 PURPOSE : Checks the content of a signal information | |
352 element. | |
353 | |
354 */ | |
355 | |
356 GLOBAL BOOL for_check_signal (UBYTE signal) | |
357 { | |
358 TRACE_FUNCTION ("for_check_signal()"); | |
359 | |
360 if ((signal <= M_CC_SIGNAL_HOOK_OFF_ON) | |
361 OR | |
362 (signal EQ M_CC_SIGNAL_TONES_OFF) | |
363 OR | |
364 (signal EQ M_CC_SIGNAL_ALERT_OFF)) | |
365 return TRUE; | |
366 else | |
367 return FALSE; | |
368 } | |
369 | |
370 /* | |
371 +--------------------------------------------------------------------+ | |
372 | PROJECT : GSM-PS (6147) MODULE : CC_FFK | | |
373 | STATE : code ROUTINE : for_set_conditional_error | | |
374 +--------------------------------------------------------------------+ | |
375 | |
376 PURPOSE : Stores a detected conditional error. | |
377 | |
378 */ | |
379 | |
380 GLOBAL void for_set_conditional_error (UBYTE iei) | |
381 { | |
382 GET_INSTANCE_DATA; | |
383 TRACE_FUNCTION ("for_set_conditional_error()"); | |
384 | |
385 switch (cc_data->error) | |
386 { | |
387 case M_CC_CAUSE_INFO_ELEM_NOT_IMPLEM: | |
388 case M_CC_CAUSE_INVALID_MAND_INFO: | |
389 break; | |
390 | |
391 default: | |
392 cc_data->error = M_CC_CAUSE_COND_INFO_ELEM; | |
393 if (cc_data->error_count < MAX_ERROR_TAGS) | |
394 cc_data->error_inf [cc_data->error_count++] = iei; | |
395 break; | |
396 } | |
397 } | |
398 | |
399 /* | |
400 +--------------------------------------------------------------------+ | |
401 | PROJECT : GSM-PS (6147) MODULE : CC_FFK | | |
402 | STATE : code ROUTINE : for_set_mandatory_error | | |
403 +--------------------------------------------------------------------+ | |
404 | |
405 PURPOSE : Stores a detected mandatory error. | |
406 | |
407 */ | |
408 | |
409 GLOBAL void for_set_mandatory_error ( UBYTE iei) | |
410 { | |
411 GET_INSTANCE_DATA; | |
412 TRACE_FUNCTION ("for_set_mandatory_error()"); | |
413 | |
414 switch (cc_data->error) | |
415 { | |
416 case M_CC_CAUSE_INFO_ELEM_NOT_IMPLEM: | |
417 case M_CC_CAUSE_COND_INFO_ELEM: | |
418 cc_data->error_count = 0; | |
419 /*FALLTHROUGH*/ /*lint -fallthrough*/ | |
420 | |
421 default: | |
422 cc_data->error = M_CC_CAUSE_INVALID_MAND_INFO; | |
423 if (cc_data->error_count < MAX_ERROR_TAGS) | |
424 cc_data->error_inf [cc_data->error_count++] = iei; | |
425 break; | |
426 } | |
427 } | |
428 | |
429 /* | |
430 +--------------------------------------------------------------------+ | |
431 | PROJECT : GSM-PS (6147) MODULE : CC_FFK | | |
432 | STATE : code ROUTINE : for_set_optional_error | | |
433 +--------------------------------------------------------------------+ | |
434 | |
435 PURPOSE : Stores a detected optional error. | |
436 | |
437 */ | |
438 | |
439 GLOBAL void for_set_optional_error ( UBYTE iei) | |
440 { | |
441 GET_INSTANCE_DATA; | |
442 TRACE_FUNCTION ("for_set_optional_error()"); | |
443 | |
444 switch (cc_data->error) | |
445 { | |
446 case M_CC_CAUSE_INVALID_MAND_INFO: | |
447 break; | |
448 | |
449 case M_CC_CAUSE_COND_INFO_ELEM: | |
450 cc_data->error_count = 0; | |
451 /*FALLTHROUGH*/ /*lint -fallthrough*/ | |
452 | |
453 default: | |
454 /* | |
455 * Check whether the iei is compression required | |
456 */ | |
457 if ((iei & 0xF0) EQ 0) | |
458 for_set_mandatory_error (iei); | |
459 else | |
460 { | |
461 cc_data->error = M_CC_CAUSE_INFO_ELEM_NOT_IMPLEM; | |
462 if (cc_data->error_count < MAX_ERROR_TAGS) | |
463 cc_data->error_inf [cc_data->error_count++] = iei; | |
464 } | |
465 break; | |
466 } | |
467 } | |
468 | |
469 /* | |
470 +--------------------------------------------------------------------+ | |
471 | | STATE : code ROUTINE : cc_check_critical_error | | |
472 +--------------------------------------------------------------------+ | |
473 | |
474 PURPOSE : This function checks wheter a critical error has been | |
475 detected in the air message. Critical errors which prevent | |
476 the treatment of an air message are | |
477 - invalid Message ID | |
478 - mandatory IE missing | |
479 - IE coded as comprehension required missing | |
480 */ | |
481 | |
482 GLOBAL BOOL cc_check_critical_error (UBYTE cc_err) | |
483 { | |
484 TRACE_FUNCTION ("cc_check_critical_error ()"); | |
485 if (cc_err EQ M_CC_CAUSE_INVALID_MAND_INFO OR | |
486 cc_err EQ M_CC_CAUSE_MESSAGE_TYPE_NOT_IMPLEM OR | |
487 cc_err EQ M_CC_CAUSE_COND_INFO_ELEM OR | |
488 cc_err EQ M_CC_CAUSE_SERVICE_NOT_IMPLEM ) | |
489 return (TRUE); | |
490 else | |
491 return (FALSE); | |
492 } | |
493 | |
494 #endif |