VOS_UINT32 NAS_LMM_CheckModifyT3402DefaultValue( VOS_VOID) { NAS_MM_PLMN_ID_STRU *pstPresentPlmnId = NAS_EMM_NULL_PTR; pstPresentPlmnId = NAS_LMM_GetEmmInfoPresentPlmnAddr(); if ((NAS_EMM_AD_BIT_SLCT == NAS_LMM_GetEmmInfoOpLastRegPlmn()) && (NAS_LMM_MATCH_FAIL == NAS_LMM_PlmnMatch(pstPresentPlmnId, NAS_LMM_GetEmmInfoLastRegPlmnAddr()))) { if ((NAS_EMM_AD_BIT_SLCT == NAS_LMM_GetEmmInfoNetInfoOpEplmnListAddr()) && (NAS_LMM_MATCH_FAIL == NAS_LMM_PlmnIDMatchPlmnList(pstPresentPlmnId, NAS_LMM_GetEmmInfoNetInfoEplmnListAddr()))) { return VOS_TRUE; } } return VOS_FALSE; }
/***************************************************************************** Function Name : NAS_LMM_DecodeSimPsLoc Discription : 解码PS_LOC_FILE Input : pstNvCtrlTbl:公共处理结构 Output : 解码后的数据 Return : History: *****************************************************************************/ VOS_UINT32 NAS_LMM_DecodeSimPsLoc( NAS_NVIM_CTRL_TBL *pstNvCtrlTbl) { VOS_UINT8 *pucMsg; NAS_LMM_UEID_STRU *pstUeId; VOS_UINT32 usIndex = 0; VOS_UINT32 ulRslt = VOS_TRUE; VOS_UINT32 ulRslt2 = VOS_TRUE; NAS_LMM_GUTI_STRU stGuti; NAS_MM_NETWORK_ID_STRU stLrvTai; VOS_UINT8 ucUpdataSta; VOS_UINT8 *pstLastPsLoc; NAS_MM_PLMN_ID_STRU stPlmnId; NAS_LMM_NVIM_LOG_INFO("NAS_LMM_DecodeSimPsLoc is entered "); NAS_LMM_MEM_SET(&stGuti, 0, sizeof(NAS_LMM_GUTI_STRU)); NAS_LMM_MEM_SET(&stLrvTai, 0, sizeof(NAS_MM_NETWORK_ID_STRU)); pstUeId = NAS_LMM_GetEmmInfoUeidAddr(); pstLastPsLoc = NAS_LMM_GetEmmInfoLastWriteUsimPsLocAddr(); pucMsg = (VOS_UINT8*)pstNvCtrlTbl->pNvData; /* 读出卡中的码流保存到上次写卡的全局变量中*/ NAS_LMM_MEM_CPY( pstLastPsLoc, pucMsg, pstNvCtrlTbl->usNvDataLen); /*****************GUTI*********************/ /*检测文件GUTI头的有效性*/ if ( NAS_LMM_NVIM_GUTI_AND_OETOI_LEN != pucMsg[usIndex]) { NAS_LMM_NVIM_LOG_ERR("NAS_LMM_DecodeSimPsLoc: GUTI HEAD ERR"); usIndex += NAS_LMM_NVIM_GUTI_AND_OETOI_LEN; usIndex ++; pstUeId->bitOpGuti = NAS_NVIM_BIT_NO_SLCT; } else { stGuti.stGutiHead.ucLenth = NAS_LMM_NVIM_GUTI_AND_OETOI_LEN; usIndex ++; stGuti.stGutiHead.ucOeToi = pucMsg[usIndex] & NAS_EMM_LOW_HALF_BYTE_F; if (NAS_LMM_NVIM_GUTI_OETOI != stGuti.stGutiHead.ucOeToi) { NAS_LMM_NVIM_LOG_ERR("NAS_LMM_DecodeSimPsLoc: GUTI OETOI ERR"); usIndex += NAS_LMM_NVIM_GUTI_AND_OETOI_LEN; pstUeId->bitOpGuti = NAS_NVIM_BIT_NO_SLCT; } else { usIndex ++; /*检测GUTI内容的合法性*/ ulRslt = NAS_EMM_CheckSimGutiValid(pucMsg, usIndex, NAS_LMM_NVIM_GUTI_LEN); /*检测GUTI中PLMN ID的合法性 */ stPlmnId.aucPlmnId[0] = pucMsg[0 + usIndex]; stPlmnId.aucPlmnId[1] = pucMsg[1 + usIndex]; stPlmnId.aucPlmnId[2] = pucMsg[2 + usIndex]; ulRslt2 &= NAS_LMM_CheckPlmnIsInvalid(&stPlmnId); /*检测内容的有效性*/ if ((VOS_FALSE == ulRslt) || (VOS_TRUE == ulRslt2)) { NAS_LMM_NVIM_LOG_ERR("NAS_LMM_DecodeSimPsLoc: GUTI Content ERR"); usIndex = usIndex + NAS_LMM_NVIM_GUTI_LEN; pstUeId->bitOpGuti = NAS_NVIM_BIT_NO_SLCT; } else { NAS_LMM_MEM_CPY( &stGuti.stPlmnId, &stPlmnId, sizeof(NAS_MM_PLMN_ID_STRU)); usIndex += 3; stGuti.stMmeGroupId.ucGroupId = pucMsg[usIndex]; usIndex ++; stGuti.stMmeGroupId.ucGroupIdCnt = pucMsg[usIndex]; usIndex ++; stGuti.stMmeCode.ucMmeCode = pucMsg[usIndex]; usIndex ++; NAS_LMM_MEM_CPY( &(stGuti.stMTmsi), &(pucMsg[usIndex]), sizeof(NAS_LMM_MTMSI_STRU)); usIndex += sizeof(NAS_LMM_MTMSI_STRU); pstUeId->bitOpGuti = NAS_NVIM_BIT_SLCT; NAS_LMM_MEM_CPY( &(pstUeId->stGuti), &stGuti, sizeof(NAS_LMM_GUTI_STRU)); } } } /****************L.R.V TAI******************/ /* 检测LRV TAI中 PLMN合法性 */ /*检查PLMN中MCC和MNC是否有效*/ NAS_LMM_MEM_CPY( &(stLrvTai.stPlmnId), &(pucMsg[usIndex]), NAS_LMM_NVIM_PLMN_ID_LEN); usIndex += NAS_LMM_NVIM_PLMN_ID_LEN; ulRslt = NAS_LMM_CheckPlmnIsInvalid(&(stLrvTai.stPlmnId)); /*ulRslt = NAS_LMM_CheckWhetherAllBytesAreFF(pucMsg, usIndex, NAS_LMM_NVIM_PLMN_ID_LEN);*/ /*plmn无效,设置全局变量中PLMN为0XFFFFFF,TAC为0xfffe*/ if (VOS_TRUE == ulRslt) { NAS_EMM_ClearLVRTai(); usIndex = usIndex + NAS_LMM_NVIM_TAC_LEN; } else { NAS_LMM_MEM_CPY( &(stLrvTai.stTac), &(pucMsg[usIndex]), NAS_LMM_NVIM_TAC_LEN); usIndex += NAS_LMM_NVIM_TAC_LEN; if (VOS_TRUE == NAS_LMM_TacIsUnexist(&(stLrvTai.stTac))) { NAS_LMM_UndefTac(&(stLrvTai.stTac)); } NAS_EMM_SetLVRTai(&stLrvTai); } /***************UPDATE STATUS**************/ /*检测文件UPDATE STATUS项的有效性*/ ucUpdataSta = (pucMsg[usIndex])& NAS_LMM_NVIM_LOW_3_BIT_1; if ( NAS_LMM_NVIM_VALID_UPDATESTA < ucUpdataSta) { NAS_LMM_NVIM_LOG_ERR("NAS_LMM_DecodeSimPsLoc: UPDATE STATUS Content ERR"); } else { NAS_EMM_MAIN_CONTEXT_SET_AUX_UPDATE_STAE(pucMsg[usIndex]); } usIndex ++; pstNvCtrlTbl->usNvDataLen = (VOS_UINT16)(usIndex); NAS_LMM_NVIM_LOG_INFO("NAS_LMM_DecodeSimPsLoc:GUTI IS: "); NAS_COMM_PrintArray(NAS_COMM_GET_MM_PRINT_BUF(),(VOS_UINT8 *)&pstUeId->stGuti,20); NAS_LMM_NVIM_LOG_INFO("NAS_LMM_DecodeSimPsLoc:L.R.V TAI IS: "); NAS_COMM_PrintArray(NAS_COMM_GET_MM_PRINT_BUF(),(VOS_UINT8*)NAS_LMM_GetEmmInfoLastRegPlmnAddr(),4); NAS_COMM_PrintArray(NAS_COMM_GET_MM_PRINT_BUF(),(VOS_UINT8*)NAS_LMM_GetEmmInfoLastRegTacAddr(),4); NAS_LMM_NVIM_LOG1_INFO("NAS_LMM_DecodeSimPsLoc:UPDATE STATUS IS: ",NAS_EMM_UPDATE_STAE); return NAS_LMM_NVIM_OK; }