VOS_UINT32 NAS_EMM_RcvSmsEstReqMsgProc(VOS_VOID) { VOS_UINT32 ulCurEmmStat; /* 获取当前状态 */ ulCurEmmStat = NAS_LMM_PUB_COMP_EMMSTATE(NAS_EMM_CUR_MAIN_STAT, NAS_EMM_CUR_SUB_STAT); /* EMM_SS_REG_NORMAL_SERVICE */ if (ulCurEmmStat == NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_NORMAL_SERVICE)) { /* 不是数据连接态,进状态机处理 */ if(NAS_EMM_CONN_DATA != NAS_EMM_GetConnState()) { return NAS_LMM_MSG_DISCARD; } NAS_LMM_SndLmmSmsEstCnf(); NAS_LMM_SetConnectionClientId(NAS_LMM_CONNECTION_CLIENT_ID_SMS); return NAS_LMM_MSG_HANDLED; } else /* 其它状态进行与数据请求相同的处理 */ { return NAS_EMM_SomeStateRcvSmsMsgCommProc(); } }
VOS_UINT32 NAS_EMM_RcvSmsDataReqMsgProc(MsgBlock * pMsg) { VOS_UINT32 ulCurEmmStat; /* 获取当前状态 */ ulCurEmmStat = NAS_LMM_PUB_COMP_EMMSTATE(NAS_EMM_CUR_MAIN_STAT, NAS_EMM_CUR_SUB_STAT); /* EMM_SS_REG_NORMAL_SERVICE */ if (ulCurEmmStat == NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_NORMAL_SERVICE)) { if (NAS_EMM_CONN_DATA == NAS_EMM_GetConnState()) { /*编码上行NAS透传消息,并且发送给RRC*/ NAS_EMM_SMS_SendMrrcDataReq_SmsData(pMsg); } else { NAS_LMM_SndLmmSmsErrInd(LMM_SMS_ERR_CAUSE_RRC_CONN_NOT_EXIST); } return NAS_LMM_MSG_HANDLED; } else /* 其它状态进行与建链请求相同的处理 */ { return NAS_EMM_SomeStateRcvSmsMsgCommProc(); } }
/***************************************************************************** Function Name : NAS_EMM_MsAuthInitSsWtCnAuthMsgCnDetachAcp Description : 在AuthInit等待CN消息时DETACH ACCPET消息 Input : ulMsgId,pMsgStru Output : None Return : VOS_UINT32 History : 1.lihong00150010 2012-10-19 Draft Enact *****************************************************************************/ VOS_UINT32 NAS_EMM_MsAuthInitSsWtCnAuthMsgCnDetachAcp ( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { VOS_UINT32 ulStaAtStackTop = NAS_EMM_NULL; VOS_UINT32 ulCurEmmStat = NAS_EMM_NULL; NAS_EMM_SECU_LOG_INFO("NAS_EMM_MsAuthInitSsWtCnAuthMsgCnDetachAcp entered."); if ( NAS_EMM_NULL_PTR == pMsgStru) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgCnDetachAcp:input ptr null!"); return NAS_LMM_ERR_CODE_PTR_NULL; } /* 栈顶的状态如果不为TAU_INIT态,则丢弃 */ ulStaAtStackTop = NAS_LMM_FSM_GetStaAtStackTop(NAS_LMM_PARALLEL_FSM_EMM); if ((ulStaAtStackTop != NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_DEREG_INIT,EMM_SS_DETACH_WAIT_CN_DETACH_CNF)) && (ulStaAtStackTop != NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG,EMM_SS_REG_IMSI_DETACH_WATI_CN_DETACH_CNF))) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgCnDetachAcp:not dereg_init+wait_cn_detach_cnf and not reg+wait_imsi_detach_cnf state!"); return NAS_LMM_MSG_DISCARD; } /* 如果当前没有紧急承载,则丢弃 */ if ((NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_EMC_REGED) && (NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_NORM_REGED_AND_EMC_BEAR)) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgCnDetachAcp:no emergency bearer"); return NAS_LMM_MSG_DISCARD; } /* 停T3420,T3418*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3418); NAS_LMM_StopStateTimer( TI_NAS_EMM_T3420); /* AUTH失败次数清零*/ NAS_EMM_GetAuthFailTimes() = 0; /* 状态出栈*/ NAS_EMM_FSM_PopState(); ulCurEmmStat = NAS_LMM_PUB_COMP_EMMSTATE( NAS_EMM_CUR_MAIN_STAT, NAS_EMM_CUR_SUB_STAT); if (ulCurEmmStat == NAS_LMM_PUB_COMP_EMMSTATE( EMM_MS_DEREG_INIT, EMM_SS_DETACH_WAIT_CN_DETACH_CNF)) { return NAS_EMM_MsDrgInitSsWtCnDetCnfMsgCnDetachAcp(ulMsgId, pMsgStru); } else { return NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgCnDetachAcp(ulMsgId, pMsgStru); } }
VOS_UINT32 NAS_EMM_MsAuthInitSsWtCnAuthMsgRrcRelInd( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru) { LRRC_LMM_REL_IND_STRU *pRrcRelInd = VOS_NULL_PTR; VOS_UINT32 ulCause; VOS_UINT32 ulCurEmmStat; NAS_EMM_SECU_LOG_INFO("NAS_EMM_MsAuthInitSsWtCnAuthMsgRrcRelInd entered."); (VOS_VOID)(ulMsgId); (VOS_VOID)(pMsgStru); pRrcRelInd = (LRRC_LMM_REL_IND_STRU*)(pMsgStru); ulCause = pRrcRelInd->enRelCause; /* 停T3420,T3418*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3418); NAS_LMM_StopStateTimer( TI_NAS_EMM_T3420); /* AUTH失败次数清零*/ NAS_EMM_GetAuthFailTimes() = 0; /* 状态出栈*/ NAS_EMM_FSM_PopState(); ulCurEmmStat = NAS_LMM_PUB_COMP_EMMSTATE(NAS_EMM_CUR_MAIN_STAT, NAS_EMM_CUR_SUB_STAT); switch(ulCurEmmStat) { case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG_INIT, EMM_SS_ATTACH_WAIT_CN_ATTACH_CNF): NAS_EMM_MsRegInitSsWtCnAttCnfProcMsgRrcRelInd(ulCause); break; case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_NORMAL_SERVICE): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_LIMITED_SERVICE): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_ATTEMPTING_TO_UPDATE_MM): NAS_EMM_MsRegSsNmlSrvProcMsgRrcRelInd(ulCause); break; case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_IMSI_DETACH_WATI_CN_DETACH_CNF): NAS_EMM_ProcMsRegImsiDetachInitMsgRrcRelInd(ulCause); break; case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_TAU_INIT, EMM_SS_TAU_WAIT_CN_TAU_CNF): NAS_EMM_MsTauInitSsWaitCNCnfProcMsgRrcRelInd(ulCause); break; case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_SER_INIT, EMM_SS_SER_WAIT_CN_SER_CNF): NAS_EMM_MsSerInitSsWaitCnSerCnfProcMsgRrcRelInd(ulCause); break; case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_DEREG_INIT, EMM_SS_DETACH_WAIT_CN_DETACH_CNF): NAS_EMM_MsDrgInitSsWtCnDetCnfProcMsgRrcRelInd(ulCause); break; default: break; } return NAS_LMM_MSG_HANDLED; }
VOS_UINT32 NAS_EMM_MsAuthInitSsWtCnAuthMsgCnAuthRej( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru) { VOS_UINT32 ulCurEmmStat; (VOS_VOID)(pMsgStru); (VOS_VOID)ulMsgId; NAS_EMM_SECU_LOG_INFO( "NAS_EMM_MsAuthInitSsWtCnAuthMsgCnAuthRej entered."); /* 鉴权拒绝优化处理 */ if (NAS_EMM_YES == NAS_EMM_IsNeedIgnoreHplmnAuthRej()) { return NAS_LMM_MSG_HANDLED; } /* 停T3420,T3418*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3418); NAS_LMM_StopStateTimer( TI_NAS_EMM_T3420); /* AUTH失败次数清零*/ NAS_EMM_GetAuthFailTimes() = 0; /* 状态出栈*/ NAS_EMM_FSM_PopState(); ulCurEmmStat = NAS_LMM_PUB_COMP_EMMSTATE(NAS_EMM_CUR_MAIN_STAT, NAS_EMM_CUR_SUB_STAT); switch(ulCurEmmStat) { case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG_INIT, EMM_SS_ATTACH_WAIT_CN_ATTACH_CNF): NAS_EMM_MsRegInitSsWtCnAttCnfProcMsgAuthRej(NAS_EMM_AUTH_REJ_INTRA_CAUSE_NORMAL); break; case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_NORMAL_SERVICE): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_LIMITED_SERVICE): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_ATTEMPTING_TO_UPDATE_MM): NAS_EMM_MsRegSsNmlSrvProcMsgAuthRej(NAS_EMM_AUTH_REJ_INTRA_CAUSE_NORMAL); break; case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_IMSI_DETACH_WATI_CN_DETACH_CNF): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_DEREG_INIT, EMM_SS_DETACH_WAIT_CN_DETACH_CNF): NAS_EMM_ProcDetachAuthRej(NAS_EMM_AUTH_REJ_INTRA_CAUSE_NORMAL); break; case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_TAU_INIT, EMM_SS_TAU_WAIT_CN_TAU_CNF): NAS_EMM_MsTauInitSsWaitCnTauCnfProcMsgAuthRej(NAS_EMM_AUTH_REJ_INTRA_CAUSE_NORMAL); break; case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_SER_INIT, EMM_SS_SER_WAIT_CN_SER_CNF): NAS_EMM_MsSerInitSsWaitCnSerCnfProcMsgAuthRej(NAS_EMM_AUTH_REJ_INTRA_CAUSE_NORMAL); break; default: break; } return NAS_LMM_MSG_HANDLED; }
/***************************************************************************** Function Name : NAS_EMM_GetSwitchOffDetachType Description : 当为关机类型的DETACH时,获取DETACH TYPE Input : 无 Output : 无 Return : MMC_LMM_MO_DETACH_TYPE_ENUM_UINT32 History : 1.lihong00150010 2012-02-02 Draft Enact *****************************************************************************/ MMC_LMM_MO_DETACH_TYPE_ENUM_UINT32 NAS_EMM_GetSwitchOffDetachType( VOS_VOID ) { VOS_UINT32 ulCurEmmStat; /*如果用户请求的是EPS/IMSI DETACH,且当前注册域为PS,则返回EPS ONLY;如果当前 注册域为CS+PS,则返回EPS/IMSI;如果当前注册域为NULL时,目前只有注册过程中的 三种状态会发送关机DETACH消息,因此根据ATTACH类型来填写DETACH类型*/ if (NAS_LMM_REG_DOMAIN_PS == NAS_LMM_GetEmmInfoRegDomain()) { return MMC_LMM_MO_DET_PS_ONLY; } if (NAS_LMM_REG_DOMAIN_CS_PS == NAS_LMM_GetEmmInfoRegDomain()) { return MMC_LMM_MO_DET_CS_PS; } ulCurEmmStat = NAS_LMM_PUB_COMP_EMMSTATE( NAS_EMM_CUR_MAIN_STAT, NAS_EMM_CUR_SUB_STAT); if ((ulCurEmmStat != NAS_LMM_PUB_COMP_EMMSTATE( EMM_MS_REG_INIT, EMM_SS_ATTACH_WAIT_CN_ATTACH_CNF)) && (ulCurEmmStat != NAS_LMM_PUB_COMP_EMMSTATE( EMM_MS_REG_INIT, EMM_SS_ATTACH_WAIT_ESM_BEARER_CNF)) && (ulCurEmmStat != NAS_LMM_PUB_COMP_EMMSTATE( EMM_MS_REG_INIT, EMM_SS_ATTACH_WAIT_RRC_DATA_CNF))) { NAS_EMM_DETACH_LOG_WARN("NAS_EMM_GetSwitchOffDetachType:Illegal state!"); return MMC_LMM_MO_DET_PS_ONLY; } /* 如果是ATTACH过程中的关机,则根据ATTACH类型填写DETACH类型 */ if (MMC_LMM_ATT_TYPE_COMBINED_EPS_IMSI == NAS_EMM_GLO_GetCnAttReqType()) { return MMC_LMM_MO_DET_CS_PS; } else { return MMC_LMM_MO_DET_PS_ONLY; } }
VOS_UINT32 NAS_LMM_PreProcUsimAuthCnf(MsgBlock *pMsg) { VOS_UINT32 ulCurEmmStat; VOS_UINT32 ulRslt; USIMM_AUTH_CNF_STRU *pstUsimAuthCnf; pstUsimAuthCnf = (USIMM_AUTH_CNF_STRU *)pMsg; NAS_LMM_PUBM_LOG_INFO("NAS_LMM_ProcUsimAuthCnf is entered"); /* 如果OpId不同,说明在这个鉴权CNF之前又收到了网侧的鉴权请求 ,继续等待USIM回复*/ if(pstUsimAuthCnf->ucOpId != NAS_EMM_GetSecuAuthOpId()) { return NAS_LMM_MSG_HANDLED; } /* 部分状态下,LMM会对USIM的CNF进行处理,那么在这些状态下LMM不预处理,*/ ulCurEmmStat = NAS_LMM_PUB_COMP_EMMSTATE(NAS_EMM_CUR_MAIN_STAT, NAS_EMM_CUR_SUB_STAT); switch(ulCurEmmStat) { case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG_INIT, EMM_SS_ATTACH_WAIT_CN_ATTACH_CNF): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_NORMAL_SERVICE): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_LIMITED_SERVICE): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_ATTEMPTING_TO_UPDATE_MM): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_IMSI_DETACH_WATI_CN_DETACH_CNF): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_TAU_INIT, EMM_SS_TAU_WAIT_CN_TAU_CNF): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_DEREG_INIT, EMM_SS_DETACH_WAIT_CN_DETACH_CNF): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_AUTH_INIT, EMM_SS_AUTH_WAIT_CN_AUTH): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_SER_INIT, EMM_SS_SER_WAIT_CN_SER_CNF): ulRslt = NAS_LMM_MSG_DISCARD; break; default: NAS_LMM_PreProcAnyStateUsimAuthCnf(pstUsimAuthCnf); ulRslt = NAS_LMM_MSG_HANDLED; break; } return ulRslt; }
/***************************************************************************** Function Name : NAS_EMM_MsAuthInitSsWtCnAuthMsgRabmDrbSetupInd Description : 在AuthInit等待CN消息时处理DRB建立消息 Input : ulMsgId,pMsgStru Output : None Return : VOS_UINT32 History : 1.lihong00150010 2012-10-19 Draft Enact *****************************************************************************/ VOS_UINT32 NAS_EMM_MsAuthInitSsWtCnAuthMsgRabmDrbSetupInd ( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { VOS_UINT32 ulStaAtStackTop = NAS_EMM_NULL; NAS_EMM_SECU_LOG_INFO("NAS_EMM_MsAuthInitSsWtCnAuthMsgRabmDrbSetupInd entered."); if ( NAS_EMM_NULL_PTR == pMsgStru) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgRabmDrbSetupInd:input ptr null!"); return NAS_LMM_ERR_CODE_PTR_NULL; } (VOS_VOID)ulMsgId; /* 栈顶的状态如果不为SERVICE_INIT态,则丢弃 */ ulStaAtStackTop = NAS_LMM_FSM_GetStaAtStackTop(NAS_LMM_PARALLEL_FSM_EMM); if (ulStaAtStackTop != NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_SER_INIT,EMM_SS_SER_WAIT_CN_SER_CNF)) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgRabmDrbSetupInd:not service_init+wait_cn_ser_cnf state!"); return NAS_LMM_MSG_DISCARD; } /* 如果当前没有正在建立紧急承载且没有紧急承载,则丢弃 */ if ((VOS_TRUE != NAS_LMM_GetEmmInfoIsEmerPndEsting()) && (NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_EMC_REGED) && (NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_NORM_REGED_AND_EMC_BEAR)) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgRabmDrbSetupInd:no emergency bearer and not esting emergency bearer"); return NAS_LMM_MSG_DISCARD; } /* 停T3420,T3418*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3418); NAS_LMM_StopStateTimer( TI_NAS_EMM_T3420); /* AUTH失败次数清零*/ NAS_EMM_GetAuthFailTimes() = 0; /* 状态出栈*/ NAS_EMM_FSM_PopState(); NAS_EMM_SER_RcvRabmDrbSetupInd(pMsgStru); return NAS_LMM_MSG_HANDLED; }
/***************************************************************************** Function Name : NAS_EMM_MsAuthInitSsWtCnAuthMsgTauAccept Description : 在AuthInit等待CN消息时TAU ACCPET消息 Input : ulMsgId,pMsgStru Output : None Return : VOS_UINT32 History : 1.lihong00150010 2012-10-19 Draft Enact *****************************************************************************/ VOS_UINT32 NAS_EMM_MsAuthInitSsWtCnAuthMsgTauAccept ( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { VOS_UINT32 ulStaAtStackTop = NAS_EMM_NULL; NAS_EMM_SECU_LOG_INFO("NAS_EMM_MsAuthInitSsWtCnAuthMsgTauAccept entered."); if ( NAS_EMM_NULL_PTR == pMsgStru) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgTauAccept:input ptr null!"); return NAS_LMM_ERR_CODE_PTR_NULL; } /* 栈顶的状态如果不为TAU_INIT态,则丢弃 */ ulStaAtStackTop = NAS_LMM_FSM_GetStaAtStackTop(NAS_LMM_PARALLEL_FSM_EMM); if (ulStaAtStackTop != NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_TAU_INIT,EMM_SS_TAU_WAIT_CN_TAU_CNF)) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgTauAccept:not tau_init+wait_cn_tau_cnf state!"); return NAS_LMM_MSG_DISCARD; } /* 如果当前没有正在建立紧急承载且没有紧急承载,则丢弃 */ if ((VOS_TRUE != NAS_LMM_GetEmmInfoIsEmerPndEsting()) && (NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_EMC_REGED) && (NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_NORM_REGED_AND_EMC_BEAR)) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgTauAccept:no emergency bearer and not esting emergency bearer"); return NAS_LMM_MSG_DISCARD; } /* 停T3420,T3418*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3418); NAS_LMM_StopStateTimer( TI_NAS_EMM_T3420); /* AUTH失败次数清零*/ NAS_EMM_GetAuthFailTimes() = 0; /* 状态出栈*/ NAS_EMM_FSM_PopState(); return NAS_EMM_MsTauInitSsWaitCNCnfMsgTAUAcp(ulMsgId, pMsgStru); }
VOS_UINT32 NAS_LMM_FSM_GetStaAtStackTop( NAS_LMM_PARALLEL_FSM_ENUM_UINT16 enParalFsmId) { NAS_LMM_MAIN_STATE_ENUM_UINT16 enMainState; NAS_LMM_SUB_STATE_ENUM_UINT16 enSubState; NAS_LMM_FSM_STATE_STACK_STRU *pstFsmStack = VOS_NULL_PTR; NAS_LMM_FSM_STATE_STRU *pstFsmStackTop = VOS_NULL_PTR; /* 获取状态栈栈底地址 */ pstFsmStack = NAS_LMM_GetFsmStackAddr(enParalFsmId); pstFsmStackTop = &((pstFsmStack->astFsmStack)[pstFsmStack->ucStackDepth-1]); /* 从状态栈获取状态 */ enMainState = pstFsmStackTop->enMainState; enSubState = pstFsmStackTop->enSubState; return NAS_LMM_PUB_COMP_EMMSTATE(enMainState, enSubState); }
/***************************************************************************** Function Name : NAS_EMM_MsAuthInitSsWtCnAuthMsgAttachAccept Description : 在AuthInit等待CN消息时ATTACH ACCPET消息 Input : ulMsgId,pMsgStru Output : None Return : VOS_UINT32 History : 1.lihong00150010 2012-10-19 Draft Enact *****************************************************************************/ VOS_UINT32 NAS_EMM_MsAuthInitSsWtCnAuthMsgAttachAccept ( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { VOS_UINT32 ulStaAtStackTop = NAS_EMM_NULL; NAS_EMM_SECU_LOG_INFO("NAS_EMM_MsAuthInitSsWtCnAuthMsgAttachAccept entered."); if ( NAS_EMM_NULL_PTR == pMsgStru) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgAttachAccept:input ptr null!"); return NAS_LMM_ERR_CODE_PTR_NULL; } /* 栈顶的状态如果不为REG_INIT态,则丢弃 */ ulStaAtStackTop = NAS_LMM_FSM_GetStaAtStackTop(NAS_LMM_PARALLEL_FSM_EMM); if (ulStaAtStackTop != NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG_INIT,EMM_SS_ATTACH_WAIT_CN_ATTACH_CNF)) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgAttachAccept:not reg_init+wait_cn_attach_cnf state!"); return NAS_LMM_MSG_DISCARD; } /* 如果当前不是紧急注册过程中,则丢弃 */ if ((VOS_TRUE != NAS_LMM_GetEmmInfoIsEmerPndEsting()) && (NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_EMC_REGING)) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgAttachAccept:not emergency attach"); return NAS_LMM_MSG_DISCARD; } /* 停T3420,T3418*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3418); NAS_LMM_StopStateTimer( TI_NAS_EMM_T3420); /* AUTH失败次数清零*/ NAS_EMM_GetAuthFailTimes() = 0; /* 状态出栈*/ NAS_EMM_FSM_PopState(); return NAS_EMM_MsRegInitSsWtCnAttCnfMsgCnAttachAcp(ulMsgId, pMsgStru); }
VOS_UINT32 NAS_EMM_PreProcMsgCsSerNotification ( NAS_EMM_CN_MSG_STRU_UNION *pCnMsg ) { VOS_UINT32 ulCurEmmStat = NAS_EMM_NULL; NAS_EMM_CN_CS_SER_NOTIFICAIOTN_STRU *pstCsSerNotification = VOS_NULL_PTR; NAS_EMM_PUBU_LOG_NORM("NAS_EMM_PreProcMsgCsSerNotification is entered"); pstCsSerNotification = (NAS_EMM_CN_CS_SER_NOTIFICAIOTN_STRU *)pCnMsg; ulCurEmmStat = NAS_LMM_PUB_COMP_EMMSTATE(NAS_EMM_CUR_MAIN_STAT, NAS_EMM_CUR_SUB_STAT); switch(ulCurEmmStat) { case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG,EMM_SS_REG_NORMAL_SERVICE): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_RRC_CONN_REL_INIT,EMM_SS_RRC_CONN_WAIT_REL_CNF): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_AUTH_INIT,EMM_SS_AUTH_WAIT_CN_AUTH): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_TAU_INIT,EMM_SS_TAU_WAIT_CN_TAU_CNF): /* 进入该分支的肯定是MT类型的CSFB */ if (NAS_EMM_FAIL == NAS_EMM_SER_VerifyCsfb(MM_LMM_CSFB_SERVICE_MT_NORMAL)) { /* 设置UE拒绝CSFB */ NAS_EMM_SER_SaveEmmSerCsfbRsp(NAS_EMM_CSFB_RSP_REJECTED_BY_UE); NAS_EMM_SER_SaveEmmSERStartCause(NAS_EMM_SER_START_CAUSE_MT_CSFB_REQ); /* 发送EXTENDED SERVICE REQ消息,通知网侧CSFB不能发起 */ NAS_EMM_SER_SendMrrcDataReq_ExtendedServiceReq(); } else { /* 给MM模块发送MM_MM_CSFB_SERVICE_PAGING_IND消息 */ NAS_EMM_MmSendCsfbSerPaingInd( NAS_EMM_MT_CSFB_TYPE_CS_SER_NOTIFICATION, pstCsSerNotification, LRRC_PAGE_UE_ID_BUTT); } break; case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_SER_INIT,EMM_SS_SER_WAIT_CN_SER_CNF): /*处于主叫过程中,收到被叫,则直接丢弃,被叫过程中收到CS SERVICE NOTIFICATION消息可能是重发,需要重新发起ESR*/ if ((NAS_EMM_SER_START_CAUSE_MO_CSFB_REQ != NAS_EMM_SER_GetEmmSERStartCause()) && (NAS_EMM_SER_START_CAUSE_MO_EMERGENCY_CSFB_REQ != NAS_EMM_SER_GetEmmSERStartCause())) { if (NAS_EMM_FAIL == NAS_EMM_SER_VerifyCsfb(MM_LMM_CSFB_SERVICE_MT_NORMAL)) { /* 设置UE拒绝CSFB */ NAS_EMM_SER_SaveEmmSerCsfbRsp(NAS_EMM_CSFB_RSP_REJECTED_BY_UE); NAS_EMM_SER_SaveEmmSERStartCause(NAS_EMM_SER_START_CAUSE_MT_CSFB_REQ); /* 发送EXTENDED SERVICE REQ消息,通知网侧CSFB不能发起 */ NAS_EMM_SER_SendMrrcDataReq_ExtendedServiceReq(); } else { /* 给MM模块发送MM_MM_CSFB_SERVICE_PAGING_IND消息 */ NAS_EMM_MmSendCsfbSerPaingInd( NAS_EMM_MT_CSFB_TYPE_CS_SER_NOTIFICATION, pstCsSerNotification, LRRC_PAGE_UE_ID_BUTT); } } break; case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG,EMM_SS_REG_IMSI_DETACH_WATI_CN_DETACH_CNF): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG,EMM_SS_REG_ATTEMPTING_TO_UPDATE_MM): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_DEREG_INIT,EMM_SS_DETACH_WAIT_CN_DETACH_CNF): /* 设置UE拒绝CSFB */ NAS_EMM_SER_SaveEmmSerCsfbRsp(NAS_EMM_CSFB_RSP_REJECTED_BY_UE); NAS_EMM_SER_SaveEmmSERStartCause(NAS_EMM_SER_START_CAUSE_MT_CSFB_REQ); /* 发送EXTENDED SERVICE REQ消息,通知网侧CSFB不能发起 */ NAS_EMM_SER_SendMrrcDataReq_ExtendedServiceReq(); break; default : NAS_EMM_PUBU_LOG_NORM("NAS_EMM_PreProcMsgCsSerNotification:Illegal state!"); break; } return NAS_LMM_MSG_HANDLED; }
VOS_UINT32 NAS_EMM_SomeStateRcvSmsMsgCommProc(VOS_VOID) { VOS_UINT32 ulCurEmmStat; LMM_SMS_ERR_CAUSE_ENUM_UINT32 enErrCause = LMM_SMS_ERR_CAUSE_OTHERS; /* 获取当前状态 */ ulCurEmmStat = NAS_LMM_PUB_COMP_EMMSTATE(NAS_EMM_CUR_MAIN_STAT, NAS_EMM_CUR_SUB_STAT); /* 各状态的处理 */ switch(ulCurEmmStat) { case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_DEREG, EMM_SS_DEREG_NO_IMSI): enErrCause = LMM_SMS_ERR_CAUSE_USIM_PS_INVALID; break; case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_DEREG, EMM_SS_DEREG_ATTACH_NEEDED): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_WAIT_ACCESS_GRANT_IND): enErrCause = LMM_SMS_ERR_CAUSE_ACCESS_BARRED; break; case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_DEREG, EMM_SS_DEREG_ATTEMPTING_TO_ATTACH): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_ATTEMPTING_TO_UPDATE): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG, EMM_SS_REG_ATTEMPTING_TO_UPDATE_MM): /* 3402运行上报LMM_SMS_ERR_CAUSE_T3402_RUNNING ,其它情况报LMM_SMS_ERR_CAUSE_OTHERS*/ if (NAS_LMM_TIMER_RUNNING == NAS_LMM_IsPtlTimerRunning(TI_NAS_EMM_PTL_T3402)) { enErrCause = LMM_SMS_ERR_CAUSE_T3402_RUNNING; } break; case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_RRC_CONN_EST_INIT, EMM_SS_RRC_CONN_WAIT_EST_CNF): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_RRC_CONN_REL_INIT, EMM_SS_RRC_CONN_WAIT_REL_CNF): return NAS_LMM_STORE_HIGH_PRIO_MSG; case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_AUTH_INIT, EMM_SS_AUTH_WAIT_CN_AUTH): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_TAU_INIT, EMM_SS_TAU_WAIT_CN_TAU_CNF): case NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_SER_INIT, EMM_SS_SER_WAIT_CN_SER_CNF): return NAS_LMM_STORE_LOW_PRIO_MSG; default: /* 其它所有状态一律上报原因值LMM_SMS_ERR_CAUSE_OTHERS */ break; } NAS_LMM_SndLmmSmsErrInd(enErrCause); return NAS_LMM_MSG_HANDLED; }