FreeCalypso > hg > freecalypso-sw
diff gsm-fw/ccd/critical_ext.c @ 648:970d6199f2c5
gsm-fw/ccd/*.[ch]: initial import from the LoCosto source
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Thu, 04 Sep 2014 05:48:57 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gsm-fw/ccd/critical_ext.c Thu Sep 04 05:48:57 2014 +0000 @@ -0,0 +1,177 @@ + +/* ++------------------------------------------------------------------------------ +| File: critical_ext.c ++------------------------------------------------------------------------------ +| Copyright 2002 Texas Instruments Berlin, AG +| All rights reserved. +| +| This file is confidential and a trade secret of Texas +| Instruments Berlin, AG. +| The receipt of or possession of this file does not convey +| any rights to reproduce or disclose its contents or to +| manufacture, use, or sell anything it may describe, in +| whole, or in part, without the specific written consent of +| Texas Instruments Berlin, AG. ++------------------------------------------------------------------------------ +| Purpose: Encoding and decoding functions for criticalExtensions +| +| $Identity:$ ++------------------------------------------------------------------------------ +*/ + +/* + * Standard definitions like UCHAR, ERROR etc. + */ +#include "typedefs.h" +#include "header.h" + +/* + * Prototypes of ccd (USE_DRIVER EQ undef) for prototypes only + * look at ccdapi.h + */ +#undef USE_DRIVER +#include "ccdapi.h" + +/* + * Types and functions for bit access and manipulation + */ +#include "ccd_globs.h" +#include "bitfun.h" + +/* + * Prototypes and constants in the common part of ccd + */ +#include "ccd.h" + +/* + * Declaration of coder/decoder tables + */ +#include "ccdtable.h" +#include "ccddata.h" + +#ifndef RUN_INT_RAM +/* ++------------------------------------------------------------------------+ +| PROJECT : CCD (6144) MODULE : critical_ext | +| STATE : code ROUTINE : cdc_critical_ext_decode | ++------------------------------------------------------------------------+ + + PURPOSE : Decode elements of type criticalExtensions + + An element of this type should never be encoded or decoded. + If the coder faces an IE of this type, it should report an + error report and abort. + Whenever a criticalExtensions-IE is extended from NULL or + SEQUENCE {} to another type, its CCD coding type will change + and the functions in this file will not be called for that IE + any more. + + According to 3GPP TS25.331 V3.6.0, 10.1.1.2.2: + Since messages including critical extensions are rejected by + receivers not comprehending them, these messages can be + modified completely, e.g. IEs may be inserted at any place + and IEs may be removed or redefined. + See also 3GPP TS25.921 V4.3.0, 10.4. +*/ +SHORT cdc_critical_ext_decode (const ULONG c_ref, const ULONG e_ref, T_CCD_Globs *globs) +{ +#ifdef DEBUG_CCD + #ifndef CCD_SYMBOLS + TRACE_CCD (globs, "cdc_critical_ext_decode()"); + #else + TRACE_CCD (globs, "cdc_critical_ext_decode() %s", mcomp[melem[e_ref].elemRef].name); + #endif +#endif + + globs->pstructOffs = melem[e_ref].structOffs; + + /* For optional elements we have already set the valid flag in the + * C-structure. We have done it while processing ASN1_SEQ. + */ + if ( ! cdc_isPresent(e_ref, globs) ) { + return 1; + } + + if (melem[e_ref].elemType EQ 'V' AND mvar[melem[e_ref].elemRef].bSize EQ 0) + { + ccd_recordFault (globs, + ERR_CRITICAL_EXT, + BREAK, + (USHORT) e_ref, + globs->pstruct + melem[e_ref].structOffs + ); + return 0; + } + /* + * Currently CCD tool chain does not support extensions of this type. + * This else-implementation is just an outlook. + * + else + { + U16 compRef = melem[e_ref].elemRef; + U16 elemRef = mcomp[compRef].componentRef; + (void) codec[melem[Elem].codingType][DECODE_FUN] + (compRef, elemRef, globs); + }*/ + return 1; +} +#endif /* !RUN_INT_RAM */ + +#ifndef RUN_INT_RAM +/* ++------------------------------------------------------------------------+ +| PROJECT : CCD (6144) MODULE : critical_ext | +| STATE : code ROUTINE : cdc_critical_ext_encode | ++------------------------------------------------------------------------+ + + PURPOSE : Encode elements of type criticalExtensions + + An element of this type should never be encoded or decoded. + If the coder faces an IE of this type, it should report an + error report and abort. +*/ +SHORT cdc_critical_ext_encode (const ULONG c_ref, const ULONG e_ref, T_CCD_Globs *globs) +{ + +#ifdef DEBUG_CCD + #ifndef CCD_SYMBOLS + TRACE_CCD (globs, "cdc_critical_ext_encode()"); + #else + TRACE_CCD (globs, "cdc_critical_ext_encode() %s", mcomp[melem[e_ref].elemRef].name); + #endif +#endif + + globs->pstructOffs = melem[e_ref].structOffs; + + /* For optional elements we have already set the valid flag in the + * C-structure. We have done it while processing ASN1_SEQ. + */ + if ( ! cdc_isPresent(e_ref, globs) ) { + return 1; + } + + if (melem[e_ref].elemType EQ 'V' AND mvar[melem[e_ref].elemRef].bSize EQ 0) + { + ccd_recordFault (globs, + ERR_CRITICAL_EXT, + BREAK, + (USHORT) e_ref, + globs->pstruct + melem[e_ref].structOffs + ); + return 0; + } + /* + * Currently CCD tool chain does not support extensions of this type. + * This else-implementation is just an outlook. + * + else + { + U16 compRef = melem[e_ref].elemRef; + U16 elemRef = mcomp[compRef].componentRef; + (void) codec[melem[Elem].codingType][ENCODE_FUN] + (compRef, elemRef, globs); + }*/ + return 1; +} +#endif /* !RUN_INT_RAM */