/***************************************************************************** Function Name : NAS_EMM_GetDetachType Description : 编码DETACH REQ消息时,获取DETACH TYPE 用户DetachType UE MODE PS CS+PS EPS detach EPS DETACH EPS DETACH IMSI detach 在预处理里已处理 IMSI DETACH EPS/IMSI detach EPS DETACH EPS DETACH(当注册域为PS); EPS/IMSI DETACH(当注册域为其他) Input : 无 Output : 无 Return : MMC_LMM_MO_DETACH_TYPE_ENUM_UINT32 History : 1.lihong00150010 2011-09-29 Draft Enact *****************************************************************************/ MMC_LMM_MO_DETACH_TYPE_ENUM_UINT32 NAS_EMM_GetDetachType( VOS_VOID ) { MMC_LMM_MO_DETACH_TYPE_ENUM_UINT32 enDetachType = MMC_LMM_MO_DETACH_TYPE_BUTT; /* 获取用户请求的DETACH类型 */ enDetachType = NAS_EMM_GLO_AD_GetDetTypeMo(); /* 如果UE模式为PS,则返回类型为EPS ONLY */ if (NAS_EMM_NO == NAS_EMM_IsCsPsUeMode()) { return MMC_LMM_MO_DET_PS_ONLY; } /* 如果用户请求的DETACH类型不为EPS/IMSI,则返回用户请求的DETACH类型 */ if (MMC_LMM_MO_DET_CS_PS != enDetachType) { return enDetachType; } /*如果用户请求的是EPS/IMSI DETACH,且当前注册域为PS,则返回EPS ONLY;如果当前 注册域为CS+PS,则返回EPS/IMSI;如果当前注册域为NULL,则暂时暂时先返回EPS/IMSI, 不再考虑UE是否被原因值#2拒绝过,也不考虑在收到DETACH消息之前用户是否允许在CS域注册 */ if (NAS_LMM_REG_DOMAIN_PS == NAS_LMM_GetEmmInfoRegDomain()) { return MMC_LMM_MO_DET_PS_ONLY; } else { return MMC_LMM_MO_DET_CS_PS; } }
VOS_UINT32 NAS_EMM_MsRegSsNoCellAvailMsgAppAttachReq( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { MMC_LMM_ATTACH_REQ_STRU *pRcvEmmMsg; (VOS_VOID)ulMsgId; pRcvEmmMsg = (MMC_LMM_ATTACH_REQ_STRU *)pMsgStru; /*打印进入该函数*/ NAS_EMM_ATTACH_LOG_NORM("NAS_EMM_MsRegSsNoCellAvailMsgAppAttachReq is entered"); /*检查状态是否匹配,若不匹配,退出*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_REG,EMM_SS_REG_NO_CELL_AVAILABLE)) { /*打印出错信息*/ NAS_EMM_ATTACH_LOG_WARN("NAS_EMM_MsDrgSsPlmnSrcMsgAppAttachReq: STATE ERR!"); return NAS_LMM_MSG_DISCARD; } /*消息内容检查,若有错,打印并退出*/ if (NAS_EMM_PARA_INVALID == NAS_EMM_AppAttachReqMsgChk(pRcvEmmMsg)) { NAS_EMM_ATTACH_LOG_ERR("NAS_EMM_MsRegSsNoCellAvailMsgAppAttachReq: APP_MM_ATTACH_REQ_STRU PARA ERR!"); return NAS_LMM_ERR_CODE_PARA_INVALID; } /*保存APP参数*/ NAS_EMM_SaveAppMsgPara(pRcvEmmMsg->ulMsgId,pRcvEmmMsg->ulOpId); if(MMC_LMM_ATT_REQ_TYPE_PS_ONLY == pRcvEmmMsg->ulAttachType) { /*向MMC发送ATTACH成功*/ NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_SUCCESS); return NAS_LMM_MSG_HANDLED; } if ( (NAS_EMM_YES == NAS_EMM_IsCsPsUeMode()) &&(NAS_LMM_REG_DOMAIN_CS_PS == NAS_LMM_GetEmmInfoRegDomain())) { NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_SUCCESS); return NAS_LMM_MSG_HANDLED; } else { NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_FAILURE); return NAS_LMM_MSG_HANDLED; } }
VOS_UINT32 NAS_EMM_MsRegInitSsWtCnAttCnfMsgAppAttachReq(VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { MMC_LMM_ATTACH_REQ_STRU *pRcvEmmMsg; (VOS_VOID)ulMsgId; pRcvEmmMsg = (MMC_LMM_ATTACH_REQ_STRU *) pMsgStru; /*打印进入该函数*/ NAS_EMM_ATTACH_LOG_NORM("NAS_EMM_MsRegInitSsWtCnAttCnfMsgAppAttachReq 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_MsDrgSsPlmnSrcMsgAppAttachReq: STATE ERR!"); return NAS_LMM_MSG_DISCARD; } /*消息内容检查,若有错,打印并退出*/ if (NAS_EMM_PARA_INVALID == NAS_EMM_AppAttachReqMsgChk(pRcvEmmMsg)) { NAS_EMM_ATTACH_LOG_ERR("NAS_EMM_MsRegInitSsWtCnAttCnfMsgAppAttachReq: MMC_LMM_ATTACH_REQ_STRU PARA ERR!"); return NAS_LMM_ERR_CODE_PARA_INVALID; } /* 用户请求ATTACH类型为IMSI,UE模式为PS,则直接回复FAILURE , 用户请求ATTACH类型为IMSI,UE模式为CS_PS,此时注册状态为NULL,则直接回复FAILURE , 综上,RegInitSsWtCnAttCnf状态下CS的ATTACH都直接回复失败 */ if( (MMC_LMM_ATT_REQ_TYPE_CS_ONLY == pRcvEmmMsg->ulAttachType) &&(NAS_EMM_NO == NAS_EMM_IsCsPsUeMode())) { /*保存APP参数*/ NAS_EMM_SaveAppMsgPara(pRcvEmmMsg->ulMsgId,pRcvEmmMsg->ulOpId); /*向MMC发送ATTACH失败*/ NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_FAILURE); return NAS_LMM_MSG_HANDLED; } /* 低优先级缓存 */ NAS_EMM_ATTACH_LOG_INFO("NAS_EMM_MsRegInitSsWtCnAttCnfMsgAppAttachReq IS NAS_LMM_STORE_LOW_PRIO_MSG"); return NAS_LMM_STORE_LOW_PRIO_MSG; }
VOS_UINT32 NAS_EMM_MsRegSsWaitAccessGrantIndMsgAppAttachReq( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { MMC_LMM_ATTACH_REQ_STRU *pRcvEmmMsg; (VOS_VOID)ulMsgId; pRcvEmmMsg = (MMC_LMM_ATTACH_REQ_STRU *)pMsgStru; /*打印进入该函数*/ NAS_EMM_ATTACH_LOG_NORM("NAS_EMM_MsRegSsWaitAccessGrantIndMsgAppAttachReq is entered"); /*检查状态是否匹配,若不匹配,退出*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_REG,EMM_SS_REG_WAIT_ACCESS_GRANT_IND)) { /*打印出错信息*/ NAS_EMM_ATTACH_LOG_WARN("NAS_EMM_MsRegSsWaitAccessGrantIndMsgAppAttachReq: STATE ERR!"); return NAS_LMM_MSG_DISCARD; } /*消息内容检查,若有错,打印并退出*/ if (NAS_EMM_PARA_INVALID == NAS_EMM_AppAttachReqMsgChk(pRcvEmmMsg)) { NAS_EMM_ATTACH_LOG_ERR("NAS_EMM_MsRegSsWaitAccessGrantIndMsgAppAttachReq: MMC_LMM_ATTACH_REQ_STRU PARA ERR!"); return NAS_LMM_ERR_CODE_PARA_INVALID; } /*保存APP参数*/ NAS_EMM_SaveAppMsgPara(pRcvEmmMsg->ulMsgId,pRcvEmmMsg->ulOpId); if(MMC_LMM_ATT_REQ_TYPE_PS_ONLY == pRcvEmmMsg->ulAttachType) { /*向MMC发送ATTACH成功*/ NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_SUCCESS); return NAS_LMM_MSG_HANDLED; } /*操作模式是PS*/ if(NAS_EMM_NO == NAS_EMM_IsCsPsUeMode()) { NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_FAILURE); return NAS_LMM_MSG_HANDLED; } /*注册域为CS_PS*/ if (NAS_LMM_REG_DOMAIN_CS_PS == NAS_LMM_GetEmmInfoRegDomain()) { NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_SUCCESS); return NAS_LMM_MSG_HANDLED; } /*注册域为PS*/ if (NAS_LMM_REG_DOMAIN_PS == NAS_LMM_GetEmmInfoRegDomain()) { if( (NAS_EMM_REJ_YES == NAS_LMM_GetEmmInfoRejCause2Flag()) ||(NAS_EMM_REJ_YES == NAS_EMMC_GetRejCause18Flag())) { NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_FAILURE); return NAS_LMM_MSG_HANDLED; } /*联合TAU*/ /*信令被BAR不能发起,其它可以发起,内部消息处理中会判断,此处不再判断*/ NAS_EMM_SendIntraTauReq(ID_APP_MM_MSG_TYPE_BUTT,NAS_LMM_INTRA_TAU_TYPE_IMSI_ATTACH); return NAS_LMM_MSG_HANDLED; } return NAS_LMM_MSG_HANDLED; }
VOS_UINT32 NAS_EMM_MsSerInitSsWtCnSerCnfMsgAppAttachReq( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { MMC_LMM_ATTACH_REQ_STRU *pRcvEmmMsg; (VOS_VOID)ulMsgId; pRcvEmmMsg = (MMC_LMM_ATTACH_REQ_STRU *)pMsgStru; /*打印进入该函数*/ NAS_EMM_ATTACH_LOG_NORM("NAS_EMM_MsSerInitSsWtCnSerCnfMsgAppAttachReq is entered"); /*检查状态是否匹配,若不匹配,退出*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_SER_INIT,EMM_SS_SER_WAIT_CN_SER_CNF)) { /*打印出错信息*/ NAS_EMM_ATTACH_LOG_WARN("NAS_EMM_MsSerInitSsWtCnSerCnfMsgAppAttachReq: STATE ERR!"); return NAS_LMM_MSG_DISCARD; } /*消息内容检查,若有错,打印并退出*/ if (NAS_EMM_PARA_INVALID == NAS_EMM_AppAttachReqMsgChk(pRcvEmmMsg)) { NAS_EMM_ATTACH_LOG_ERR("NAS_EMM_MsSerInitSsWtCnSerCnfMsgAppAttachReq: MMC_LMM_ATTACH_REQ_STRU PARA ERR!"); return NAS_LMM_ERR_CODE_PARA_INVALID; } /*保存APP参数*/ NAS_EMM_SaveAppMsgPara(pRcvEmmMsg->ulMsgId,pRcvEmmMsg->ulOpId); if(MMC_LMM_ATT_REQ_TYPE_PS_ONLY == pRcvEmmMsg->ulAttachType) { /*向MMC发送ATTACH成功*/ NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_SUCCESS); return NAS_LMM_MSG_HANDLED; } /*请求类型是IMSI或者CS_ps,操作模式是PS*/ if(NAS_EMM_NO == NAS_EMM_IsCsPsUeMode()) { NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_FAILURE); return NAS_LMM_MSG_HANDLED; } /*请求类型是IMSI或者CS_ps操作模式是CS_PS,注册域为CS_PS*/ if (NAS_LMM_REG_DOMAIN_CS_PS == NAS_LMM_GetEmmInfoRegDomain()) { NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_SUCCESS); return NAS_LMM_MSG_HANDLED; } /*请求类型是IMSI或者CS_ps操作模式是CS_PS,注册域为PS*/ if(NAS_LMM_REG_DOMAIN_PS == NAS_LMM_GetEmmInfoRegDomain()) { /* 发起TAU,打断SERVICE */ /*停止T3417定时器*/ NAS_LMM_StopStateTimer(TI_NAS_EMM_STATE_SERVICE_T3417); /*Inform RABM that SER fail*/ NAS_EMM_SER_SendRabmReestInd(EMM_ERABM_REEST_STATE_FAIL); /*结束SER流程*/ /* NAS_EMM_SER_AbnormalOver();*/ /*设置流程冲突标志位*/ NAS_EMM_TAU_SaveEmmCollisionCtrl(NAS_EMM_COLLISION_SERVICE); /*NAS_EMM_TAU_SaveEmmTAUStartCause(NAS_EMM_TAU_START_CAUSE_IMSI_ATTACH);*/ NAS_EMM_TAU_SaveEmmTAUStartCause(NAS_EMM_TAU_START_CAUSE_OTHERS); /*启动TAU Procedure*/ NAS_EMM_TAU_StartTAUREQ(); return NAS_LMM_MSG_HANDLED; } return NAS_LMM_MSG_HANDLED; }
VOS_UINT32 NAS_EMM_MsTauInitSsWtCnTauCnfMsgAppAttachReq(VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { MMC_LMM_ATTACH_REQ_STRU *pRcvEmmMsg; (VOS_VOID)ulMsgId; pRcvEmmMsg = (MMC_LMM_ATTACH_REQ_STRU *)pMsgStru; /*打印进入该函数*/ NAS_EMM_ATTACH_LOG_NORM("NAS_EMM_MsTauInitSsWtCnTauCnfMsgAppAttachReq is entered"); /*检查状态是否匹配,若不匹配,退出*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_TAU_INIT,EMM_SS_TAU_WAIT_CN_TAU_CNF)) { /*打印出错信息*/ NAS_EMM_ATTACH_LOG_WARN("NAS_EMM_MsDrgSsPlmnSrcMsgAppAttachReq: STATE ERR!"); return NAS_LMM_MSG_DISCARD; } /*消息内容检查,若有错,打印并退出*/ if (NAS_EMM_PARA_INVALID == NAS_EMM_AppAttachReqMsgChk(pRcvEmmMsg)) { NAS_EMM_ATTACH_LOG_ERR("NAS_EMM_MsTauInitSsWtCnTauCnfMsgAppAttachReq: MMC_LMM_ATTACH_REQ_STRU PARA ERR!"); return NAS_LMM_ERR_CODE_PARA_INVALID; } /*保存APP参数*/ NAS_EMM_SaveAppMsgPara(pRcvEmmMsg->ulMsgId,pRcvEmmMsg->ulOpId); if(MMC_LMM_ATT_REQ_TYPE_PS_ONLY == pRcvEmmMsg->ulAttachType) { /*向MMC发送ATTACH成功*/ NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_SUCCESS); return NAS_LMM_MSG_HANDLED; } /*操作模式是PS*/ if(NAS_EMM_NO == NAS_EMM_IsCsPsUeMode()) { NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_FAILURE); return NAS_LMM_MSG_HANDLED; } /*操作模式是CS_PS*/ /*注册域为CS_PS*/ if (NAS_LMM_REG_DOMAIN_CS_PS == NAS_LMM_GetEmmInfoRegDomain()) { NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_SUCCESS); return NAS_LMM_MSG_HANDLED; } /*注册域为PS*/ if(NAS_LMM_REG_DOMAIN_PS == NAS_LMM_GetEmmInfoRegDomain()) { return NAS_LMM_STORE_LOW_PRIO_MSG; } return NAS_LMM_MSG_HANDLED; }