VOS_UINT32 NAS_EMM_IsSmsNotRetransmitConditionSatisfied ( LMM_SMS_ERR_CAUSE_ENUM_UINT32 *penErrCause ) { NAS_LMM_UE_OPERATION_MODE_ENUM_UINT32 enUeOperationMode = NAS_LMM_UE_MODE_BUTT; enUeOperationMode = NAS_LMM_GetEmmInfoUeOperationMode(); /* PS ONLY */ if ( (NAS_LMM_UE_PS_MODE_1 == enUeOperationMode) ||(NAS_LMM_UE_PS_MODE_2 == enUeOperationMode) ) { *penErrCause = LMM_SMS_ERR_CAUSE_UE_MODE_PS_ONLY; return NAS_EMM_YES; } /* #2,CS域卡无效 */ if ( NAS_EMM_REJ_YES == NAS_LMM_GetEmmInfoRejCause2Flag() ) { *penErrCause = LMM_SMS_ERR_CAUSE_USIM_CS_INVALID; return NAS_EMM_YES; } /* #18,CS域不可用 */ if ( NAS_EMM_REJ_YES == NAS_EMMC_GetRejCause18Flag() ) { *penErrCause = LMM_SMS_ERR_CAUSE_CS_SER_NOT_AVAILABLE; return NAS_EMM_YES; } /*PC REPLAY MODIFY BY LEILI BEGIN*/ /* CS域不允许注册 */ if ( NAS_EMM_AUTO_ATTACH_NOT_ALLOW == NAS_EMM_GetCsAttachAllowFlg() ) { NAS_EMM_PUBU_LOG_NORM("NAS_EMM_IsSmsNotRetransmitConditionSatisfied: Cs attach not allowed!"); *penErrCause = LMM_SMS_ERR_CAUSE_CS_ATTACH_NOT_ALLOWED; return NAS_EMM_YES; } /* PS域不允许注册 */ if ( NAS_EMM_AUTO_ATTACH_NOT_ALLOW == NAS_EMM_GetPsAttachAllowFlg() ) { NAS_EMM_PUBU_LOG_NORM("NAS_EMM_IsSmsNotRetransmitConditionSatisfied: Ps attach not allowed!"); *penErrCause = LMM_SMS_ERR_CAUSE_PS_ATTACH_NOT_ALLOWED; return NAS_EMM_YES; } /*PC REPLAY MODIFY BY LEILI END*/ return NAS_EMM_NO; }
/***************************************************************************** Function Name : NAS_EMM_PreProcMsgDlNasTransport Description : 预处理解码后的下行NAS透传消息 Input : None Output : None Return : VOS_UINT32 History : 1.sunbing 49683 2011-11-22 Draft Enact *****************************************************************************/ VOS_UINT32 NAS_EMM_PreProcMsgDlNasTransport( NAS_EMM_CN_MSG_STRU_UNION * pCnMsg ) { NAS_EMM_CN_DOWNLINK_NAS_TRANSPORT_STRU *pTmpRcvMsg = NAS_EMM_NULL_PTR; NAS_EMM_PUBU_LOG_NORM("NAS_EMM_PreProcMsgDlNasTransport is entered."); pTmpRcvMsg = (NAS_EMM_CN_DOWNLINK_NAS_TRANSPORT_STRU*)pCnMsg; NAS_LMM_SndLmmSmsDataInd(pTmpRcvMsg->aucDownlinkNasTransportMsg, pTmpRcvMsg->ucDownlinkNasTransportLen); return NAS_LMM_MSG_HANDLED; }
/******************************************************************************* Module : Function : NAS_EMM_CompCnUplinkNasTransportMsg Input : pMsg :SMS透传过来的消息 pulIndex : 既作输入,也作输出 Output :pucCnNasMsg : 指向 LRRC_LNAS_MSG_STRU.aucNasMsg NOTE : Return :VOS_VOID History : 1. FTY 2011.11.15 新规作成 *******************************************************************************/ VOS_VOID NAS_EMM_SMS_CompCnUplinkNasTransportMsg (VOS_UINT8 *pucCnNasMsg, VOS_UINT32 *pulIndex, const LMM_SMS_MSG_STRU * pSmsMsg) { VOS_UINT32 ulIndex = NAS_LMM_NULL; NAS_EMM_PUBU_LOG_NORM("NAS_EMM_SMS_CompCnUplinkNasTransportMsg enter!"); /* 填充 Protocol Discriminator + Security header type */ pucCnNasMsg[ulIndex++] = EMM_CN_MSG_PD_EMM; /* 填充UpLink nas transort message identity */ pucCnNasMsg[ulIndex++] = NAS_EMM_CN_MT_UPLINK_NAS_TRANSPORT; /*填充NAS msg*/ pucCnNasMsg[ulIndex++] = (VOS_UINT8)pSmsMsg->ulSmsMsgSize; NAS_LMM_MEM_CPY(&(pucCnNasMsg[ulIndex]), pSmsMsg->aucSmsMsg, pSmsMsg->ulSmsMsgSize); ulIndex += pSmsMsg->ulSmsMsgSize; *pulIndex += ulIndex; }
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; }