VOS_VOID NAS_EMM_ProcRejCauseValOther(NAS_EMM_CN_CAUSE_ENUM_UINT8 ucRejCauseVal) { if((NAS_LMM_CAUSE_SEMANTICALLY_INCORRECT_MSG == ucRejCauseVal) || (NAS_LMM_CAUSE_INVALID_MANDATORY_INF == ucRejCauseVal) || (NAS_LMM_CAUSE_MSG_NONEXIST_NOTIMPLEMENTE == ucRejCauseVal) || (NAS_LMM_CAUSE_IE_NONEXIST_NOTIMPLEMENTED == ucRejCauseVal) || (NAS_LMM_CAUSE_PROTOCOL_ERROR == ucRejCauseVal)|| (VOS_TRUE == NAS_MML_IsRoamingRejectNoRetryFlgActived(ucRejCauseVal))) { NAS_EMM_GLO_AD_GetAttAtmpCnt() = 5; } else if(NAS_LMM_CAUSE_ESM_FAILURE == ucRejCauseVal) { /* 美国AT&T定制需求,在AT&T的PLMN上收到#19时,计数需特殊处理 */ if((NAS_EMM_YES == NAS_EMM_IsDamConfitionSatisfied()) ||(NAS_EMM_YES == NAS_EMM_GetEmmInfoRej19AtmptCntFlag())) { NAS_EMM_DamAttachRej19CountProc(); } else if(NAS_LMM_ESM_CAUSE_PDN_CONNECTION_DOES_NOT_EXIST == NAS_EMM_GLO_AD_GetAttRejEsmCau()) { /*CL multimode 当EMM原因值为#19且ESM原因值为#54时attach尝试次数加1 2014-02-14*/ /* 清除之前保存的attach原因值 */ NAS_LMM_ClearEmmInfoMmcAttachReason(); NAS_EMM_GLO_AD_GetAttAtmpCnt() ++; } else { NAS_EMM_GLO_AD_GetAttAtmpCnt() = 5; } } else { NAS_EMM_GLO_AD_GetAttAtmpCnt() ++; } if (EMM_ATTACH_CAUSE_ESM_ATTACH_FOR_INIT_EMC_BERER == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知ESM紧接着EMM还要做紧急注册,ESM不需要清除动态表中的紧急PDN建立记录 */ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_EMC_ATTACHING); } else { /*向ESM发送ATTACH结果*/ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_DETACHED); } NAS_EMM_ProcRejCauOtherAbnormal(); /*向MRRC发送NAS_EMM_MRRC_REL_REQ消息*/ NAS_EMM_RelReq( NAS_LMM_NOT_BARRED); if (EMM_ATTACH_CAUSE_ESM_EMC_ATTACH == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知IMSA再尝试CS域 */ } return; }
VOS_VOID NAS_EMM_ProcRejCauseValOther(NAS_EMM_CN_CAUSE_ENUM_UINT8 ucRejCauseVal) { if((NAS_LMM_CAUSE_SEMANTICALLY_INCORRECT_MSG == ucRejCauseVal) || (NAS_LMM_CAUSE_INVALID_MANDATORY_INF == ucRejCauseVal) || (NAS_LMM_CAUSE_MSG_NONEXIST_NOTIMPLEMENTE == ucRejCauseVal) || (NAS_LMM_CAUSE_IE_NONEXIST_NOTIMPLEMENTED == ucRejCauseVal) || (NAS_LMM_CAUSE_PROTOCOL_ERROR == ucRejCauseVal)) { NAS_EMM_GLO_AD_GetAttAtmpCnt() = 5; } else if(NAS_LMM_CAUSE_ESM_FAILURE == ucRejCauseVal) { /*CL multimode 当EMM原因值为#19且ESM原因值为#54时attach尝试次数加1 2014-02-14*/ if(NAS_LMM_ESM_CAUSE_PDN_CONNECTION_DOES_NOT_EXIST == NAS_EMM_GLO_AD_GetAttRejEsmCau()) { /* 清除之前保存的attach原因值 */ NAS_LMM_ClearEmmInfoMmcAttachReason(); NAS_EMM_GLO_AD_GetAttAtmpCnt() ++; } else { NAS_EMM_GLO_AD_GetAttAtmpCnt() = 5; } } else { NAS_EMM_GLO_AD_GetAttAtmpCnt() ++; } if (EMM_ATTACH_CAUSE_ESM_ATTACH_FOR_INIT_EMC_BERER == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知ESM紧接着EMM还要做紧急注册,ESM不需要清除动态表中的紧急PDN建立记录 */ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_EMC_ATTACHING); } else { /*向ESM发送ATTACH结果*/ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_DETACHED); } NAS_EMM_ProcRejCauOtherAbnormal(); /*向MRRC发送NAS_EMM_MRRC_REL_REQ消息*/ NAS_EMM_RelReq( NAS_LMM_NOT_BARRED); if (EMM_ATTACH_CAUSE_ESM_EMC_ATTACH == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知IMSA再尝试CS域 */ } return; }
VOS_UINT32 NAS_EMM_MsRegInitSsWtCnAttCnfMsgCnAttachReject( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { NAS_EMM_CN_ATTACH_REJ_STRU *pRcvEmmMsg; LNAS_STK_UPDATE_TYPE_ENUM_UINT8 uAttachType; (VOS_VOID)ulMsgId; pRcvEmmMsg = (NAS_EMM_CN_ATTACH_REJ_STRU *) pMsgStru; /*打印进入该函数*/ NAS_EMM_ATTACH_LOG_NORM("NAS_EMM_MsRegInitSsWtCnAttCnfMsgCnAttachReject is entered"); /*检查状态是否匹配,若不匹配,退出*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_REG_INIT,EMM_SS_ATTACH_WAIT_CN_ATTACH_CNF)) { /*打印出错信息*/ NAS_EMM_ATTACH_LOG_WARN("NAS_EMM_MsRegInitSsWtCnAttCnfMsgCnAttachReject: STATE ERR!"); return NAS_LMM_MSG_DISCARD; } /*消息内容检查*/ if (NAS_EMM_PARA_INVALID == NAS_EMM_CnAttachRejMsgChk(pRcvEmmMsg)) { NAS_EMM_ATTACH_LOG_ERR("NAS_EMM_MsRegInitSsWtCnAttCnfMsgCnAttachReject: NAS_EMM_CN_ATTACH_REJ_STRU para err!"); return NAS_LMM_ERR_CODE_PARA_INVALID; } /*停止定时器T3410*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3410); /*保存ATTACH拒绝原因*/ NAS_EMM_GLO_AD_GetAttRejCau() = pRcvEmmMsg->ucCause; NAS_EMM_GLO_AD_GetAttRejEsmCau() = pRcvEmmMsg->ucEsmCause; /* xiongxianghui00253310 modify for ftmerrlog begin */ #if (FEATURE_PTM == FEATURE_ON) NAS_LMM_ErrlogInfoProc(pRcvEmmMsg->ucCause); #endif /* xiongxianghui00253310 modify for ftmerrlog end */ /* 根据当前场景考虑是否修改原因值 */ NAS_LMM_AdaptRegRejCau(&NAS_EMM_GLO_AD_GetAttRejCau()); if(pRcvEmmMsg->ucBitOpMsgCon == NAS_EMM_AD_BIT_SLCT) { /*向ESM发送消息*/ NAS_EMM_EsmSendDataInd( &(pRcvEmmMsg->stMsgCon)); } switch(NAS_EMM_GLO_GetCnAttReqType()) { case MMC_LMM_ATT_TYPE_EPS_ONLY: uAttachType = LNAS_STK_UPDATE_TYPE_EPS_ATTACH; break; case MMC_LMM_ATT_TYPE_COMBINED_EPS_IMSI: uAttachType = LNAS_STK_UPDATE_TYPE_COMBINED_ATTACH; break; default: uAttachType = LNAS_STK_UPDATE_TYPE_EPS_ATTACH; break; } /*在ATTACH过程中出现rej,将rej事件报告给STK*/ NAS_EMM_SendRejEventToSTK(NAS_EMM_GLO_AD_GetAttRejCau(), uAttachType); /*判断拒绝原因值,根据不同原因值进行处理*/ NAS_EMM_RejCauseValProc(NAS_EMM_GLO_AD_GetAttRejCau()); return NAS_LMM_MSG_HANDLED; }