コード例 #1
0
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);
}
コード例 #2
0
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;
}