/***************************************************************************** Function Name : Nas_Emm_MrrcDataReq Discription : 构造MRRC_DATA_REQ,把上行消息发给mrrc模块转发 Input : GUTI Output : None Return : None History: 1. zangyalan 57968 2008-09-09 Draft Enact *****************************************************************************/ VOS_UINT32 NAS_EMM_GutiMrrcDataReq(VOS_VOID) { NAS_EMM_MRRC_DATA_REQ_STRU *pstMrrcDataReqMsg = NAS_EMM_NULL_PTR; VOS_UINT32 ulLen; /*分配空间,内部消息不应该分配空间,而应获取地址方式*/ /*获取内部消息地址*/ pstMrrcDataReqMsg =(NAS_EMM_MRRC_DATA_REQ_STRU *) NAS_LMM_MEM_ALLOC(NAS_EMM_INTRA_MSG_MAX_SIZE); if(NAS_EMM_NULL_PTR == pstMrrcDataReqMsg) { return NAS_EMM_ERR; } /* 填充CN消息 */ NAS_EMM_CompCnGutiCmp( &(pstMrrcDataReqMsg->stNasMsg)); ulLen = NAS_EMM_CountMrrcDataReqLen(pstMrrcDataReqMsg->stNasMsg.ulNasMsgSize); /*打包VOS消息头,NAS_EMM_MRRC_DATA_REQ_STRU */ NAS_EMM_INTRA_MSG_HEADER(pstMrrcDataReqMsg, ulLen); /*填充消息ID */ pstMrrcDataReqMsg->ulMsgId = ID_NAS_LMM_INTRA_MRRC_DATA_REQ; pstMrrcDataReqMsg->enDataCnf = LRRC_LMM_DATA_CNF_NEED; /*填充消息内容*/ pstMrrcDataReqMsg->enEstCaue = LRRC_LNAS_EST_CAUSE_MO_SIGNALLING; pstMrrcDataReqMsg->enCallType = LRRC_LNAS_CALL_TYPE_ORIGINATING_SIGNALLING; pstMrrcDataReqMsg->enEmmMsgType = NAS_EMM_MSG_GUTI_CMP; /*空口消息上报GUTI REALLOCATION COMPLETE*/ NAS_LMM_SendOmtAirMsg(NAS_EMM_OMT_AIR_MSG_UP, NAS_EMM_GUTI_CMP, (NAS_MSG_STRU*)&(pstMrrcDataReqMsg->stNasMsg)); /*关键事件上报GUTI REALLOCATION COMPLETE*/ NAS_LMM_SendOmtKeyEvent( EMM_OMT_KE_GUTI_CMP); /*发出内部消息MRRC_DATA_REQ*/ NAS_EMM_SndUplinkNasMsg( pstMrrcDataReqMsg); NAS_LMM_MEM_FREE(pstMrrcDataReqMsg); return NAS_EMM_OK; }
VOS_VOID NAS_EMM_MrrcSendDetReqMo() { NAS_EMM_MRRC_DATA_REQ_STRU *pIntraMsg; NAS_MSG_STRU *pstNasMsg; MMC_LMM_MO_DETACH_TYPE_ENUM_UINT32 enDetachType = MMC_LMM_MO_DETACH_TYPE_BUTT; /*打印进入该函数*/ NAS_EMM_DETACH_LOG_INFO("NAS_EMM_MrrcSendDetReqMo is entered"); /*以最小消息长度,申请消息内存,主要是看是否队列有空间*/ pIntraMsg = (VOS_VOID *) NAS_LMM_MEM_ALLOC(NAS_EMM_INTRA_MSG_MAX_SIZE); /*判断申请结果,若失败退出*/ if (NAS_EMM_NULL_PTR == pIntraMsg) { return; } /*构造发向网侧的DETACH REQUEST 消息*/ NAS_EMM_CompCnDetachReqMo(pIntraMsg); /* 如果是联合TAU,则通知MM进入MM IMSI DETACH PENDING状态 */ enDetachType = NAS_EMM_GetDetachType(); if ((NAS_EMM_DETACH_MODE_NOT_SWITCH_OFF == NAS_EMM_GLO_AD_GetDetMode()) && ((MMC_LMM_MO_DET_CS_PS == enDetachType) || (MMC_LMM_MO_DET_CS_ONLY == enDetachType))) { NAS_EMM_SendMmCombinedStartNotifyReq(MM_LMM_COMBINED_DETACH); } /*向OM发送空口消息DETACH REQUEST*/ pstNasMsg = (NAS_MSG_STRU *)(&(pIntraMsg->stNasMsg)); NAS_LMM_SendOmtAirMsg(NAS_EMM_OMT_AIR_MSG_UP, NAS_EMM_DETACH_REQ_MO, pstNasMsg); NAS_LMM_SendOmtKeyEvent( EMM_OMT_KE_DETACH_REQ_MO); /*向MRRC发送DETACH REQUEST 消息*/ NAS_EMM_SndUplinkNasMsg( pIntraMsg); NAS_LMM_MEM_FREE(pIntraMsg); return; }
/******************************************************************************* Module : Function : NAS_LMM_SendMrrcDataReq_SMS Input : pMsg :SMS透传过来的消息 Output : NOTE : Return :VOS_VOID History : 1. FTY 2011.11.14 新规作成 *******************************************************************************/ VOS_VOID NAS_EMM_SMS_SendMrrcDataReq_SmsData( MsgBlock * pMsg) { NAS_EMM_MRRC_DATA_REQ_STRU *pMrrcDataReqMsg = NAS_EMM_NULL_PTR; SMS_LMM_DATA_REQ_STRU *pRcvSmsMsg = NAS_EMM_NULL_PTR ; NAS_LMM_PUBM_LOG_NORM("NAS_EMM_SMS_SendMrrcDataReq_SmsData enter!"); if (NAS_EMM_NULL_PTR == pMsg) { /*打印错误*/ NAS_EMM_PUBU_LOG_ERR("NAS_EMM_SMS_SendMrrcDataReq_SmsData: Input para is invalid!--pMsg is NULL!"); return; } /* 以最短消息长度申请DOPRA消息 */ pMrrcDataReqMsg = (VOS_VOID *)NAS_LMM_MEM_ALLOC(NAS_EMM_INTRA_MSG_MAX_SIZE); if(NAS_EMM_NULL_PTR == pMrrcDataReqMsg) { NAS_EMM_PUBU_LOG_ERR( "NAS_EMM_SMS_SendMrrcDataReq_SmsData: MSG ALLOC ERR !!"); return; } pRcvSmsMsg = (SMS_LMM_DATA_REQ_STRU *)pMsg; /* 构造MRRC_DATA_REQ 消息*/ NAS_EMM_SMS_CompMsgUpLinkNasTransportMrrcDataReqMsg(pMrrcDataReqMsg, &(pRcvSmsMsg->stSmsMsg)); /*空口消息上报 UPLINK NAS TRANSPORT*/ NAS_LMM_SendOmtAirMsg(NAS_EMM_OMT_AIR_MSG_UP, NAS_EMM_UPLINK_NAS_TRANSPORT,(NAS_MSG_STRU *)&(pMrrcDataReqMsg->stNasMsg)); /*关键事件上报 UPLINK NAS TRANSPORT*/ NAS_LMM_SendOmtKeyEvent(EMM_OMT_KE_EMM_UPLINK_NAS_TRANSPORT); /* 发送消息(Send the msg of) MRRC_DATA_REQ(UPLINK NAS TRANSPORT) */ NAS_EMM_SndUplinkNasMsg(pMrrcDataReqMsg); NAS_LMM_MEM_FREE(pMrrcDataReqMsg); return; }
VOS_UINT32 NAS_EMM_MsgPreProcess( NAS_EMM_EVENT_TYPE_ENUM_UINT32 ulEt, MsgBlock *pMsg ) { VOS_UINT32 ulRet; LRRC_LMM_DATA_IND_STRU *pstTmpRcvMsg = NAS_EMM_NULL_PTR; VOS_UINT8 *pRcvMsg = NAS_EMM_NULL_PTR; VOS_UINT8 ucPD = NAS_EMM_NULL; VOS_UINT8 ucAirMsg = NAS_EMM_NULL; VOS_UINT8 ucKeyEvent = NAS_EMM_NULL; NAS_LMM_FSM_STATE_STRU *pstFsmCtx = NAS_LMM_NULL_PTR; ulRet = NAS_LMM_MSG_DISCARD; /*结构化消息,取出消息体*/ pstTmpRcvMsg = (LRRC_LMM_DATA_IND_STRU*)pMsg; pRcvMsg = pstTmpRcvMsg->stNasMsg.aucNasMsg; if(ID_LRRC_LMM_DATA_IND == pstTmpRcvMsg->enMsgId) { /*取出PD*/ ucPD = pRcvMsg[NAS_EMM_NULL]& EMM_CN_MSG_PDMASK; /* 如果是ESM消息直接上报ESM */ if (EMM_CN_MSG_PD_ESM == ucPD) { /* 转发给ESM消息 */ NAS_EMM_EsmSendDataInd((NAS_EMM_CN_MSGCON_STRU *)&(pstTmpRcvMsg->stNasMsg)); return NAS_LMM_MSG_HANDLED; } /* 如果是TC消息直接上报TC */ if (EMM_CN_MSG_PD_TC == ucPD) { /* 转发给TC消息 */ NAS_EMM_TcSendDataInd((NAS_EMM_CN_MSGCON_STRU *)&(pstTmpRcvMsg->stNasMsg)); return NAS_LMM_MSG_HANDLED; } /*空口消息上报*/ if(EMM_CN_MSG_PD_EMM == ucPD) { NAS_LMM_FindAirMsgId(pRcvMsg[NAS_LMM_CN_MSG_MT_POS], &ucAirMsg, &ucKeyEvent); NAS_LMM_SendOmtAirMsg(NAS_EMM_OMT_AIR_MSG_DOWN, ucAirMsg, (NAS_MSG_STRU*)&(pstTmpRcvMsg->stNasMsg)); if (NAS_EMM_NULL != ucKeyEvent) { NAS_LMM_SendOmtKeyEvent(ucKeyEvent); } NAS_LMM_MEM_SET(&g_stCnDecodeMsgStru, 0, sizeof(NAS_EMM_CN_MSG_STRU)); ulRet = NAS_EMM_DecodeCnMsg(pMsg, &g_stCnDecodeMsgStru); if(NAS_EMM_FAIL == ulRet ) {/* 若解码出错,打印报警 */ NAS_LMM_PUBM_LOG1_ERR("NAS_EMM_MsgProcessInFsm, ulEventType = ", ulEt); /*发送EMM STATUS, 接收到不识别的消息 */ NAS_EMM_SendMsgEmmStatus( NAS_LMM_CAUSE_MSG_NONEXIST_NOTIMPLEMENTE ); return NAS_LMM_MSG_HANDLED; } /* 对EMM INFO 和 EMM STATUS 进行处理 */ ulRet = NAS_EMM_PreProcMsgDataInd(); return ulRet; } ulRet = NAS_LMM_MSG_DISCARD; } /* SM异常消息的处理*/ if(ID_EMM_ESM_REL_REQ == pstTmpRcvMsg->enMsgId) { /* 获取状态机地址,用于取状态 */ pstFsmCtx = NAS_LMM_GetCurFsmAddr(NAS_LMM_PARALLEL_FSM_EMM); switch(pstFsmCtx->enMainState) { case EMM_MS_REG: case EMM_MS_REG_INIT: case EMM_MS_TAU_INIT: case EMM_MS_SER_INIT: NAS_EMM_SmRabmAbnarmalProc(); break; default: NAS_LMM_PUBM_LOG1_INFO("current MS discard abnormal MSG=========>>>>", pstTmpRcvMsg->enMsgId); break; } ulRet = NAS_LMM_MSG_HANDLED; } return ulRet; }
VOS_VOID NAS_EMM_SER_SendMrrcDataReq_ExtendedServiceReq(VOS_VOID) { NAS_EMM_MRRC_DATA_REQ_STRU *pMrrcDataReqMsg = NAS_EMM_NULL_PTR; VOS_UINT32 ulDataReqMsgLenNoHeader = NAS_EMM_NULL; VOS_UINT32 ulIndex = NAS_EMM_NULL; NAS_EMM_SER_LOG_INFO("NAS_EMM_SER_SendMrrcDataReq_ExtendedServiceReq is entered."); /*以最小消息长度,申请消息内存,主要是看是否队列有空间*/ pMrrcDataReqMsg = (VOS_VOID *) NAS_LMM_MEM_ALLOC(NAS_EMM_INTRA_MSG_MAX_SIZE); /*判断申请结果,若失败打印错误并退出*/ if (NAS_EMM_NULL_PTR == pMrrcDataReqMsg) { /*打印错误*/ NAS_EMM_ATTACH_LOG_ERR("NAS_EMM_SER_SendMrrcDataReq_ExtendedServiceReq: MSG ALLOC ERR!"); return; } /* 清除CSFB ABORT标识 */ NAS_EMM_SER_SaveEmmSerCsfbAbortFlag(NAS_EMM_CSFB_ABORT_FLAG_INVALID); /*组装EXTENDED SERVICE REQ消息*/ NAS_EMM_CompCnExtendedSerReqMoNasMsg(pMrrcDataReqMsg->stNasMsg.aucNasMsg, &ulIndex); /*内部消息长度计算*/ ulDataReqMsgLenNoHeader = NAS_EMM_CountMrrcDataReqLen(ulIndex); if ( NAS_EMM_INTRA_MSG_MAX_SIZE < ulDataReqMsgLenNoHeader ) { /* 打印错误信息 */ NAS_LMM_PUBM_LOG_ERR("NAS_EMM_SER_SendMrrcDataReq_ExtendedServiceReq, Size error"); NAS_LMM_MEM_FREE(pMrrcDataReqMsg); return ; } /*填充消息长度*/ pMrrcDataReqMsg->stNasMsg.ulNasMsgSize = ulIndex; /*填充消息头*/ EMM_COMP_MM_MSG_HEADER(pMrrcDataReqMsg, ulDataReqMsgLenNoHeader); /* 填写MRRC_DATA_REQ 的消息ID标识 */ pMrrcDataReqMsg->ulMsgId = ID_NAS_LMM_INTRA_MRRC_DATA_REQ; /*填写建立原因*/ switch(NAS_EMM_SER_GetEmmSERStartCause()) { case NAS_EMM_SER_START_CAUSE_MT_CSFB_REQ: pMrrcDataReqMsg->enEstCaue = LRRC_LNAS_EST_CAUSE_MT_ACCESS; pMrrcDataReqMsg->enCallType = LRRC_LNAS_CALL_TYPE_TERMINATING_CALL; break; case NAS_EMM_SER_START_CAUSE_MO_CSFB_REQ: pMrrcDataReqMsg->enEstCaue = LRRC_LNAS_EST_CAUSE_MO_DATA; pMrrcDataReqMsg->enCallType = LRRC_LNAS_CALL_TYPE_MO_CSFB; break; case NAS_EMM_SER_START_CAUSE_MO_EMERGENCY_CSFB_REQ: pMrrcDataReqMsg->enEstCaue = LRRC_LNAS_EST_CAUSE_EMERGENCY_CALL; pMrrcDataReqMsg->enCallType = LRRC_LNAS_CALL_TYPE_EMERGENCY_CALL; break; default: NAS_EMM_SER_LOG_ERR("Nas_Emm_SER_SendMrrcDataReq_ServiceReq:StartCause ERR"); break; } pMrrcDataReqMsg->enEmmMsgType = NAS_EMM_MSG_EXTENDED_SERVICE_REQ; pMrrcDataReqMsg->enDataCnf = LRRC_LMM_DATA_CNF_NEED; /*空口消息上报SER REQ*/ NAS_LMM_SendOmtAirMsg(NAS_EMM_OMT_AIR_MSG_UP, NAS_EMM_EXTENDED_SER_REQ, (NAS_MSG_STRU*)&(pMrrcDataReqMsg->stNasMsg)); /*关键事件上报SER REQ*/ NAS_LMM_SendOmtKeyEvent( EMM_OMT_KE_EXTENDED_SER_REQ); /* 发送消息(Send the msg of) MRRC_DATA_REQ(SER_REQ) */ NAS_EMM_SndUplinkNasMsg( pMrrcDataReqMsg); NAS_LMM_MEM_FREE(pMrrcDataReqMsg); return; }
VOS_VOID NAS_EMM_SER_SendMrrcDataReq_ServiceReq() { NAS_EMM_MRRC_DATA_REQ_STRU *pMrrcDataReqMsg = NAS_EMM_NULL_PTR; VOS_UINT32 ulDataReqMsgLenNoHeader; VOS_UINT32 ulCnMsgLen; NAS_EMM_SER_LOG_INFO("NAS_EMM_SER_SendMrrcDataReq_ServiceReq is entered."); /* 计算NAS_MSG_STRU消息长度 */ ulCnMsgLen = NAS_EMM_COUNT_CN_SER_REQ_LEN; ulDataReqMsgLenNoHeader = EMM_COUNT_DATA_REQ_LEN(ulCnMsgLen); /* 申请DOPRA消息 */ pMrrcDataReqMsg = (VOS_VOID *)NAS_LMM_MEM_ALLOC(NAS_EMM_INTRA_MSG_MAX_SIZE); if(NAS_EMM_NULL_PTR == pMrrcDataReqMsg) { NAS_EMM_SER_LOG_ERR( "Nas_Emm_SER_SendMrrcDataReq_ServiceReq: MSG ALLOC ERR !!"); return; } /* xiongxianghui00253310 add memset 2013-11-26 begin */ NAS_LMM_MEM_SET(pMrrcDataReqMsg, 0, NAS_EMM_INTRA_MSG_MAX_SIZE); /* xiongxianghui00253310 add memset 2013-11-26 end */ /* 清除CSFB ABORT标识 */ NAS_EMM_SER_SaveEmmSerCsfbAbortFlag(NAS_EMM_CSFB_ABORT_FLAG_INVALID); /* 填写MRRC_DATA_REQ 的DOPRA消息头 */ EMM_COMP_MM_MSG_HEADER(pMrrcDataReqMsg, ulDataReqMsgLenNoHeader); /* 填写MRRC_DATA_REQ 的消息ID标识 */ pMrrcDataReqMsg->ulMsgId = ID_NAS_LMM_INTRA_MRRC_DATA_REQ; /*填写建立原因*/ switch(NAS_EMM_SER_GetEmmSERStartCause()) { case NAS_EMM_SER_START_CAUSE_RRC_PAGING: pMrrcDataReqMsg->enEstCaue = LRRC_LNAS_EST_CAUSE_MT_ACCESS; pMrrcDataReqMsg->enCallType = LRRC_LNAS_CALL_TYPE_TERMINATING_CALL; break; case NAS_EMM_SER_START_CAUSE_RABM_REEST: pMrrcDataReqMsg->enEstCaue = LRRC_LNAS_EST_CAUSE_MO_DATA; pMrrcDataReqMsg->enCallType = LRRC_LNAS_CALL_TYPE_ORIGINATING_CALL; break; case NAS_EMM_SER_START_CAUSE_ESM_DATA_REQ: pMrrcDataReqMsg->enEstCaue = LRRC_LNAS_EST_CAUSE_MO_DATA; pMrrcDataReqMsg->enCallType = LRRC_LNAS_CALL_TYPE_ORIGINATING_CALL; break; case NAS_ESM_SER_START_CAUSE_UPLINK_PENDING: pMrrcDataReqMsg->enEstCaue = LRRC_LNAS_EST_CAUSE_MO_DATA; pMrrcDataReqMsg->enCallType = LRRC_LNAS_CALL_TYPE_ORIGINATING_CALL; break; case NAS_EMM_SER_START_CAUSE_SMS_EST_REQ: pMrrcDataReqMsg->enEstCaue = LRRC_LNAS_EST_CAUSE_MO_DATA; pMrrcDataReqMsg->enCallType = LRRC_LNAS_CALL_TYPE_ORIGINATING_CALL; break; /* lihong00150010 emergency tau&service begin */ case NAS_EMM_SER_START_CAUSE_ESM_DATA_REQ_EMC: pMrrcDataReqMsg->enEstCaue = LRRC_LNAS_EST_CAUSE_EMERGENCY_CALL; pMrrcDataReqMsg->enCallType = LRRC_LNAS_CALL_TYPE_EMERGENCY_CALL; break; case NAS_EMM_SER_START_CAUSE_RABM_REEST_EMC: pMrrcDataReqMsg->enEstCaue = LRRC_LNAS_EST_CAUSE_EMERGENCY_CALL; pMrrcDataReqMsg->enCallType = LRRC_LNAS_CALL_TYPE_EMERGENCY_CALL; break; /* lihong00150010 emergency tau&service end */ default: NAS_EMM_SER_LOG_ERR("Nas_Emm_SER_SendMrrcDataReq_ServiceReq:StartCause ERR"); break; } pMrrcDataReqMsg->enEmmMsgType = NAS_EMM_MSG_SERVICE_REQ; /* 填写MRRC_DATA_REQ 的NAS消息长度标识 */ pMrrcDataReqMsg->stNasMsg.ulNasMsgSize = ulCnMsgLen; pMrrcDataReqMsg->enDataCnf = LRRC_LMM_DATA_CNF_NEED; /* 构造MRRC_DATA_REQ 中的 NAS_MSG_STRU,即CN消息(Compose the msg of): SER_REQ */ NAS_EMM_SER_CompCnServiceReq( &(pMrrcDataReqMsg->stNasMsg)); /*空口消息上报SER REQ*/ NAS_LMM_SendOmtAirMsg(NAS_EMM_OMT_AIR_MSG_UP, NAS_EMM_SER_REQ, (NAS_MSG_STRU*)&(pMrrcDataReqMsg->stNasMsg)); /*关键事件上报SER REQ*/ NAS_LMM_SendOmtKeyEvent( EMM_OMT_KE_SER_REQ); /* 发送消息(Send the msg of) MRRC_DATA_REQ(SER_REQ) */ NAS_EMM_SndUplinkNasMsg((VOS_VOID*)pMrrcDataReqMsg); NAS_LMM_MEM_FREE(pMrrcDataReqMsg); return; }
VOS_VOID NAS_EMM_SendAuthFail(NAS_EMM_AUTH_FAIL_CAUSE_ENUM_UINT8 enAuthFailCause) { VOS_UINT32 uldataReqMsgLenNoHeader = 0; VOS_UINT32 ulPos = 0; VOS_UINT8 aucNasMsg[NAS_EMM_AUTH_LEN_CN_MAX_FAIL_MSG]; NAS_EMM_MRRC_DATA_REQ_STRU *pIntraMsg = VOS_NULL_PTR; NAS_EMM_SECU_LOG_INFO("NAS_EMM_SendAuthFail entered."); /*申请消息内存*/ pIntraMsg = (VOS_VOID *)NAS_LMM_MEM_ALLOC(NAS_EMM_INTRA_MSG_MAX_SIZE); /*判断申请结果,若失败退出*/ if (NAS_EMM_NULL_PTR == pIntraMsg) { return; } /* 构造Auth Fai消息 */ aucNasMsg[ulPos++] = EMM_CN_MSG_PD_EMM; aucNasMsg[ulPos++] = NAS_EMM_CN_MT_AUTH_FAIl; aucNasMsg[ulPos++] = enAuthFailCause; if (NAS_EMM_AUTH_SYNC_FAILURE == enAuthFailCause) { aucNasMsg[ulPos++] = NAS_EMM_AUTH_FAIl_PARAM_IEI; aucNasMsg[ulPos++] = NAS_EMM_SECU_AUTH_AUTS_LEN; /* 获得 AUTS*/ NAS_LMM_MEM_CPY( (VOS_VOID *)&aucNasMsg[ulPos], NAS_EMM_GetSecuAuthAutsAddr(), NAS_EMM_SECU_AUTH_AUTS_LEN); ulPos += NAS_EMM_SECU_AUTH_AUTS_LEN; } /*lint -e669*/ NAS_LMM_MEM_CPY(pIntraMsg->stNasMsg.aucNasMsg, aucNasMsg,ulPos); /*lint +e669*/ /* 填充消息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_MSG_AUTH_FAIL; pIntraMsg->enDataCnf = LRRC_LMM_DATA_CNF_NEED; /* 填充消息长度 */ pIntraMsg->stNasMsg.ulNasMsgSize = ulPos; /*计算不包含消息头的消息长度*/ uldataReqMsgLenNoHeader = NAS_EMM_COUNT_INTRA_MSG_NO_HEADER_LEN(pIntraMsg->stNasMsg.ulNasMsgSize); /* 填充消息头 */ NAS_EMM_SET_SECU_INTRA_MSG_HEADER(pIntraMsg, uldataReqMsgLenNoHeader); /*空口消息上报 AUTH FAIL*/ NAS_LMM_SendOmtAirMsg( NAS_EMM_OMT_AIR_MSG_UP, NAS_EMM_AUTH_FAIL, (NAS_MSG_STRU*)&(pIntraMsg->stNasMsg)); /*关键事件上报 AUTH FAIL*/ NAS_LMM_SendOmtKeyEvent( EMM_OMT_KE_AUTH_FAIL); /*向MRRC发送Auth Fai消息*/ NAS_EMM_SndUplinkNasMsg(pIntraMsg); NAS_LMM_MEM_FREE(pIntraMsg); return; }
VOS_VOID NAS_EMM_SendAuthRsp(VOS_VOID) { VOS_UINT32 ulPos = 0; NAS_EMM_MRRC_DATA_REQ_STRU *pIntraMsg = VOS_NULL_PTR; VOS_UINT32 uldataReqMsgLenNoHeader; /* 打印进入该函数, INFO_LEVEL */ NAS_EMM_SECU_LOG_INFO("NAS_EMM_SendAuthRsp entered."); /* 申请消息内存 */ pIntraMsg = (VOS_VOID *)NAS_LMM_MEM_ALLOC(NAS_EMM_INTRA_MSG_MAX_SIZE); /* 判断申请结果,若失败退出 */ if (NAS_EMM_NULL_PTR == pIntraMsg) { return; } /* 构造AUTH RSP消息 */ pIntraMsg->stNasMsg.aucNasMsg[ulPos++] = EMM_CN_MSG_PD_EMM; pIntraMsg->stNasMsg.aucNasMsg[ulPos++] = NAS_EMM_CN_MT_AUTH_RSP; /* 拷贝 RES的长度和内容 */ pIntraMsg->stNasMsg.aucNasMsg[ulPos++] = NAS_EMM_GetSecuAuthResLen(); NAS_LMM_MEM_CPY( (VOS_VOID *)&(pIntraMsg->stNasMsg.aucNasMsg[ulPos]), NAS_EMM_GetSecuAuthResVAddr(), NAS_EMM_GetSecuAuthResLen()); ulPos += NAS_EMM_GetSecuAuthResLen(); /* 填充消息体 */ 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_MSG_AUTH_RSP; pIntraMsg->enDataCnf = LRRC_LMM_DATA_CNF_NEED; /* 填充其中的NAS CN消息的长度 */ pIntraMsg->stNasMsg.ulNasMsgSize = ulPos; /*计算不包含消息头的消息长度*/ uldataReqMsgLenNoHeader = NAS_EMM_COUNT_INTRA_MSG_NO_HEADER_LEN( pIntraMsg->stNasMsg.ulNasMsgSize); /* 填充消息头 */ NAS_EMM_SET_SECU_INTRA_MSG_HEADER(pIntraMsg, uldataReqMsgLenNoHeader); /*空口消息上报 AUTH RSP*/ NAS_LMM_SendOmtAirMsg( NAS_EMM_OMT_AIR_MSG_UP, NAS_EMM_AUTH_RSP, (NAS_MSG_STRU*)&(pIntraMsg->stNasMsg)); /*关键事件上报 AUTH RSP*/ NAS_LMM_SendOmtKeyEvent( EMM_OMT_KE_AUTH_RSP); /*向MRRC发送AUTH RSP消息*/ NAS_EMM_SndUplinkNasMsg( pIntraMsg); NAS_LMM_MEM_FREE(pIntraMsg); return; }