/*lint -e961*/ VOS_VOID NAS_LMM_SndLmmSmsEstCnf( VOS_VOID ) { LMM_SMS_EST_CNF_STRU *pLmmSmsEstCnfMsg; /*申请消息内存*/ pLmmSmsEstCnfMsg = (VOS_VOID *)NAS_LMM_ALLOC_MSG(sizeof(LMM_SMS_EST_CNF_STRU)); /*判断申请结果,若失败打印错误并退出*/ if (NAS_EMM_NULL_PTR == pLmmSmsEstCnfMsg) { /*打印错误*/ NAS_EMM_PUBU_LOG_ERR("NAS_LMM_SndLmmSmsEstCnf: MSG ALLOC ERR!"); return; } NAS_LMM_MEM_SET(pLmmSmsEstCnfMsg,0,sizeof(LMM_SMS_EST_CNF_STRU)); /* 打包消息头 */ NAS_LMM_COMP_SMS_MSG_HEADER( pLmmSmsEstCnfMsg, sizeof(LMM_SMS_EST_CNF_STRU)-NAS_EMM_LEN_VOS_MSG_HEADER); /*填充消息ID*/ pLmmSmsEstCnfMsg->ulMsgId = ID_LMM_SMS_EST_CNF; /*填充消息内容*/ pLmmSmsEstCnfMsg->ulOpId = 0; NAS_LMM_SEND_MSG(pLmmSmsEstCnfMsg); }
/***************************************************************************** Function Name : NAS_EMM_PUB_SendMmcStartReq Description : 向MMC发送MMC_EMM_START_REQ消息 Input : None Output : None Return : History : 1.qilili00145085 2009-01-23 Draft Enact *****************************************************************************/ VOS_UINT32 NAS_EMM_PUB_SendMmcStartReq( VOS_UINT32 encause ) { EMMC_EMM_START_REQ_STRU *pstMmcStartReqMsg; VOS_UINT32 ulMsgLengthNoHeader; VOS_UINT32 ulSendResult; /* 计算EMM要发给内部其它模块的内部消息长度, 不包含VOS头 */ ulMsgLengthNoHeader = NAS_EMM_PUB_INTRAMSG_LENGTH_NO_HEADER(EMMC_EMM_START_REQ_STRU); /* 获取内部消息地址 */ pstMmcStartReqMsg = (VOS_VOID *) NAS_LMM_GetSendIntraMsgBuffAddr(ulMsgLengthNoHeader); if (NAS_EMM_NULL_PTR == pstMmcStartReqMsg) { /* 打印异常,ERROR_LEVEL */ NAS_EMM_PUBU_LOG_ERR("NAS_EMM_PLMN_SendMmcStartReq: GET INTRAMSG ADDR ERROR!!!"); return NAS_EMM_FAIL; } /* 打包内部消息头 */ NAS_EMM_COMP_INTRA_MSG_HEADER((pstMmcStartReqMsg), ulMsgLengthNoHeader); /* 填充内部消息ID */ pstMmcStartReqMsg ->enMsgId = ID_EMMC_EMM_START_REQ; /* 填充消息体 */ pstMmcStartReqMsg->enCause = encause; /* 向MMC发送MMC_EMM_START_REQ内部消息 */ NAS_EMM_SEND_INTRA_MSG( pstMmcStartReqMsg); ulSendResult = NAS_EMM_OK; return ulSendResult; }
/***************************************************************************** Function Name : NAS_LMM_SndLmmSmsErrInd Description : 发送消息通知SMS模块,没有链路透传SMS消息 Input : VOS_VOID Output : None Return : VOS_VOID History : 1.sunbing 49683 2011-11-3 Draft Enact *****************************************************************************/ VOS_VOID NAS_LMM_SndLmmSmsErrInd(LMM_SMS_ERR_CAUSE_ENUM_UINT32 enErrCause) { LMM_SMS_ERR_IND_STRU *pLmmSmsErrIndMsg; /*申请消息内存*/ pLmmSmsErrIndMsg = (VOS_VOID *)NAS_LMM_ALLOC_MSG(sizeof(LMM_SMS_ERR_IND_STRU)); /*判断申请结果,若失败打印错误并退出*/ if (NAS_EMM_NULL_PTR == pLmmSmsErrIndMsg) { /*打印错误*/ NAS_EMM_PUBU_LOG_ERR("NAS_LMM_SndLmmSmsErrInd: MSG ALLOC ERR!"); return; } NAS_LMM_MEM_SET(pLmmSmsErrIndMsg,0,sizeof(LMM_SMS_ERR_IND_STRU)); /* 打包消息头 */ NAS_LMM_COMP_SMS_MSG_HEADER( pLmmSmsErrIndMsg, sizeof(LMM_SMS_ERR_IND_STRU)-NAS_EMM_LEN_VOS_MSG_HEADER); /*填充消息ID*/ pLmmSmsErrIndMsg->ulMsgId = ID_LMM_SMS_ERR_IND; /*填充消息内容*/ pLmmSmsErrIndMsg->ulOpId = 0; pLmmSmsErrIndMsg->enErrCause = enErrCause; NAS_LMM_SEND_MSG(pLmmSmsErrIndMsg); }
/******************************************************************************* 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; }
/***************************************************************************** Function Name : NAS_LMM_SmsSendDataInd Description : 向SMS发送ID_LMM_SMS_DATA_IND Input : Output : Return : 处理结果 History : 1.FTY 2011-11-16 Draft Enact 2.sunbing 2011-12-30 修改消息长度 *****************************************************************************/ VOS_VOID NAS_LMM_SndLmmSmsDataInd(const VOS_UINT8* aucMsg,VOS_UINT32 ulMsgLen) { LMM_SMS_DATA_IND_STRU *pLmmSmsDataInd = NAS_EMM_NULL_PTR; VOS_UINT32 ulTmpLength = 0; if( 0 == ulMsgLen) { NAS_EMM_PUBU_LOG_WARN("NAS_LMM_SndLmmSmsDataInd: WARNING: Msg Length is zero"); return ; } else if(ulMsgLen > NAS_EMM_4BYTES_LEN) { ulTmpLength = ulMsgLen - NAS_EMM_4BYTES_LEN ; pLmmSmsDataInd = (VOS_VOID*)NAS_LMM_ALLOC_MSG(sizeof(LMM_SMS_DATA_IND_STRU) + ulTmpLength); } else/*如果长度小于NAS_EMM_4BYTES_LEN,分配的空间等于NAS_EMM_4BYTES_LEN*/ { ulTmpLength = 0; pLmmSmsDataInd = (VOS_VOID*)NAS_LMM_ALLOC_MSG(sizeof(LMM_SMS_DATA_IND_STRU)); } /*判断申请结果,若失败打印错误并退出*/ if (NAS_EMM_NULL_PTR == pLmmSmsDataInd) { /*打印错误*/ NAS_EMM_PUBU_LOG_ERR("NAS_LMM_SmsSendDataInd: MSG ALLOC ERR!"); return ; } /*构造ID_EMM_ESM_DATA_IND消息*/ /*填充消息头*/ NAS_LMM_COMP_SMS_MSG_HEADER(pLmmSmsDataInd, (sizeof(LMM_SMS_DATA_IND_STRU)+ ulTmpLength)-NAS_EMM_LEN_VOS_MSG_HEADER); /*填充消息ID*/ pLmmSmsDataInd->ulMsgId = ID_LMM_SMS_DATA_IND; /*填充消息内容*/ pLmmSmsDataInd->ulOpId = 0; pLmmSmsDataInd->stSmsMsg.ulSmsMsgSize = ulMsgLen; /*lint -e669*/ NAS_LMM_MEM_CPY(pLmmSmsDataInd->stSmsMsg.aucSmsMsg,aucMsg,ulMsgLen);/*lint !e669 !e670*/ /*lint +e669*/ /*向SMS发送ID_LMM_SMS_DATA_IND消息*/ NAS_LMM_SEND_MSG(pLmmSmsDataInd); }
VOS_UINT32 NAS_EMM_PreProcMsgSmsEstReq(const MsgBlock * pMsg ) { LMM_SMS_ERR_CAUSE_ENUM_UINT32 enErrCause = LMM_SMS_ERR_CAUSE_BUTT; if (VOS_NULL_PTR == pMsg) { NAS_EMM_PUBU_LOG_ERR("NAS_EMM_PreProcMsgSmsEstReq: ERR, Null Ptr!"); return NAS_LMM_MSG_HANDLED; } /* 不能发起建链,也不能重发 */ if (NAS_EMM_YES == NAS_EMM_IsSmsNotRetransmitConditionSatisfied(&enErrCause)) { NAS_LMM_SndLmmSmsErrInd(enErrCause); return NAS_LMM_MSG_HANDLED; } /* 根据当前状态进行相应处理 */ return NAS_EMM_RcvSmsEstReqMsgProc(); }
VOS_UINT32 NAS_EMM_SndMtDetachAccFailProc(VOS_VOID* pMsg,VOS_UINT32 *pulIsDelBuff) { LRRC_LMM_DATA_CNF_STRU *pstRrcMmDataCnf = VOS_NULL_PTR; NAS_EMM_MRRC_DATA_REQ_STRU *pMrrcDataMsg = VOS_NULL_PTR; VOS_UINT32 ulRrcMmDataReqMsgLen; NAS_EMM_MRRC_MGMT_DATA_STRU *pEmmMrrcMgmtData = NAS_EMM_NULL_PTR; *pulIsDelBuff = VOS_TRUE; pstRrcMmDataCnf = (LRRC_LMM_DATA_CNF_STRU*) pMsg; pEmmMrrcMgmtData = NAS_EMM_FindMsgInDataReqBuffer(pstRrcMmDataCnf->ulOpId); if (NAS_EMM_NULL_PTR == pEmmMrrcMgmtData) { return NAS_EMM_FAIL; } ulRrcMmDataReqMsgLen = sizeof(NAS_EMM_MRRC_DATA_REQ_STRU)+ pEmmMrrcMgmtData->ulNasMsgLength - NAS_EMM_4BYTES_LEN; /* 申请消息内存*/ pMrrcDataMsg = (NAS_EMM_MRRC_DATA_REQ_STRU *)((VOS_VOID*)NAS_LMM_MEM_ALLOC(ulRrcMmDataReqMsgLen)); if(VOS_NULL_PTR == pMrrcDataMsg) { NAS_EMM_PUBU_LOG_ERR("NAS_EMM_SndMtDetachAccFailProc: Mem Alloc Fail"); return NAS_EMM_FAIL; } switch (pstRrcMmDataCnf->enSendRslt) { case LRRC_LMM_SEND_RSLT_FAILURE_HO: case LRRC_LMM_SEND_RSLT_FAILURE_TXN: case LRRC_LMM_SEND_RSLT_FAILURE_RLF: if (NAS_EMM_MAX_MT_DETACH_ACC_TX_NUM > NAS_EMM_GLO_AD_GetMtDetachAccTxCnt()) { NAS_EMM_GLO_AD_GetMtDetachAccTxCnt() ++; pMrrcDataMsg->enDataCnf = LRRC_LMM_DATA_CNF_NEED; pMrrcDataMsg->enEmmMsgType = NAS_EMM_MSG_DETACH_ACP; pMrrcDataMsg->ulMsgId = ID_NAS_LMM_INTRA_MRRC_DATA_REQ; pMrrcDataMsg->ulEsmMmOpId = pEmmMrrcMgmtData->ulEsmMmOpId; pMrrcDataMsg->stNasMsg.ulNasMsgSize = pEmmMrrcMgmtData->ulNasMsgLength; NAS_LMM_MEM_CPY(pMrrcDataMsg->stNasMsg.aucNasMsg, pEmmMrrcMgmtData->aucNasMsgContent, pEmmMrrcMgmtData->ulNasMsgLength); NAS_EMM_SndUplinkNasMsg(pMrrcDataMsg); } else { NAS_EMM_GLO_AD_GetMtDetachAccTxCnt() = 0; } break; default: break; } /*释放所申请内存 */ NAS_LMM_MEM_FREE(pMrrcDataMsg); return NAS_EMM_SUCC; }