LOCAL VOS_VOID MSG_WaitRetryIntervalTimeout( VOS_UINT32 ulParam ) { MN_MSG_MO_ENTITY_STRU stMoEntity; VOS_UINT32 ulRet; SMR_SMT_MO_REPORT_STRU stRpErrInfo; PS_MEM_SET(&stMoEntity,0X00,sizeof(stMoEntity)); MN_MSG_GetMoEntity(&stMoEntity); PS_MEM_SET(&stRpErrInfo, 0, sizeof(stRpErrInfo)); /* 当前不是发送短信过程中 */ if (MN_MSG_MO_STATE_WAIT_REPORT_IND != stMoEntity.enSmaMoState) { MN_WARN_LOG("MSG_WaitRetryIntervalTimeout:Mo State is NULL"); return; } MSG_GetRetrySendDomain(stMoEntity.enHopeSendDomain, &stMoEntity.enSendDomain); if (MN_MSG_SEND_DOMAIN_NO != stMoEntity.enSendDomain) { /* TAF层重发的SUBMIT短信TP-RD应该修改为1,指示短信中心拒绝接收重复短信 */ MN_MSG_SetTpRd(&stMoEntity); /*将一条完整的RP-Data发送给NAS层的SMS模块*/ ulRet = MN_MSG_SendSmsRpDataReq(stMoEntity.enSendDomain, stMoEntity.aucRpDataInfo, stMoEntity.ucRpDataLen, stMoEntity.enMsgSignallingType); if (VOS_OK == ulRet) { /* 更新MO变量 */ MN_MSG_CreateMoInfo(&stMoEntity); return; } } /* 上报发送短信失败 */ MN_MSG_GetRpErrInfo(&stRpErrInfo); MN_MSG_RcvSmsRpRpt(&stRpErrInfo); /* 还需要停止定时器 */ MN_MSG_StopTimer(MN_MSG_ID_WAIT_RETRY_PERIOD); }
VOS_UINT32 MN_MSG_UpdateMoEntityAccordingToMoSmsCtrl( PS_USIM_ENVELOPE_CNF_STRU *pstEnvelope, MN_MSG_MO_ENTITY_STRU *pstMoEntity ) { VOS_UINT32 ulRet; SI_STK_ENVELOPE_RSP_STRU stMoSmsRsp; PS_MEM_SET(&stMoSmsRsp, 0, sizeof(stMoSmsRsp)); if (VOS_OK != pstEnvelope->ulResult) { /*短信发送失败流程*/ stMoSmsRsp.Result = SI_STK_CTRL_NOT_ALLOW; NAS_STKAPI_SMSCtrlResultInd(&stMoSmsRsp); return MN_ERR_CLASS_SMS_MO_CTRL_ACTION_NOT_ALLOWED; } if (0 != pstEnvelope->ucDataLen) { /* 解析消息中的短信中心号码和目的号码重新组装TPDU包待发送 */ NAS_STKAPI_EnvelopeRsp_Decode(pstEnvelope->ucDataType, pstEnvelope->ucDataLen, pstEnvelope->aucData, &stMoSmsRsp); /* 响应消息中存在RP-DA更新短信中心号码 */ if (SI_STK_CTRL_NOT_ALLOW == stMoSmsRsp.Result) { NAS_STKAPI_SMSCtrlResultInd(&stMoSmsRsp); NAS_STKAPI_EnvelopeRspDataFree(&stMoSmsRsp); return MN_ERR_CLASS_SMS_MO_CTRL_ACTION_NOT_ALLOWED; } if(SI_STK_CTRL_ALLOW_MODIFY == stMoSmsRsp.Result) { ulRet = MN_MSG_MoCtrlAllowedWithModification(&stMoSmsRsp.uResp.MoSmsCtrlRsp, pstMoEntity); if (MN_ERR_NO_ERROR != ulRet) { stMoSmsRsp.Result = SI_STK_CTRL_NOT_ALLOW; NAS_STKAPI_SMSCtrlResultInd(&stMoSmsRsp); NAS_STKAPI_EnvelopeRspDataFree(&stMoSmsRsp); return ulRet; } MN_MSG_CreateMoInfo(pstMoEntity); } } else { stMoSmsRsp.Result = SI_STK_CTRL_ALLOW_NOMODIFY; } NAS_STKAPI_SMSCtrlResultInd(&stMoSmsRsp); NAS_STKAPI_EnvelopeRspDataFree(&stMoSmsRsp); /* 发送短信到SMS层 */ ulRet = MN_MSG_SendSmsRpDataReq(pstMoEntity->enSendDomain, pstMoEntity->aucRpDataInfo, pstMoEntity->ucRpDataLen, pstMoEntity->enMsgSignallingType); if (VOS_ERR == ulRet) { return MN_ERR_SEND_MSG_ERROR; } return MN_ERR_NO_ERROR; }