VOS_UINT32  NAS_EMM_IsSmsNotRetransmitConditionSatisfied
(
    LMM_SMS_ERR_CAUSE_ENUM_UINT32    *penErrCause
)
{
    NAS_LMM_UE_OPERATION_MODE_ENUM_UINT32    enUeOperationMode = NAS_LMM_UE_MODE_BUTT;

    enUeOperationMode = NAS_LMM_GetEmmInfoUeOperationMode();

    /* PS ONLY */
    if  ( (NAS_LMM_UE_PS_MODE_1 == enUeOperationMode)
        ||(NAS_LMM_UE_PS_MODE_2 == enUeOperationMode) )
    {
        *penErrCause = LMM_SMS_ERR_CAUSE_UE_MODE_PS_ONLY;
        return NAS_EMM_YES;
    }

    /* #2,CS域卡无效 */
    if ( NAS_EMM_REJ_YES == NAS_LMM_GetEmmInfoRejCause2Flag() )
    {
        *penErrCause = LMM_SMS_ERR_CAUSE_USIM_CS_INVALID;
        return NAS_EMM_YES;
    }

    /* #18,CS域不可用 */
    if ( NAS_EMM_REJ_YES == NAS_EMMC_GetRejCause18Flag() )
    {
        *penErrCause = LMM_SMS_ERR_CAUSE_CS_SER_NOT_AVAILABLE;
        return NAS_EMM_YES;
    }

    /*PC REPLAY MODIFY BY LEILI BEGIN*/
    /* CS域不允许注册 */
    if ( NAS_EMM_AUTO_ATTACH_NOT_ALLOW == NAS_EMM_GetCsAttachAllowFlg() )
    {
        NAS_EMM_PUBU_LOG_NORM("NAS_EMM_IsSmsNotRetransmitConditionSatisfied: Cs attach not allowed!");
        *penErrCause = LMM_SMS_ERR_CAUSE_CS_ATTACH_NOT_ALLOWED;
         return NAS_EMM_YES;
    }

    /* PS域不允许注册 */
    if ( NAS_EMM_AUTO_ATTACH_NOT_ALLOW == NAS_EMM_GetPsAttachAllowFlg() )
    {
        NAS_EMM_PUBU_LOG_NORM("NAS_EMM_IsSmsNotRetransmitConditionSatisfied: Ps attach not allowed!");
        *penErrCause = LMM_SMS_ERR_CAUSE_PS_ATTACH_NOT_ALLOWED;
         return NAS_EMM_YES;
    }
    /*PC REPLAY MODIFY BY LEILI END*/
    return NAS_EMM_NO;

}
Example #2
0
/*****************************************************************************
 Function Name   : NAS_EMM_PreProcMsgDlNasTransport
 Description     : 预处理解码后的下行NAS透传消息
 Input           : None
 Output          : None
 Return          : VOS_UINT32

 History         :
    1.sunbing 49683      2011-11-22  Draft Enact

*****************************************************************************/
VOS_UINT32  NAS_EMM_PreProcMsgDlNasTransport( NAS_EMM_CN_MSG_STRU_UNION  * pCnMsg )
{
    NAS_EMM_CN_DOWNLINK_NAS_TRANSPORT_STRU *pTmpRcvMsg          = NAS_EMM_NULL_PTR;

    NAS_EMM_PUBU_LOG_NORM("NAS_EMM_PreProcMsgDlNasTransport is entered.");

    pTmpRcvMsg = (NAS_EMM_CN_DOWNLINK_NAS_TRANSPORT_STRU*)pCnMsg;

    NAS_LMM_SndLmmSmsDataInd(pTmpRcvMsg->aucDownlinkNasTransportMsg,
                             pTmpRcvMsg->ucDownlinkNasTransportLen);

    return NAS_LMM_MSG_HANDLED;
}
/*******************************************************************************
  Module   :
  Function : NAS_EMM_CompCnUplinkNasTransportMsg
  Input     : pMsg         :SMS透传过来的消息
                pulIndex     : 既作输入,也作输出
  Output   :pucCnNasMsg  : 指向 LRRC_LNAS_MSG_STRU.aucNasMsg
  NOTE     :
  Return   :VOS_VOID
  History  :
    1.  FTY  2011.11.15  新规作成

*******************************************************************************/
VOS_VOID NAS_EMM_SMS_CompCnUplinkNasTransportMsg
               (VOS_UINT8 *pucCnNasMsg, VOS_UINT32 *pulIndex, const LMM_SMS_MSG_STRU * pSmsMsg)
{
    VOS_UINT32 ulIndex = NAS_LMM_NULL;

    NAS_EMM_PUBU_LOG_NORM("NAS_EMM_SMS_CompCnUplinkNasTransportMsg enter!");

    /* 填充 Protocol Discriminator + Security header type */
    pucCnNasMsg[ulIndex++] = EMM_CN_MSG_PD_EMM;

    /* 填充UpLink nas transort message identity   */
    pucCnNasMsg[ulIndex++] = NAS_EMM_CN_MT_UPLINK_NAS_TRANSPORT;

    /*填充NAS msg*/
    pucCnNasMsg[ulIndex++] = (VOS_UINT8)pSmsMsg->ulSmsMsgSize;
    NAS_LMM_MEM_CPY(&(pucCnNasMsg[ulIndex]),
                      pSmsMsg->aucSmsMsg,
                      pSmsMsg->ulSmsMsgSize);
    ulIndex += pSmsMsg->ulSmsMsgSize;

    *pulIndex += ulIndex;

}
Example #4
0
VOS_UINT32  NAS_EMM_PreProcMsgCsSerNotification
(
    NAS_EMM_CN_MSG_STRU_UNION          *pCnMsg
)
{
    VOS_UINT32                          ulCurEmmStat = NAS_EMM_NULL;
    NAS_EMM_CN_CS_SER_NOTIFICAIOTN_STRU *pstCsSerNotification = VOS_NULL_PTR;

    NAS_EMM_PUBU_LOG_NORM("NAS_EMM_PreProcMsgCsSerNotification is entered");

    pstCsSerNotification = (NAS_EMM_CN_CS_SER_NOTIFICAIOTN_STRU *)pCnMsg;

    ulCurEmmStat = NAS_LMM_PUB_COMP_EMMSTATE(NAS_EMM_CUR_MAIN_STAT,
                                            NAS_EMM_CUR_SUB_STAT);

    switch(ulCurEmmStat)
    {
        case    NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG,EMM_SS_REG_NORMAL_SERVICE):
        case    NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_RRC_CONN_REL_INIT,EMM_SS_RRC_CONN_WAIT_REL_CNF):
        case    NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_AUTH_INIT,EMM_SS_AUTH_WAIT_CN_AUTH):
        case    NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_TAU_INIT,EMM_SS_TAU_WAIT_CN_TAU_CNF):
                /* 进入该分支的肯定是MT类型的CSFB */
                if (NAS_EMM_FAIL == NAS_EMM_SER_VerifyCsfb(MM_LMM_CSFB_SERVICE_MT_NORMAL))
                {
                    /* 设置UE拒绝CSFB */
                    NAS_EMM_SER_SaveEmmSerCsfbRsp(NAS_EMM_CSFB_RSP_REJECTED_BY_UE);
                    NAS_EMM_SER_SaveEmmSERStartCause(NAS_EMM_SER_START_CAUSE_MT_CSFB_REQ);

                    /* 发送EXTENDED SERVICE REQ消息,通知网侧CSFB不能发起 */
                    NAS_EMM_SER_SendMrrcDataReq_ExtendedServiceReq();
                }
                else
                {
                    /* 给MM模块发送MM_MM_CSFB_SERVICE_PAGING_IND消息 */
                    NAS_EMM_MmSendCsfbSerPaingInd(  NAS_EMM_MT_CSFB_TYPE_CS_SER_NOTIFICATION,
                                                    pstCsSerNotification,
                                                    LRRC_PAGE_UE_ID_BUTT);
                }

                break;
        case    NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_SER_INIT,EMM_SS_SER_WAIT_CN_SER_CNF):

                /*处于主叫过程中,收到被叫,则直接丢弃,被叫过程中收到CS SERVICE NOTIFICATION消息可能是重发,需要重新发起ESR*/
                if ((NAS_EMM_SER_START_CAUSE_MO_CSFB_REQ != NAS_EMM_SER_GetEmmSERStartCause())
                    && (NAS_EMM_SER_START_CAUSE_MO_EMERGENCY_CSFB_REQ != NAS_EMM_SER_GetEmmSERStartCause()))
                {

                    if (NAS_EMM_FAIL == NAS_EMM_SER_VerifyCsfb(MM_LMM_CSFB_SERVICE_MT_NORMAL))
                    {
                        /* 设置UE拒绝CSFB */
                        NAS_EMM_SER_SaveEmmSerCsfbRsp(NAS_EMM_CSFB_RSP_REJECTED_BY_UE);
                        NAS_EMM_SER_SaveEmmSERStartCause(NAS_EMM_SER_START_CAUSE_MT_CSFB_REQ);

                        /* 发送EXTENDED SERVICE REQ消息,通知网侧CSFB不能发起 */
                        NAS_EMM_SER_SendMrrcDataReq_ExtendedServiceReq();
                    }
                    else
                    {
                        /* 给MM模块发送MM_MM_CSFB_SERVICE_PAGING_IND消息 */
                        NAS_EMM_MmSendCsfbSerPaingInd(  NAS_EMM_MT_CSFB_TYPE_CS_SER_NOTIFICATION,
                                                        pstCsSerNotification,
                                                        LRRC_PAGE_UE_ID_BUTT);
                    }
                }
                break;

        case    NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG,EMM_SS_REG_IMSI_DETACH_WATI_CN_DETACH_CNF):
        case    NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG,EMM_SS_REG_ATTEMPTING_TO_UPDATE_MM):
        case    NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_DEREG_INIT,EMM_SS_DETACH_WAIT_CN_DETACH_CNF):

                /* 设置UE拒绝CSFB */
                NAS_EMM_SER_SaveEmmSerCsfbRsp(NAS_EMM_CSFB_RSP_REJECTED_BY_UE);
                NAS_EMM_SER_SaveEmmSERStartCause(NAS_EMM_SER_START_CAUSE_MT_CSFB_REQ);

                /* 发送EXTENDED SERVICE REQ消息,通知网侧CSFB不能发起 */
                NAS_EMM_SER_SendMrrcDataReq_ExtendedServiceReq();
                break;

        default :

                NAS_EMM_PUBU_LOG_NORM("NAS_EMM_PreProcMsgCsSerNotification:Illegal state!");
                break;
    }

    return NAS_LMM_MSG_HANDLED;
}