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_MsDrgSsNoCellAvailMsgAppAttachReq(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_MsDrgSsNoCellAvailMsgAppAttachReq is entered"); /*检查状态是否匹配,若不匹配,退出*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_DEREG,EMM_SS_DEREG_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_MsDrgSsNoCellAvailMsgAppAttachReq: MMC_LMM_ATTACH_REQ_STRU PARA ERR!"); return NAS_LMM_ERR_CODE_PARA_INVALID; } /*保存APP参数*/ NAS_EMM_SaveAppMsgPara(pRcvEmmMsg->ulMsgId,pRcvEmmMsg->ulOpId); /*向MMC发送ATTACH失败*/ NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_FAILURE); /*返回NAS_LMM_MSG_HANDLED,不返回DISCARD,避免MMC再处理一遍*/ NAS_EMM_ATTACH_LOG_INFO("NAS_EMM_MsDrgSsNoCellAvailMsgAppAttachReq: handled and discard out of NAS."); return NAS_LMM_MSG_HANDLED; }
VOS_UINT32 NAS_EMM_MsDrgSsAttNeedMsgAppAttachReq(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_MsDrgSsAttNeedMsgAppAttachReq is entered"); /*检查状态是否匹配,若不匹配,退出*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_DEREG,EMM_SS_DEREG_ATTACH_NEEDED)) { /*打印出错信息*/ 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_MsDrgSsAttNeedMsgAppAttachReq: MMC_LMM_ATTACH_REQ_STRU PARA ERR!"); return NAS_LMM_ERR_CODE_PARA_INVALID; } /*保存APP参数*/ NAS_EMM_SaveAppMsgPara(pRcvEmmMsg->ulMsgId,pRcvEmmMsg->ulOpId); /*向MMC发送ATTACH失败*/ NAS_EMM_AppSendAttRstDefaultReqType(MMC_LMM_ATT_RSLT_ACCESS_BAR); /* ATTACH NEEDED 状态下,等3402超时后,会自动发起ATTACH,不必由APP 的ATTACH REQ触发ATTACH流程; 返回NAS_LMM_MSG_HANDLED,不返回DISCARD,避免MMC再处理一遍*/ NAS_EMM_ATTACH_LOG_INFO("NAS_EMM_MsDrgSsAttemptToAttMsgAppAttachReq: handled and discard out of NAS."); return NAS_LMM_MSG_HANDLED; }
VOS_UINT32 NAS_EMM_MsDrgSsNmlSrvMsgAppAttachReq( 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_INFO("NAS_EMM_MsDrgSsNmlSrvMsgAppAttachReq is entered"); /*检查状态是否匹配,若不匹配,退出*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_DEREG,EMM_SS_DEREG_NORMAL_SERVICE)) { /*打印出错信息*/ NAS_EMM_ATTACH_LOG_WARN("NAS_EMM_MsDrgSsNmlSrvMsgAppAttachReq: STATE ERR!"); return NAS_LMM_MSG_DISCARD; } /*消息内容检查,若有错,打印并退出*/ if (NAS_EMM_PARA_INVALID == NAS_EMM_AppAttachReqMsgChk(pRcvEmmMsg)) { NAS_EMM_ATTACH_LOG_ERR("NAS_EMM_MsDrgSsNmlSrvMsgAppAttachReq: NAS_EMM_CN_ATTACH_REQ_STRU PARA ERR!"); return NAS_LMM_ERR_CODE_PARA_INVALID; } /*保存APP参数*/ NAS_EMM_SaveAppMsgPara(pRcvEmmMsg->ulMsgId,pRcvEmmMsg->ulOpId); /*保存触发ATTACH的原因*/ NAS_EMM_GLO_AD_GetAttCau() = EMM_ATTACH_CAUSE_APP; /* 用户请求ATTACH类型为IMSI,UE模式为PS,则直接回复FAILURE , 用户请求ATTACH类型为IMSI,UE模式为CS_PS,此时注册状态为NULL,则直接回复FAILURE , 综上,dereg.normalserive状态下CS的ATTACH都直接回复失败 */ if (MMC_LMM_ATT_REQ_TYPE_CS_ONLY == pRcvEmmMsg->ulAttachType) { NAS_EMM_MmcSendAttCnf(MMC_LMM_ATT_RSLT_FAILURE); } /*用户请求ATTACH类型为PS或者CS_PS,直接发起ATTACH,填充ATTACH消息时判断ATTACH类型*/ else { /*向ESM发送ID_EMM_ESM_PDN_CON_IND消息*/ NAS_EMM_EsmSendPdnConnInd( NAS_EMM_DEFAULT_CID); /*启动定时器TI_NAS_EMM_WAIT_ESM_PDN_RSP*/ NAS_LMM_StartStateTimer( TI_NAS_EMM_WAIT_ESM_PDN_RSP); /*修改状态:进入主状态REG_INIT子状态ATTACH_WAIT_ESM_PDN_RSP*/ NAS_EMM_AdStateConvert( EMM_MS_REG_INIT, EMM_SS_ATTACH_WAIT_ESM_PDN_RSP, TI_NAS_EMM_WAIT_ESM_PDN_RSP); } return NAS_LMM_MSG_HANDLED; }
VOS_VOID NAS_EMM_SendMsgEmmStatus( VOS_UINT8 ucRes ) { NAS_EMM_MRRC_DATA_REQ_STRU *pIntraMsg; VOS_UINT32 ulDataReqMsgLenNoHeader; NAS_MSG_STRU *pstNasMsg; VOS_UINT32 ulIndex =0; NAS_EMM_ATTACH_LOG_INFO("Enter NAS_EMM_SendMsgEmmStatus,Status MSG LEN"); /*申请消息内存*/ pIntraMsg = (VOS_VOID *) NAS_LMM_MEM_ALLOC(NAS_EMM_INTRA_MSG_MAX_SIZE); /*判断申请结果,若失败退出*/ if (NAS_EMM_NULL_PTR == pIntraMsg) { return; } /* xiongxianghui00253310 add memset 2013-11-26 begin */ NAS_LMM_MEM_SET(pIntraMsg, 0, NAS_EMM_INTRA_MSG_MAX_SIZE); /* xiongxianghui00253310 add memset 2013-11-26 end */ /*构造EmmStatus消息*/ NAS_EMM_CompCnEmmStatus( &(pIntraMsg->stNasMsg),&ulIndex,ucRes); ulDataReqMsgLenNoHeader = NAS_EMM_CountMrrcDataReqLen(ulIndex); if ( NAS_EMM_INTRA_MSG_MAX_SIZE < ulDataReqMsgLenNoHeader ) { /* 打印错误信息 */ NAS_LMM_PUBM_LOG_ERR("NAS_EMM_SendMsgEmmStatus, Size error"); NAS_LMM_MEM_FREE(pIntraMsg); return ; } /*填充消息头*/ NAS_EMM_INTRA_MSG_HEADER(pIntraMsg, ulDataReqMsgLenNoHeader); /*填充消息ID*/ pIntraMsg->ulMsgId = ID_NAS_LMM_INTRA_MRRC_DATA_REQ; /*填充消息内容*/ pIntraMsg->enEstCaue = LRRC_LNAS_EST_CAUSE_MO_SIGNALLING; pIntraMsg->enCallType = LRRC_LNAS_CALL_TYPE_ORIGINATING_SIGNALLING; pIntraMsg->enEmmMsgType = NAS_EMM_NAS_STATUS; pIntraMsg->enDataCnf = LRRC_LMM_DATA_CNF_NOT_NEED; /*填充消息长度*/ pIntraMsg->stNasMsg.ulNasMsgSize = ulIndex; /*向OM发送空口消息ATTACH COMPLETE*/ pstNasMsg = (NAS_MSG_STRU *)(&(pIntraMsg->stNasMsg)); NAS_LMM_SendOmtAirMsg(NAS_EMM_OMT_AIR_MSG_UP, NAS_EMM_STATUS, pstNasMsg); /*向MRRC发送消息*/ NAS_EMM_SndUplinkNasMsg( pIntraMsg); NAS_LMM_MEM_FREE(pIntraMsg); return; }