VOS_UINT32 NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgIntraConnectFailInd ( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { NAS_EMM_MRRC_CONNECT_FAIL_IND_STRU *pMrrcConnectFailInd = NAS_EMM_NULL_PTR; NAS_EMM_DETACH_LOG2_INFO("NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgIntraConnectFailInd is entered", ulMsgId, pMsgStru); pMrrcConnectFailInd = (NAS_EMM_MRRC_CONNECT_FAIL_IND_STRU *)pMsgStru; /*check the input ptr*/ if (NAS_EMM_NULL_PTR == pMsgStru) { NAS_EMM_DETACH_LOG_WARN("NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgIntraConnectFailInd: NULL PTR!"); return NAS_LMM_MSG_DISCARD; } /*check current state*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_REG,EMM_SS_REG_IMSI_DETACH_WATI_CN_DETACH_CNF)) { NAS_EMM_DETACH_LOG_WARN("NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgIntraConnectFailInd: STATE ERR!"); return NAS_LMM_MSG_DISCARD; } /*停止定时器T3421*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3421); /* 设置注册域为PS */ NAS_LMM_SetEmmInfoRegDomain(NAS_LMM_REG_DOMAIN_PS); /*修改状态:进入主状态REG子状态EMM_SS_REG_NORMAL_SERVICE*/ NAS_EMM_AdStateConvert( EMM_MS_REG, EMM_SS_REG_NORMAL_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); if ((LRRC_EST_ACCESS_BARRED_MO_SIGNAL == pMrrcConnectFailInd->enEstResult) || (LRRC_EST_ACCESS_BARRED_ALL == pMrrcConnectFailInd->enEstResult)) { /*向MMC发送LMM_MMC_DETACH_CNF消息*/ NAS_EMM_SendDetRslt(MMC_LMM_DETACH_RSLT_ACCESS_BARED); } else { /*向MMC发送本地LMM_MMC_DETACH_IND消息*/ NAS_EMM_SendDetRslt(MMC_LMM_DETACH_RSLT_SUCCESS); } /* IMSI DETACH后释放资源 */ NAS_LMM_ImsiDetachReleaseResource(); /*send INTRA_CONN2IDLE_REQ,更新连接状态*/ NAS_EMM_CommProcConn2Ilde(); return NAS_LMM_MSG_HANDLED; }
VOS_VOID NAS_EMM_DetProcEnterForbTA(VOS_VOID) { /* 终止DETACH流程*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3421); /*向ESM发送ID_EMM_ESM_STATUS_IND消息*/ NAS_EMM_EsmSendStatResult( EMM_ESM_ATTACH_STATUS_DETACHED); /* lihong00150010 emergency tau&service begin */ if (VOS_TRUE == NAS_EMM_GLO_AD_GetUsimPullOutFlag()) { /*状态转换,通知MMC卡无效*/ NAS_EMM_ProcLocalNoUsim(); }/* lihong00150010 emergency tau&service end */ else { /* 状态迁移:Dereg.Limite_Service*/ NAS_EMM_AdStateConvert( EMM_MS_DEREG, EMM_SS_DEREG_LIMITED_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); /* 本地DETACH*/ NAS_LMM_DeregReleaseResource(); } /*向MMC发送LMM_MMC_DETACH_CNF消息*/ NAS_EMM_SendDetRslt(MMC_LMM_DETACH_RSLT_SUCCESS); NAS_EMM_RelReq( NAS_LMM_NOT_BARRED); return; }
VOS_VOID NAS_EMM_MsDrgInitSsWtCnDetCnfProcMsgRrcRelInd( VOS_UINT32 ulCause) { /*打印进入该函数*/ NAS_EMM_DETACH_LOG_INFO("NAS_EMM_MsDrgInitSsWtCnDetCnfProcMsgRrcRelInd is entered"); (VOS_VOID)( ulCause); /*停止定时器T3421*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3421); /*向ESM发送ID_EMM_ESM_STATUS_IND消息*/ NAS_EMM_EsmSendStatResult( EMM_ESM_ATTACH_STATUS_DETACHED); /* lihong00150010 emergency tau&service begin */ if (VOS_TRUE == NAS_EMM_GLO_AD_GetUsimPullOutFlag()) {/* lihong00150010 emergency tau&service end */ NAS_EMM_DETACH_LOG_NORM("NAS_EMM_MsDrgInitSsWtCnDetCnfProcMsgRrcRelInd: No USIM"); NAS_EMM_ProcLocalNoUsim(); NAS_EMM_SendDetRslt(MMC_LMM_DETACH_RSLT_SUCCESS); /*send INTRA_CONN2IDLE_REQ,更新连接状态*/ NAS_EMM_CommProcConn2Ilde(); return; } /* 有卡,不区分释放原因值,完成本地DETACH*/ /*修改状态:进入主状态DEREG子状态DEREG_NORMAL_SERVICE*/ NAS_EMM_AdStateConvert( EMM_MS_DEREG, EMM_SS_DEREG_NORMAL_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); NAS_EMM_SendDetRslt(MMC_LMM_DETACH_RSLT_SUCCESS); /* 本地DETACH释放资源:动态内存、赋初值 */ NAS_LMM_DeregReleaseResource(); /*send INTRA_CONN2IDLE_REQ,更新连接状态*/ NAS_EMM_CommProcConn2Ilde(); return; }
VOS_UINT32 NAS_EMM_MsDrgInitSsWtCnDetCnfMsgT3421Exp( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { /*打印进入该函数*/ NAS_EMM_DETACH_LOG2_INFO("NAS_EMM_MsDrgInitSsWtCnDetCnfMsgT3421Exp", ulMsgId, pMsgStru); /*检查状态是否匹配,若不匹配,退出*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_DEREG_INIT,EMM_SS_DETACH_WAIT_CN_DETACH_CNF)) { /*打印出错信息*/ NAS_EMM_DETACH_LOG_WARN("NAS_EMM_MsDrgInitSsWtCnDetCnfMsgT3421Exp: STATE ERR!"); return NAS_LMM_MSG_DISCARD; } /*Detach attempt counter加1*/ NAS_EMM_GLO_AD_GetDetAtmpCnt()++; /*判断Detach attempt counter,分为小于5和大于等于5处理*/ if (NAS_EMM_GLO_AD_GetDetAtmpCnt() < 5) { /*发送DETACH REQUEST消息*/ NAS_EMM_SendDetachReqMo(); } else { NAS_EMM_DETACH_LOG_INFO("NAS_EMM_MsDrgInitSsWtCnDetCnfMsgT3421Exp 5 times"); /*向ESM发送ID_EMM_ESM_STATUS_IND消息*/ NAS_EMM_EsmSendStatResult( EMM_ESM_ATTACH_STATUS_DETACHED); /* lihong00150010 emergency tau&service begin */ if (VOS_TRUE == NAS_EMM_GLO_AD_GetUsimPullOutFlag()) { /*状态转换,通知MMC卡无效*/ NAS_EMM_ProcLocalNoUsim(); }/* lihong00150010 emergency tau&service end */ else { NAS_EMM_AdStateConvert( EMM_MS_DEREG, EMM_SS_DEREG_NORMAL_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); } NAS_EMM_SendDetRslt(MMC_LMM_DETACH_RSLT_SUCCESS); /*向MRRC发送NAS_EMM_MRRC_REL_REQ消息*/ NAS_EMM_RelReq( NAS_LMM_NOT_BARRED); } return NAS_LMM_MSG_HANDLED; }
/***************************************************************************** Function Name : NAS_EMM_ImsiDetProcEnterForbTA Description : REG.IMSI_DETACH_INIT状态下收到SYS_INFO,且携带禁止信息,终止DETACH 流程,释放链路 Input : None Output : None Return : VOS_UINT32 History : 1.lihong00150010 2011-10-18 Draft Enact 2.lihong00150010 2012-12-19 Modify:Emergency *****************************************************************************/ VOS_VOID NAS_EMM_ImsiDetProcEnterForbTA( VOS_VOID ) { /* 终止DETACH流程*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3421); /* 设置注册域为PS */ NAS_LMM_SetEmmInfoRegDomain(NAS_LMM_REG_DOMAIN_PS); NAS_EMM_AdStateConvert( EMM_MS_REG, EMM_SS_REG_LIMITED_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); /*向MMC发送LMM_MMC_DETACH_CNF消息*/ NAS_EMM_SendDetRslt(MMC_LMM_DETACH_RSLT_SUCCESS); /* IMSI DETACH后释放资源 */ NAS_LMM_ImsiDetachReleaseResource(); NAS_EMM_RelReq( NAS_LMM_NOT_BARRED); return; }
VOS_UINT32 NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgRabmRelReq ( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { NAS_EMM_DETACH_LOG2_INFO("NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgRabmRelReq", ulMsgId, pMsgStru); /*检查状态是否匹配,若不匹配,退出*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_REG,EMM_SS_REG_IMSI_DETACH_WATI_CN_DETACH_CNF)) { /*打印出错信息*/ NAS_EMM_DETACH_LOG_WARN("NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgRabmRelReq: STATE ERR!"); return NAS_LMM_MSG_DISCARD; } /*停止定时器T3421*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3421); /* 设置注册域为PS */ NAS_LMM_SetEmmInfoRegDomain(NAS_LMM_REG_DOMAIN_PS); NAS_EMM_AdStateConvert( EMM_MS_REG, EMM_SS_REG_NORMAL_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); /*向MMC发送LMM_MMC_DETACH_CNF消息*/ NAS_EMM_SendDetRslt(MMC_LMM_DETACH_RSLT_SUCCESS); /* IMSI DETACH后释放资源 */ NAS_LMM_ImsiDetachReleaseResource(); /*向MRRC发送NAS_EMM_MRRC_REL_REQ消息*/ NAS_EMM_RelReq(NAS_LMM_NOT_BARRED); return NAS_LMM_MSG_HANDLED; }
VOS_UINT32 NAS_EMM_MsDrgInitSsWtCnDetCnfMsgAppAttachReq( 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_WARN("NAS_EMM_MsDrgInitSsWtCnDetCnfMsgAppAttachReq: Receive Message APP ATTACH."); /*消息内容检查,若有错,打印并退出*/ if (NAS_EMM_PARA_INVALID == NAS_EMM_AppAttachReqMsgChk(pRcvEmmMsg)) { NAS_EMM_ATTACH_LOG_ERR("NAS_EMM_MsDrgInitSsWtCnDetCnfMsgAppAttachReq: NAS_EMM_CN_ATTACH_REQ_STRU PARA ERR!"); return NAS_LMM_ERR_CODE_PARA_INVALID; } /*停止定时器T3421*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3421); /*向ESM发送ID_EMM_ESM_STATUS_IND消息*/ NAS_EMM_EsmSendStatResult( EMM_ESM_ATTACH_STATUS_DETACHED); /*给MMC回复Detach Cnf */ NAS_EMM_SendDetRslt(MMC_LMM_DETACH_RSLT_SUCCESS); /* lihong00150010 emergency tau&service begin */ if (VOS_TRUE == NAS_EMM_GLO_AD_GetUsimPullOutFlag()) {/* lihong00150010 emergency tau&service end */ NAS_EMM_DETACH_LOG_NORM("NAS_EMM_MsDrgInitSsWtCnDetCnfMsgAppAttachReq: No USIM"); NAS_EMM_ProcLocalNoUsim(); } else { /* 本地DETACH释放资源:动态内存、赋初值 */ NAS_LMM_DeregReleaseResource(); NAS_EMM_AdStateConvert( EMM_MS_DEREG, EMM_SS_DEREG_NORMAL_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); } /*保存APP参数*/ NAS_EMM_SaveAppMsgPara(pRcvEmmMsg->ulMsgId,pRcvEmmMsg->ulOpId); /*重新保存用户发起ATTACH的请求类型*/ NAS_EMM_GLO_SetAttReqType(pRcvEmmMsg->ulAttachType); /*CS域的attach请求直接返回失败 */ if (MMC_LMM_ATT_REQ_TYPE_CS_ONLY == pRcvEmmMsg->ulAttachType) { NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_FAILURE); } /*向MRRC发送NAS_EMM_MRRC_REL_REQ消息*/ NAS_EMM_RelReq( NAS_LMM_NOT_BARRED); return NAS_LMM_MSG_HANDLED; }
VOS_UINT32 NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgT3421Exp ( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { /*打印进入该函数*/ NAS_EMM_DETACH_LOG2_INFO("NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgT3421Exp", ulMsgId, pMsgStru); /*检查状态是否匹配,若不匹配,退出*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_REG,EMM_SS_REG_IMSI_DETACH_WATI_CN_DETACH_CNF)) { /*打印出错信息*/ NAS_EMM_DETACH_LOG_WARN("NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgT3421Exp: STATE ERR!"); return NAS_LMM_MSG_DISCARD; } /*Detach attempt counter加1*/ NAS_EMM_GLO_AD_GetDetAtmpCnt()++; /*判断Detach attempt counter,分为小于5和大于等于5处理*/ if (NAS_EMM_GLO_AD_GetDetAtmpCnt() < 5) { /*发送DETACH REQUEST消息*/ NAS_EMM_SendImsiDetachReqMo(); return NAS_LMM_MSG_HANDLED; } NAS_EMM_DETACH_LOG_INFO("NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgT3421Exp 5 times"); NAS_EMM_GLO_AD_GetDetAtmpCnt() = 0; /* 设置注册域为PS */ NAS_LMM_SetEmmInfoRegDomain(NAS_LMM_REG_DOMAIN_PS); /* 如果当前是数据连接态,则直接转到REG+NORMAL_SERVIC态,否则待释放RRC链路 后再转到REG+NORMAL_SERVIC态 */ if (NAS_EMM_CONN_DATA == NAS_EMM_GetConnState()) { NAS_EMM_AdStateConvert( EMM_MS_REG, EMM_SS_REG_NORMAL_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); /*向MMC发送本地LMM_MMC_DETACH_IND消息*/ NAS_EMM_SendDetRslt(MMC_LMM_DETACH_RSLT_SUCCESS); /* IMSI DETACH后释放资源 */ NAS_LMM_ImsiDetachReleaseResource(); return NAS_LMM_MSG_HANDLED; } NAS_EMM_AdStateConvert( EMM_MS_REG, EMM_SS_REG_NORMAL_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); NAS_EMM_SendDetRslt(MMC_LMM_DETACH_RSLT_SUCCESS); /*向MRRC发送NAS_EMM_MRRC_REL_REQ消息*/ NAS_EMM_RelReq( NAS_LMM_NOT_BARRED); return NAS_LMM_MSG_HANDLED; }
VOS_UINT32 NAS_EMM_MsDrgInitSsWtCnDetCnfMsgIntraConnectFailInd( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru) { NAS_EMM_MRRC_CONNECT_FAIL_IND_STRU *pMrrcConnectFailInd = NAS_EMM_NULL_PTR; NAS_EMM_DETACH_LOG2_INFO("NAS_EMM_MsDrgInitSsWtCnDetCnfMsgIntraConnectFailInd is entered", ulMsgId, pMsgStru); pMrrcConnectFailInd = (NAS_EMM_MRRC_CONNECT_FAIL_IND_STRU *)pMsgStru; /*check the input ptr*/ if (NAS_EMM_NULL_PTR == pMsgStru) { NAS_EMM_DETACH_LOG_WARN("NAS_EMM_MsDrgInitSsWtCnDetCnfMsgIntraConnectFailInd: NULL PTR!"); return NAS_LMM_MSG_DISCARD; } /*check current state*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_DEREG_INIT,EMM_SS_DETACH_WAIT_CN_DETACH_CNF)) { NAS_EMM_DETACH_LOG_WARN("NAS_EMM_MsDrgInitSsWtCnDetCnfMsgIntraConnectFailInd: STATE ERR!"); return NAS_LMM_MSG_DISCARD; } /*停止定时器T3421*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3421); /*向ESM发送ID_EMM_ESM_STATUS_IND消息*/ NAS_EMM_EsmSendStatResult( EMM_ESM_ATTACH_STATUS_DETACHED); /* lihong00150010 emergency tau&service begin */ if (VOS_TRUE != NAS_EMM_GLO_AD_GetUsimPullOutFlag()) {/* lihong00150010 emergency tau&service end */ /*修改状态:进入主状态DEREG子状态DEREG_NORMAL_SERVICE*/ NAS_EMM_AdStateConvert( EMM_MS_DEREG, EMM_SS_DEREG_NORMAL_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); } else { /*NAS_EMM_ProcLocalNoUsim();*/ /*修改状态:进入主状态DEREG子状态DEREG_NORMAL_SERVICE*/ NAS_EMM_AdStateConvert( EMM_MS_DEREG, EMM_SS_DEREG_NO_IMSI, TI_NAS_EMM_STATE_NO_TIMER); /* 给MMC回复LMM_MMC_USIM_STATUS_CNF */ NAS_EMM_SendMmcUsimStatusCnf(); /* lihong00150010 emergency tau&service begin */ /* 清除拔卡标识 */ NAS_EMM_GLO_AD_GetUsimPullOutFlag() = VOS_FALSE; /* lihong00150010 emergency tau&service end */ } if ((LRRC_EST_ACCESS_BARRED_MO_SIGNAL == pMrrcConnectFailInd->enEstResult) || (LRRC_EST_ACCESS_BARRED_ALL == pMrrcConnectFailInd->enEstResult)) { /*向MMC发送LMM_MMC_DETACH_CNF消息*/ /*NAS_EMM_AppSendDetCnf(MMC_LMM_DETACH_RSLT_ACCESS_BARED);*/ NAS_EMM_SendDetRslt(MMC_LMM_DETACH_RSLT_ACCESS_BARED); } else { /*向MMC发送本地LMM_MMC_DETACH_IND消息*/ /*NAS_EMM_MmcSendDetIndLocal();*/ NAS_EMM_SendDetRslt(MMC_LMM_DETACH_RSLT_SUCCESS); } /* 本地DETACH释放资源:动态内存、赋初值 */ NAS_LMM_DeregReleaseResource(); /*send INTRA_CONN2IDLE_REQ,更新连接状态*/ NAS_EMM_CommProcConn2Ilde(); return NAS_LMM_MSG_HANDLED; }