VOS_UINT32 GUNAS_SMS_ATCmdFilter( VOS_UINT8 *pucATData, VOS_UINT16 usLen ) { VOS_UINT32 i; VOS_UINT8 *pucTempData = VOS_NULL_PTR; pucTempData = (VOS_UINT8 *)PS_MEM_ALLOC(WUEPS_PID_AT, usLen); if (VOS_NULL_PTR == pucTempData) { return VOS_FALSE; } (VOS_VOID)PS_MEM_CPY(pucTempData, pucATData, usLen); (VOS_VOID)At_UpString(pucTempData, usLen); for (i = 0; i < (sizeof(g_apcATFileterTable)/sizeof(g_apcATFileterTable[0])); i++) { if (VOS_OK == PS_MEM_CMP((VOS_UINT8 *)g_apcATFileterTable[i], pucTempData, VOS_StrLen(g_apcATFileterTable[i]))) { PS_MEM_FREE(WUEPS_PID_AT, pucTempData); return VOS_TRUE; } } PS_MEM_FREE(WUEPS_PID_AT, pucTempData); return VOS_FALSE; }
VOS_VOID TAF_MTA_RcvAtNvwrSecCtrlSetReq( VOS_VOID *pMsg ) { AT_MTA_MSG_STRU *pstAtMtaReqMsg; AT_MTA_NVWRSECCTRL_SET_REQ_STRU *pstNvwrSecCtrlReq; MTA_AT_RESULT_CNF_STRU stNvwrSecCtrlCnf; TAF_NV_NVWR_SEC_CTRL_STRU stNvwrSecCtrlNV; IMEI_STRU stImeiSrc; IMEI_STRU stImeiPara; VOS_UINT32 ulResult; VOS_UINT32 ulImeiLen; MODEM_ID_ENUM_UINT16 enModemId; VOS_UINT8 aucImeiStr[TAF_NVIM_ITEM_IMEI_SIZE + 1]; /* 局部变量初始化 */ pstAtMtaReqMsg = (AT_MTA_MSG_STRU *)pMsg; pstNvwrSecCtrlReq = (AT_MTA_NVWRSECCTRL_SET_REQ_STRU *)pstAtMtaReqMsg->aucContent; /* SC提供的RSA封装需要调用者将解密后结果的预期长度传入 */ ulImeiLen = MTA_IMEI_LEN; PS_MEM_SET(&stNvwrSecCtrlNV, 0x00, sizeof(stNvwrSecCtrlNV)); PS_MEM_SET(&stNvwrSecCtrlCnf, 0x00, sizeof(stNvwrSecCtrlCnf)); PS_MEM_SET(&stImeiSrc, 0x00, sizeof(stImeiSrc)); PS_MEM_SET(&stImeiPara, 0x00, sizeof(stImeiPara)); PS_MEM_SET(aucImeiStr, 0x00, sizeof(aucImeiStr)); /* 如果单板没有HUK则不作安全校验 */ if (VOS_TRUE == DRV_CHECK_HUK_IS_VALID()) { /* 单板已经写入HUK但未下发安全密文则返回失败 */ if (VOS_TRUE != pstNvwrSecCtrlReq->ucSecStrFlg) { stNvwrSecCtrlCnf.enResult = MTA_AT_RESULT_DEVICE_SEC_SIGNATURE_FAIL; /* 返回跨核消息ID_MTA_AT_APSEC_SET_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_NVWRSECCTRL_SET_CNF, sizeof(stNvwrSecCtrlCnf), (VOS_UINT8*)&stNvwrSecCtrlCnf ); return; } /* 由PID获取MODEMID */ enModemId = VOS_GetModemIDFromPid(UEPS_PID_MTA); /* 调用SC接口读取IMEI号码 */ ulResult = SC_PERS_NvRead(enModemId, en_NV_Item_IMEI, stImeiSrc.aucImei, TAF_NVIM_ITEM_IMEI_SIZE); if (SC_ERROR_CODE_NO_ERROR != ulResult) { /* 异常,返回结果给AT模块 */ stNvwrSecCtrlCnf.enResult = TAF_MTA_ConvertScErr(ulResult); /* 返回跨核消息ID_MTA_AT_APSEC_SET_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_NVWRSECCTRL_SET_CNF, sizeof(stNvwrSecCtrlCnf), (VOS_UINT8*)&stNvwrSecCtrlCnf ); return; } /* 调用SC模块接口, 对密文进行RSA解密 */ ulResult = SC_FAC_RsaDecrypt(pstNvwrSecCtrlReq->aucSecString, AT_RSA_CIPHERTEXT_LEN, aucImeiStr, &ulImeiLen); if (MTA_IMEI_LEN != ulImeiLen) { ulResult = SC_ERROR_CODE_RSA_DECRYPT_FAIL; } if (SC_ERROR_CODE_NO_ERROR != ulResult) { /* 异常,返回结果给AT模块 */ stNvwrSecCtrlCnf.enResult = TAF_MTA_ConvertScErr(ulResult); /* 返回跨核消息ID_MTA_AT_APSEC_SET_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_NVWRSECCTRL_SET_CNF, sizeof(stNvwrSecCtrlCnf), (VOS_UINT8*)&stNvwrSecCtrlCnf ); return; } /* 数字字符串转换为数字串 */ if (VOS_OK != TAF_MTA_AcNums2DecNums(aucImeiStr, stImeiPara.aucImei, ulImeiLen)) { stNvwrSecCtrlCnf.enResult = MTA_AT_RESULT_DEVICE_SEC_SIGNATURE_FAIL; /* 返回跨核消息ID_MTA_AT_APSEC_SET_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_NVWRSECCTRL_SET_CNF, sizeof(stNvwrSecCtrlCnf), (VOS_UINT8*)&stNvwrSecCtrlCnf ); return; } /* 校验IMEI码 */ if (0 != PS_MEM_CMP(stImeiPara.aucImei, stImeiSrc.aucImei, ulImeiLen)) { stNvwrSecCtrlCnf.enResult = MTA_AT_RESULT_DEVICE_SEC_SIGNATURE_FAIL; /* 返回跨核消息ID_MTA_AT_APSEC_SET_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_NVWRSECCTRL_SET_CNF, sizeof(stNvwrSecCtrlCnf), (VOS_UINT8*)&stNvwrSecCtrlCnf ); return; } } /* 修改安全控制NV */ if (NV_OK == NV_Read(en_NV_Item_NVWR_SEC_CTRL, &stNvwrSecCtrlNV, sizeof(stNvwrSecCtrlNV))) { stNvwrSecCtrlNV.ucSecType = pstNvwrSecCtrlReq->ucSecType; if (NV_OK == NV_Write(en_NV_Item_NVWR_SEC_CTRL, &stNvwrSecCtrlNV, sizeof(stNvwrSecCtrlNV))) { /* 设置成功 */ stNvwrSecCtrlCnf.enResult = MTA_AT_RESULT_NO_ERROR; /* 返回跨核消息ID_MTA_AT_APSEC_SET_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_NVWRSECCTRL_SET_CNF, sizeof(stNvwrSecCtrlCnf), (VOS_UINT8*)&stNvwrSecCtrlCnf ); return; } } /* NV修改失败 */ stNvwrSecCtrlCnf.enResult = MTA_AT_RESULT_ERROR; /* 返回跨核消息ID_MTA_AT_APSEC_SET_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_NVWRSECCTRL_SET_CNF, sizeof(stNvwrSecCtrlCnf), (VOS_UINT8*)&stNvwrSecCtrlCnf ); return; }