VOS_VOID NAS_EMM_MmSendCsfbSerEndInd ( MM_LMM_CSFB_SERVICE_RSLT_ENUM_UINT32 enCsfbSrvRslt, NAS_EMM_CN_CAUSE_ENUM_UINT8 ucEMMCnCause ) { LMM_MM_CSFB_SERVICE_END_IND_STRU *pstMmCsfbSerEndInd = VOS_NULL_PTR; /* 如果已经收到ABORT消息,则不用通知MM终止CSFB流程 */ if (NAS_EMM_CSFB_ABORT_FLAG_VALID == NAS_EMM_SER_GetEmmSerCsfbAbortFlag()) { NAS_EMM_SER_LOG_NORM("NAS_EMM_MmSendCsfbSerEndInd:CSFB is already aborted!"); return ; } /* 申请DOPRA消息 */ pstMmCsfbSerEndInd = (VOS_VOID *) NAS_LMM_GetLmmMmcMsgBuf(sizeof(LMM_MM_CSFB_SERVICE_END_IND_STRU)); if (NAS_LMM_NULL_PTR == pstMmCsfbSerEndInd) { /* 打印异常,ERROR_LEVEL */ NAS_EMM_SER_LOG_ERR("NAS_EMM_MmSendCsfbSerEndInd: MSG ALLOC ERROR!!!"); return ; } /* 清空 */ NAS_LMM_MEM_SET(pstMmCsfbSerEndInd, 0, sizeof(LMM_MM_CSFB_SERVICE_END_IND_STRU)); /* 打包VOS消息头 */ EMM_PUBU_COMP_MM_MSG_HEADER((pstMmCsfbSerEndInd), NAS_EMM_GET_MSG_LENGTH_NO_HEADER(LMM_MM_CSFB_SERVICE_END_IND_STRU)); /* 填充消息ID */ pstMmCsfbSerEndInd->ulMsgId = ID_LMM_MM_CSFB_SERVICE_END_IND; /* 填充消息体 */ pstMmCsfbSerEndInd->ulOpId = NAS_EMM_OPID_MM; pstMmCsfbSerEndInd->enCsfbSrvRslt = enCsfbSrvRslt; pstMmCsfbSerEndInd->ulCnCause = ucEMMCnCause; /* 发送DOPRA消息 */ NAS_LMM_SendLmmMmcMsg((VOS_VOID*)pstMmCsfbSerEndInd); return; }
VOS_VOID NAS_EMM_MmSendCsfbSerPaingInd ( NAS_EMM_MT_CSFB_TYPE_ENUM_UINT8 enMtCsfbType, const NAS_EMM_CN_CS_SER_NOTIFICAIOTN_STRU *pstCsSerNotification, LRRC_LNAS_PAGING_UE_ID_ENUM_UINT32 enPagingUeId ) { LMM_MM_CSFB_SERVICE_PAGING_IND_STRU *pstMmCsfbSerPaingInd = VOS_NULL_PTR; /* 申请DOPRA消息 */ pstMmCsfbSerPaingInd = (VOS_VOID *) NAS_LMM_GetLmmMmcMsgBuf(sizeof(LMM_MM_CSFB_SERVICE_PAGING_IND_STRU)); if (NAS_LMM_NULL_PTR == pstMmCsfbSerPaingInd) { /* 打印异常,ERROR_LEVEL */ NAS_EMM_SER_LOG_ERR("NAS_EMM_MmSendCsfbSerPaingInd: MSG ALLOC ERROR!!!"); return ; } /* 清空 */ NAS_LMM_MEM_SET(pstMmCsfbSerPaingInd, 0, sizeof(LMM_MM_CSFB_SERVICE_PAGING_IND_STRU)); /* 打包VOS消息头 */ EMM_PUBU_COMP_MM_MSG_HEADER((pstMmCsfbSerPaingInd), NAS_EMM_GET_MSG_LENGTH_NO_HEADER(LMM_MM_CSFB_SERVICE_PAGING_IND_STRU)); /* 填充消息ID */ pstMmCsfbSerPaingInd->ulMsgId = ID_LMM_MM_CSFB_SERVICE_PAGING_IND; /* 填充消息体 */ pstMmCsfbSerPaingInd->ulOpId = NAS_EMM_OPID_MM; if (NAS_EMM_MT_CSFB_TYPE_CS_SER_NOTIFICATION == enMtCsfbType) { /* 填充CLI */ pstMmCsfbSerPaingInd->bitOpCli = pstCsSerNotification->bitOpCli; pstMmCsfbSerPaingInd->ucCliLength = pstCsSerNotification->ucCliLength; NAS_LMM_MEM_CPY( pstMmCsfbSerPaingInd->aucCliValue, pstCsSerNotification->aucCliValue, pstCsSerNotification->ucCliLength); /* 填充SS CODE */ pstMmCsfbSerPaingInd->bitOpSsCodeValue = pstCsSerNotification->bitOpSsCode; pstMmCsfbSerPaingInd->ucSsCodeValue = pstCsSerNotification->ucSsCodeValue; if (0 == pstCsSerNotification->ucPagingIdenity) { pstMmCsfbSerPaingInd->enPagingUeId = LMM_MM_PAGING_IND_UE_ID_IMSI; } else { pstMmCsfbSerPaingInd->enPagingUeId = LMM_MM_PAGING_IND_UE_ID_TMSI; } } else { if(LRRC_LNAS_S_TMSI_LTE == enPagingUeId) { pstMmCsfbSerPaingInd->enPagingUeId = LMM_MM_PAGING_IND_UE_ID_S_TMSI; } else if(LRRC_LNAS_IMSI_LTE == enPagingUeId) { pstMmCsfbSerPaingInd->enPagingUeId = LMM_MM_PAGING_IND_UE_ID_IMSI; } else { } } /* 发送DOPRA消息 */ NAS_LMM_SendLmmMmcMsg((VOS_VOID*)pstMmCsfbSerPaingInd); return; }
VOS_VOID NAS_EMM_MmcSendSerResultIndOtherType ( MMC_LMM_SERVICE_RSLT_ENUM_UINT32 ulSerRslt ) { LMM_MMC_SERVICE_RESULT_IND_STRU *pstRsltInd = NAS_EMM_NULL_PTR; /* 打印进入该函数*/ NAS_EMM_SER_LOG_INFO("NAS_EMM_MmcSendSerResultIndOtherType is entered."); /* 申请MMC内部消息*/ pstRsltInd = (VOS_VOID *)NAS_LMM_GetLmmMmcMsgBuf(sizeof(LMM_MMC_SERVICE_RESULT_IND_STRU)); if(NAS_EMM_NULL_PTR == pstRsltInd) { NAS_EMM_SER_LOG_ERR("NAS_EMM_MmcSendSerResultIndOtherType: MSG ALLOC ERR !!"); return; } NAS_LMM_MEM_SET(pstRsltInd, 0, sizeof(LMM_MMC_SERVICE_RESULT_IND_STRU)); /* 填充给RRC的DOPRA头 */ EMM_PUBU_COMP_MMC_MSG_HEADER( pstRsltInd, sizeof(LMM_MMC_SERVICE_RESULT_IND_STRU) - EMM_LEN_VOS_MSG_HEADER); /*填充OPID*/ /* 填充消息ID */ pstRsltInd->ulMsgId = ID_LMM_MMC_SERVICE_RESULT_IND; /* 填充消息内容----SERVCIE结果 */ if ((MMC_LMM_SERVICE_RSLT_FAILURE== ulSerRslt) || (MMC_LMM_SERVICE_RSLT_ACCESS_BARED == ulSerRslt) || (MMC_LMM_SERVICE_RSLT_AUTH_REJ == ulSerRslt)) { NAS_EMM_SER_LOG1_NORM("NAS_EMM_MmcSendSerResultIndOtherType: ulSerRslt = ", ulSerRslt); pstRsltInd->ulServiceRst = ulSerRslt; } else { NAS_EMM_SER_LOG_WARN("NAS_EMM_MmcSendSerResultIndOtherType: ulSerRslt is err! "); } /*填充消息内容----请求类型*/ /* 如果ARBOT标识无效,则是CSFB流程,则填写请求类型 */ if (NAS_EMM_CSFB_ABORT_FLAG_VALID != NAS_EMM_SER_GetEmmSerCsfbAbortFlag()) { if (NAS_EMM_SER_START_CAUSE_MO_CSFB_REQ == NAS_EMM_SER_GetEmmSERStartCause()) { pstRsltInd->bitOpReqType = NAS_EMM_BIT_SLCT; pstRsltInd->ulReqType = MMC_LMM_SERVICE_MO_CSFB_1XCSFB; } else if (NAS_EMM_SER_START_CAUSE_MT_CSFB_REQ == NAS_EMM_SER_GetEmmSERStartCause()) { pstRsltInd->bitOpReqType = NAS_EMM_BIT_SLCT; pstRsltInd->ulReqType = MMC_LMM_SERVICR_MT_CSFB_1XCSFB; } else if (NAS_EMM_SER_START_CAUSE_MO_EMERGENCY_CSFB_REQ == NAS_EMM_SER_GetEmmSERStartCause()) { pstRsltInd->bitOpReqType = NAS_EMM_BIT_SLCT; pstRsltInd->ulReqType = MMC_LMM_SERVICR_MO_CSFB_1XCSFB_EMERGENCY; } else { /* 非CSFB类型不填写ulReqType */ } } /* 发送LMM_MMC_SERVICE_RESULT_IND消息 */ NAS_LMM_SendLmmMmcMsg( pstRsltInd); return; }
VOS_VOID NAS_EMM_MmcSendSerResultIndRej ( NAS_EMM_CN_CAUSE_ENUM_UINT8 ucCnCause ) { LMM_MMC_SERVICE_RESULT_IND_STRU *pstRsltInd = NAS_EMM_NULL_PTR; /* 打印进入该函数, INFO_LEVEL */ NAS_EMM_SER_LOG_INFO( "NAS_EMM_MmcSendSerResultIndRej is entered."); /* 申请MMC内部消息 */ pstRsltInd = (VOS_VOID *)NAS_LMM_GetLmmMmcMsgBuf(sizeof(LMM_MMC_SERVICE_RESULT_IND_STRU)); if(NAS_EMM_NULL_PTR == pstRsltInd) { NAS_EMM_SER_LOG_ERR( "NAS_EMM_SER_SendMmcActionResultReq: MSG ALLOC ERR !!"); return; } NAS_LMM_MEM_SET(pstRsltInd, 0, sizeof(LMM_MMC_SERVICE_RESULT_IND_STRU)); /* 填充给RRC的DOPRA头 */ EMM_PUBU_COMP_MMC_MSG_HEADER( pstRsltInd, sizeof(LMM_MMC_SERVICE_RESULT_IND_STRU) - EMM_LEN_VOS_MSG_HEADER); /*填充OPID*/ /* 填充消息ID */ pstRsltInd->ulMsgId = ID_LMM_MMC_SERVICE_RESULT_IND; /* 填充消息内容----SERVCIE结果 */ pstRsltInd->ulServiceRst = MMC_LMM_SERVICE_RSLT_CN_REJ; /*填充消息内容----拒绝原因值*/ pstRsltInd->bitOpCnCause = NAS_EMM_BIT_SLCT; pstRsltInd->ucCnCause = ucCnCause; /*填充消息内容----请求类型*/ /* 如果ARBOT标识无效,则是CSFB流程,则填写请求类型 */ if (NAS_EMM_CSFB_ABORT_FLAG_VALID != NAS_EMM_SER_GetEmmSerCsfbAbortFlag()) { if (NAS_EMM_SER_START_CAUSE_MO_CSFB_REQ == NAS_EMM_SER_GetEmmSERStartCause()) { pstRsltInd->bitOpReqType = NAS_EMM_BIT_SLCT; pstRsltInd->ulReqType = MMC_LMM_SERVICE_MO_CSFB_1XCSFB; } else if (NAS_EMM_SER_START_CAUSE_MT_CSFB_REQ == NAS_EMM_SER_GetEmmSERStartCause()) { pstRsltInd->bitOpReqType = NAS_EMM_BIT_SLCT; pstRsltInd->ulReqType = MMC_LMM_SERVICR_MT_CSFB_1XCSFB; } else if (NAS_EMM_SER_START_CAUSE_MO_EMERGENCY_CSFB_REQ == NAS_EMM_SER_GetEmmSERStartCause()) { pstRsltInd->bitOpReqType = NAS_EMM_BIT_SLCT; pstRsltInd->ulReqType = MMC_LMM_SERVICR_MO_CSFB_1XCSFB_EMERGENCY; } else { /* 非CSFB类型不填写ulReqType */ } } /* 发送LMM_MMC_SERVICE_RESULT_IND消息 */ NAS_LMM_SendLmmMmcMsg( pstRsltInd); return; }
VOS_VOID NAS_EMM_SndMmcSimAuthFailInd(LMM_MMC_SIM_AUTH_FAIL_ENUM_UINT16 enSimAuthFailValue) { LMM_MMC_SIM_AUTH_FAIL_IND_STRU *pstSimAuthFailInd = NAS_EMM_NULL_PTR; VOS_UINT32 ulCompStaOfStackBase; /*栈底状态*/ NAS_LMM_MAIN_STATE_ENUM_UINT16 enMainState; /*主状态*/ /* 打印进入该函数, INFO_LEVEL */ NAS_EMM_SECU_LOG_INFO( "NAS_EMM_SndMmcSimAuthFailInd is entered."); /* 申请DOPRA消息 */ pstSimAuthFailInd = (VOS_VOID *)NAS_LMM_GetLmmMmcMsgBuf(sizeof(LMM_MMC_SIM_AUTH_FAIL_IND_STRU)); if(NAS_EMM_NULL_PTR == pstSimAuthFailInd) { NAS_EMM_SECU_LOG_ERR( "NAS_EMM_SndMmcSimAuthFailInd: MSG ALLOC ERR !!"); return; } /* 填写DOPRA消息头 */ /*EMM_PUBU_COMP_MMC_MSG_HEADER(pstSimAuthFailInd, sizeof(LMM_MMC_SIM_AUTH_FAIL_IND_STRU) - EMM_LEN_VOS_MSG_HEADER);*/ EMM_PUBU_COMP_MMC_MSG_HEADER(pstSimAuthFailInd, NAS_EMM_GET_MSG_LENGTH_NO_HEADER(LMM_MMC_SIM_AUTH_FAIL_IND_STRU)); /* 填写消息ID标识 */ pstSimAuthFailInd->ulMsgId = ID_LMM_MMC_SIM_AUTH_FAIL_IND; pstSimAuthFailInd->enSimAuthFailValue = enSimAuthFailValue; pstSimAuthFailInd->enSrvDomain = LMM_MMC_SRV_DOMAIN_PS; enMainState = NAS_LMM_GetEmmCurFsmMS(); /*卡鉴权失败时所处service domain默认为PS,下列情况下为CS_PS*/ if ((EMM_MS_REG_INIT == enMainState && MMC_LMM_ATT_REQ_TYPE_CS_PS == NAS_EMM_GLO_GetAttReqType()) || (EMM_MS_TAU_INIT == enMainState && NAS_EMM_CN_TAU_TYPE_COMBINED_TA_LA_UPDATING == NAS_EMM_TAU_GetTAUtype()) || (EMM_MS_TAU_INIT == enMainState && NAS_EMM_CN_TAU_TYPE_COMBINED_TA_LA_WITH_IMSI == NAS_EMM_TAU_GetTAUtype())) { pstSimAuthFailInd->enSrvDomain = LMM_MMC_SRV_DOMAIN_CS_PS; NAS_EMM_SECU_LOG_INFO( "attach or tau state send mmc msg"); NAS_LMM_SendLmmMmcMsg((VOS_VOID*)pstSimAuthFailInd); /*NAS_LMM_SEND_MSG(pstSimAuthFailInd);*/ return; } /*如果是鉴权压栈的情况,栈底状态为attach或tau时*/ ulCompStaOfStackBase = NAS_LMM_FSM_GetStaAtStackBase(NAS_LMM_PARALLEL_FSM_EMM); if ((EMM_MS_REG_INIT == ulCompStaOfStackBase && MMC_LMM_ATT_REQ_TYPE_CS_PS == NAS_EMM_GLO_GetAttReqType()) || (EMM_MS_TAU_INIT == ulCompStaOfStackBase && NAS_EMM_CN_TAU_TYPE_COMBINED_TA_LA_UPDATING == NAS_EMM_TAU_GetTAUtype()) || (EMM_MS_TAU_INIT == ulCompStaOfStackBase && NAS_EMM_CN_TAU_TYPE_COMBINED_TA_LA_WITH_IMSI == NAS_EMM_TAU_GetTAUtype())) { pstSimAuthFailInd->enSrvDomain = LMM_MMC_SRV_DOMAIN_CS_PS; NAS_EMM_SECU_LOG_INFO( "stack bottom attach or tau state send mmc msg"); NAS_LMM_SendLmmMmcMsg((VOS_VOID*)pstSimAuthFailInd); /*NAS_LMM_SEND_MSG(pstSimAuthFailInd);*/ return; } }