/***************************************************************************** 函 数 名 : chap_Respond 功能描述 : 构造Response帧并发送 输入参数 : l - PPP链接 name - 待填写的Name值 输出参数 : 无 返 回 值 : 无 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2008年10月24日 作 者 : liukai 修改内容 : porting from BSD *****************************************************************************/ static VOS_VOID chap_Respond(struct link *l, const VOS_CHAR *name) { VOS_UCHAR aucResponseBody[1+MD5DIGESTSIZE+AUTHLEN]; VOS_UINT32 len; /* length of Response body */ VOS_UINT32 ulHashValueLoop; /* Response body: */ /* * ------------------- --------------------- ---------- * | HASH-Size(1B) | HASH-Value(16B) | Name | * ------------------- --------------------- ---------- */ len = 1 + MD5DIGESTSIZE + VOS_StrLen((VOS_CHAR *)name); /* BSD always thinks user name is not beyong AUTHLEN octets */ aucResponseBody[0] = MD5DIGESTSIZE; /* as CHAP only support MD5, MD5 hash value is 16 octets */ /* in our product, when rx-ed Challenge from PC, just response hash value with zero */ for (ulHashValueLoop = 1; ulHashValueLoop <= MD5DIGESTSIZE; ulHashValueLoop ++) { aucResponseBody[ulHashValueLoop] = 0x00; } if ((VOS_NULL_PTR != name) && ('\0' != *name)) { PS_MEM_CPY(&aucResponseBody[1+MD5DIGESTSIZE], name, VOS_StrLen((VOS_CHAR*)name)); } ChapOutput(l, CHAP_RESPONSE, (l->chap.auth.id), aucResponseBody, len, name); return; } /* chap_Respond */
VOS_UINT32 diag_FsQueryProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_FS_QUERY_REQ* pstFsReq = NULL; DIAG_CMD_FS_QUERY_CNF stFsCnf = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; pstFsReq = (DIAG_CMD_FS_QUERY_REQ*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); if (DIAG_FS_ROOT_FOLDER == pstFsReq->ulFolderType) { #if(VOS_OS_VER == VOS_LINUX) /* 锁定状态下,根目录受限制 */ if(g_bAtDataLocked) { stFsCnf.ulLength = VOS_StrLen((VOS_CHAR*)g_acDiagLockedRootPath); VOS_MemCpy(stFsCnf.aucDirPath,g_acDiagLockedRootPath, stFsCnf.ulLength); } else { stFsCnf.ulLength = VOS_StrLen((VOS_CHAR*)g_acDiagRootPath); VOS_MemCpy(stFsCnf.aucDirPath,g_acDiagRootPath, stFsCnf.ulLength); } #else stFsCnf.ulLength = VOS_StrLen((VOS_CHAR*)g_acDiagRootPath); VOS_MemCpy(stFsCnf.aucDirPath,g_acDiagRootPath, stFsCnf.ulLength); #endif g_stDiagFileInfo.ulFileType = DIAG_FS_ROOT_FOLDER; } else if (DIAG_FS_LOG_FOLDER == pstFsReq->ulFolderType) { stFsCnf.ulLength = VOS_StrLen((VOS_CHAR*)g_acDiagLogDir); VOS_MemCpy(stFsCnf.aucDirPath,g_acDiagLogDir, stFsCnf.ulLength); g_stDiagFileInfo.ulFileType = DIAG_FS_LOG_FOLDER; } /*临终遗言文件所在的路径*/ else if (DIAG_FS_DUMP_FOLDER == pstFsReq->ulFolderType) { stFsCnf.ulLength = VOS_StrLen((VOS_CHAR*)g_acDiagDumpDir); VOS_MemCpy(stFsCnf.aucDirPath, g_acDiagDumpDir, stFsCnf.ulLength); g_stDiagFileInfo.ulFileType = DIAG_FS_DUMP_FOLDER; } else { ret = ERR_MSP_FAILURE; } stFsCnf.ulRet = ret; /*打包回复给FW*/ ret = diag_AgentCnfFun((VOS_UINT8*)&stFsCnf,ulCmdId,sizeof(DIAG_CMD_FS_QUERY_CNF)); return ret; }
/***************************************************************************** Function : NV_GetFileAbsolutPath Description: concatenate one string to another Input : VOS_CHAR *pcFolderPath -> Folder absolute path VOS_CHAR *pcFileName -> File name VOS_UINT32 ulFilePathStrLen->File path len Return : A pointer to destination Other : *****************************************************************************/ VOS_CHAR *NV_GetFileAbsltPath(const VOS_CHAR *pcFolderPath, const VOS_CHAR *pcFileName , VOS_CHAR *pcFilePath, VOS_UINT32 ulFilePathLen) { VOS_StrNCpy(pcFilePath, (VOS_CHAR*)pcFolderPath, (ulFilePathLen - 1)); strncat(pcFilePath, pcFileName, (ulFilePathLen - VOS_StrLen(pcFilePath) - 1)); /* make coverity happy */ pcFilePath[VOS_StrLen(pcFilePath)] = '\0'; return pcFilePath; }
VOS_VOID TAF_APS_FillL4aSdfParaAuthInfo( APS_L4A_SDF_PARA_STRU *pstSdfParaInfo, VOS_UINT8 ucCid ) { if ( (APS_USED == g_ApsNdisAuthdataTab[ucCid].ucUsed) && ( (TAF_PDP_AUTH_TYPE_PAP == g_ApsNdisAuthdataTab[ucCid].stAuthData.enAuthType) || (TAF_PDP_AUTH_TYPE_CHAP == g_ApsNdisAuthdataTab[ucCid].stAuthData.enAuthType) || (TAF_PDP_AUTH_TYPE_MS_CHAP_V2 == g_ApsNdisAuthdataTab[ucCid].stAuthData.enAuthType) ) ) { pstSdfParaInfo->bitOpGwAuthInfo = VOS_TRUE; /* 鉴权类型 */ if (TAF_PDP_AUTH_TYPE_PAP == g_ApsNdisAuthdataTab[ucCid].stAuthData.enAuthType) { pstSdfParaInfo->stGwAuthInfo.enGwAuthType = APS_L4A_GW_AUTH_TYPE_PAP; } else { pstSdfParaInfo->stGwAuthInfo.enGwAuthType = APS_L4A_GW_AUTH_TYPE_CHAP; } /* Access Number参数保留暂不使用 */ pstSdfParaInfo->stGwAuthInfo.ucAccNumLen = 0; /* 用户名 */ pstSdfParaInfo->stGwAuthInfo.ucUserNameLen = (VOS_UINT8)VOS_StrLen((VOS_CHAR*)g_ApsNdisAuthdataTab[ucCid].stAuthData.aucUsername); if (0 != pstSdfParaInfo->stGwAuthInfo.ucUserNameLen) { PS_MEM_CPY(pstSdfParaInfo->stGwAuthInfo.aucUserName, g_ApsNdisAuthdataTab[ucCid].stAuthData.aucUsername, pstSdfParaInfo->stGwAuthInfo.ucUserNameLen); } /* 密码 */ pstSdfParaInfo->stGwAuthInfo.ucPwdLen = (VOS_UINT8)VOS_StrLen((VOS_CHAR*)g_ApsNdisAuthdataTab[ucCid].stAuthData.aucPassword); if (0 != pstSdfParaInfo->stGwAuthInfo.ucPwdLen) { PS_MEM_CPY(pstSdfParaInfo->stGwAuthInfo.aucPwd, g_ApsNdisAuthdataTab[ucCid].stAuthData.aucPassword, pstSdfParaInfo->stGwAuthInfo.ucPwdLen); } } else { pstSdfParaInfo->bitOpGwAuthInfo = VOS_FALSE; } }
/***************************************************************************** 函 数 名 : DMS_ReadPortCfgFile 功能描述 : PortCfg虚拟文件读实现 输入参数 : file --- 文件句柄 buf --- 用户空间 ppos --- 文件偏移,参数未使用 输出参数 : 无 返 回 值 : 成功或失败 修改历史 : 1.日 期 : 2013年10月25日 修改内容 : 新生成函数 *****************************************************************************/ ssize_t DMS_ReadPortCfgFile( struct file *file, char __user *buf, size_t len, loff_t *ppos ) { VOS_CHAR acModeTemp[DMS_PORTCFG_FILE_LEN]; VOS_INT32 lRlst; VOS_UINT32 ulLength; if (*ppos > 0) { return 0; } VOS_MemSet(acModeTemp, 0x00, DMS_PORTCFG_FILE_LEN); VOS_sprintf((VOS_CHAR *)acModeTemp, "%d", g_stDmsMainInfo.ulPortCfgValue); ulLength = VOS_StrLen(acModeTemp); len = PS_MIN(len, ulLength); /*拷贝内核空间数据到用户空间上面*/ lRlst = copy_to_user(buf,(VOS_VOID *)acModeTemp, len); if (lRlst < 0) { return -EPERM; } *ppos += (loff_t)len; return (ssize_t)len; }
VOS_UINT32 TAF_MmiEncodeSC( TAF_SS_CODE ucSsCode, VOS_CHAR *pcOutMmiStr, VOS_UINT32 *pulScLength ) { VOS_UINT32 ulLoop; VOS_UINT32 ulTableSize; MN_MMI_SC_TABLE_STRU *pstSCType; /* 获取SC字符串 */ ulTableSize = MMI_GetSCTblSize(); pstSCType = MMI_GetSCTblAddr(); for (ulLoop = 0; ulLoop < ulTableSize; ulLoop++) { if (pstSCType->ucNetSc == ucSsCode) { *pulScLength = VOS_StrLen((VOS_CHAR *)pstSCType->pcMmiSc); (VOS_VOID)VOS_StrNCpy(pcOutMmiStr, pstSCType->pcMmiSc, *pulScLength); return VOS_TRUE; } pstSCType++; } return VOS_FALSE; }
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_UINT32 TAF_MmiEncodeEraseCcEntryMmiString( VOS_UINT32 ulEventType, VOS_VOID *pPara, VOS_CHAR *pcOutMmiStr ) { TAF_SS_ERASECC_ENTRY_REQ_STRU *pstEraseCcEntryInfo = VOS_NULL_PTR; VOS_UINT32 ulPos; VOS_UINT32 ulRet; VOS_UINT32 ulSCLength; VOS_UINT32 ulIndexLength; /* 涉及命令^CMMI CCBS去激活指定INDEX的CCBS操作格式#37*n# CCBS去激活CCBS操作格式#37# Supplementary Service Service Code SIA SIB SIC 22.093 CCBS 37 n See Section 4.5.5 where n=1-5 因为不在通用的注册,删除,激活和去激活消息中,所以不调用通用接口获取操作码 */ (VOS_VOID)VOS_StrCpy(pcOutMmiStr, "#"); ulPos = VOS_StrLen("#"); pstEraseCcEntryInfo = (TAF_SS_ERASECC_ENTRY_REQ_STRU *)pPara; /* 追加SC字符串: */ ulRet = TAF_MmiEncodeSC(pstEraseCcEntryInfo->SsCode, (pcOutMmiStr + ulPos), &ulSCLength); if (VOS_TRUE != ulRet) { MN_WARN_LOG("TAF_MmiEncodeEraseCcEntryMmiString: invalid SC parameter."); return ulRet; } ulPos += ulSCLength; /* 根据OP_CcbsIndex和CcbsIndex生成*n */ TAF_MMI_INSERT_SEPERATION_CHAR(pcOutMmiStr, ulPos); if (VOS_TRUE == pstEraseCcEntryInfo->OP_CcbsIndex) { /* 转换数字类型的INDEX为字符类型 */ ulRet = TAF_MmiEncodeCcbsIndex(pstEraseCcEntryInfo->CcbsIndex, (pcOutMmiStr + ulPos), &ulIndexLength); if (VOS_TRUE != ulRet) { MN_WARN_LOG("TAF_MmiEncodeEraseCcEntryMmiString: invalid CcbsIndex."); return ulRet; } ulPos += ulIndexLength; } /* 追加# */ *(pcOutMmiStr + ulPos) = '#'; return VOS_TRUE; }
/***************************************************************************** 函 数 名 : OM_Acpu_WriteLogFile 功能描述 : 将错误信息记录到ERRORLOG中 输入参数 : cFileName: log文件名,包含路径信息 pRecord: 记录数据内容 ulLen: 记录数据长度 输出参数 : VOID 返 回 值 : 其他:函数执行过程中出现错误 VOS_OK:函数执行正常 修改历史 : 1.日 期 : 2012年5月8日 作 者 : zhuli 修改内容 : 新生成函数 *****************************************************************************/ VOS_UINT32 OM_Acpu_WriteLogFile(VOS_CHAR * cFileName, void *pRecord, VOS_UINT32 ulLen) { OM_WRITELOG_REQ_STRU *pstLogReq; /* 参数检测 */ if ((VOS_NULL_PTR == cFileName) || (VOS_NULL_PTR == pRecord)) { return OM_ACPU_PARA_ERR; } pstLogReq = (OM_WRITELOG_REQ_STRU*)VOS_AllocMsg(ACPU_PID_OMAGENT, (sizeof(OM_WRITELOG_REQ_STRU)-VOS_MSG_HEAD_LENGTH)+ulLen); /* 分配消息失败 */ if (VOS_NULL_PTR == pstLogReq) { return OM_ACPU_ALLOC_FAIL; } pstLogReq->ulReceiverPid = CCPU_PID_OMAGENT; pstLogReq->usPrimId = OM_WRITE_LOG_REQ; pstLogReq->ulLen = ulLen; /* 为了确保aucFileName最后字节为'\0',拷贝长度需要加1 */ VOS_MemCpy(pstLogReq->aucFileName, cFileName, VOS_StrLen(cFileName)+1); VOS_MemCpy(pstLogReq->aucData, pRecord, ulLen); /* 将请求消息发送给CCPU */ if (VOS_OK != VOS_SendMsg(ACPU_PID_OMAGENT, pstLogReq)) { return OM_ACPU_SEND_FAIL; } return VOS_OK; }
/***************************************************************************** Function : NV_File_Create Description: Create empty file. Input : pcDir - the directory of NV file. pcFile- the name of NV file. Return : OK, or ERROR Other : *****************************************************************************/ VOS_INT32 NV_File_Create(VOS_CHAR *pcDir, VOS_CHAR *pcFile) { FILE *fp; VOS_CHAR acFilePath[MAX_PATH] = {0}; strncpy(acFilePath, pcDir, (MAX_PATH - 1)); if (VOS_NULL_PTR != pcFile) { strncat(acFilePath, pcFile, (MAX_PATH - VOS_StrLen(acFilePath) - 1)); } fp = DRV_FILE_OPEN(acFilePath, NV_FILE_OPEN_MODE_NEW_RW); if (VOS_NULL_PTR == fp) { return VOS_ERR; } if (VOS_OK != DRV_FILE_CLOSE(fp)) { return VOS_ERR; } return VOS_OK; }
VOS_UINT32 TAF_MmiEncodeBS( TAF_SS_BASIC_SERVICE_STRU *pstBsService, VOS_CHAR *pcOutMmiStr, VOS_UINT32 *pulBSLength ) { VOS_UINT32 ulLoop; VOS_UINT32 ulTableSize; MN_MMI_BS_TABLE_STRU *pstBsType = VOS_NULL_PTR; /* 获取BS字符串 */ ulTableSize = MMI_GetBSTblSize(); pstBsType = MMI_GetBSTblAddr(); for (ulLoop = 0; ulLoop < ulTableSize; ulLoop++) { if ((pstBsType->ucNetBsCode == pstBsService->BsServiceCode) && (pstBsType->ucNetBsType == pstBsService->BsType)) { *pulBSLength = VOS_StrLen((VOS_CHAR *)pstBsType->pcMmiBs); (VOS_VOID)VOS_StrNCpy(pcOutMmiStr, pstBsType->pcMmiBs, *pulBSLength); return VOS_TRUE; } pstBsType++; } /* 如果在BS表中没有找到对应的项,仍然返回成功做call control检查 */ *pulBSLength = 0; *pcOutMmiStr = VOS_NULL_PTR; return VOS_TRUE; }
/***************************************************************************** 函 数 名 : chap_Success 功能描述 : 构造Success帧并发送 输入参数 : l - PPP链接 输出参数 : 无 返 回 值 : 无 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2008年10月25日 作 者 : liukai 修改内容 : porting from BSD *****************************************************************************/ static VOS_VOID chap_Success(struct link *l) { struct authinfo *authp = &(l->chap.auth); const VOS_CHAR *pcMsg = "Welcome!!"; /* follow BSD use "Welcome!!" as message */ /* Success body: */ /* * ------------- * | Message | * ------------- */ ChapOutput(l, CHAP_SUCCESS, authp->id, (VOS_UCHAR *)pcMsg, VOS_StrLen((VOS_CHAR *)pcMsg), VOS_NULL_PTR); l->lcp.auth_ineed = 0; /* after Authentication, clear flag to authenticate peer */ if (0 == l->lcp.auth_iwait) /* auth_iwait: 0, authentication to peer is not complete or no need to authentication, !0, authentication to peer is complete */ { /* * Either I didn't need to authenticate, or I've already been * told that I got the answer right. */ chap_ReInit(&(l->chap)); if (PHASE_AUTHENTICATE == l->phase) { l->phase = PHASE_NETWORK; l->ipcp.fsm.state = ST_CLOSED; fsm_Open(&(l->ipcp.fsm)); PPP_MNTN_LOG(PS_PID_APP_PPP, 0, PS_PRINT_NORMAL, "goto ipcp stage!\r\n"); } } return; } /* chap_Success */
ssize_t DMS_ReadGetSliceFile( struct file *file, char __user *buf, size_t len, loff_t *ppos ) { VOS_CHAR acModeTemp[DMS_GET_SLICE_FILE_LEN]; VOS_UINT32 ulLength; VOS_UINT32 ulHigh32bitValue; VOS_UINT32 ulLow32bitValue; if (*ppos > 0) { return 0; } /* 初始化 */ ulLength = 0; ulHigh32bitValue = 0; ulLow32bitValue = 0; VOS_MemSet(acModeTemp, 0x00, DMS_GET_SLICE_FILE_LEN); /* 获取时间 Seattle 和 Portland不一样 */ DRV_GET_BBP_TIMER_VALUE(&ulHigh32bitValue, &ulLow32bitValue); if (ulHigh32bitValue != 0) { VOS_sprintf((VOS_CHAR *)acModeTemp, "%x%08x", ulHigh32bitValue, ulLow32bitValue); } else { VOS_sprintf((VOS_CHAR *)acModeTemp, "%x", ulLow32bitValue); } ulLength = VOS_StrLen(acModeTemp); len = PS_MIN(len, ulLength); /*拷贝内核空间数据到用户空间上面*/ if (0 == copy_to_user(buf,(VOS_VOID *)acModeTemp, (VOS_ULONG)len)) { *ppos += (loff_t)len; return (ssize_t)len; } else { return -EPERM; } }
/***************************************************************************** Function : NV_File_Check Description: Check NV file's security. Input : pcDir - the directory of NV file. pcFile- the name of NV file. Return : OK, or ERROR Other : *****************************************************************************/ VOS_INT32 NV_File_Check(VOS_CHAR *pcDir, VOS_CHAR *pcFile) { VOS_CHAR acFilePath[MAX_PATH] = {0}; strncpy(acFilePath, pcDir, (MAX_PATH - 1)); if (VOS_NULL_PTR != pcFile) { strncat(acFilePath, pcFile, (MAX_PATH - VOS_StrLen(acFilePath) - 1)); } return DRV_NV_FILE_SEC_CHECK(acFilePath); }
/***************************************************************************** Function : NV_File_Exist Description: Judge the NV file is exist. Input : pcDir - the directory of NV file. pcFile- the name of NV file. Return : OK, or ERROR Other : *****************************************************************************/ VOS_INT32 NV_File_Exist(VOS_CHAR *pcDir, VOS_CHAR *pcFile) { VOS_INT32 lRslt; VOS_CHAR acFilePath[MAX_PATH] = {0}; strncpy(acFilePath, pcDir, (MAX_PATH - 1)); if (VOS_NULL_PTR != pcFile) { strncat(acFilePath, pcFile, (MAX_PATH - VOS_StrLen(acFilePath) - 1)); } lRslt = DRV_FILE_ACCESS(acFilePath, NV_FILE_EXIST_OK); return lRslt; }
VOS_UINT32 SetApcoffsetFlag(VOS_CHAR * calibData) { VOS_UINT8 a_converArray[sizeof(FTM_SCALIB_APCOFFSET_SETTING_STRU)]; if(NULL == g_pstApcoffsetFlag || NULL == calibData) { return ERR_MSP_FAILURE; } MSP_MEMSET(a_converArray, 0x00, sizeof(FTM_SCALIB_APCOFFSET_SETTING_STRU)); ATR_MC_ASCII_TO_TPDU(calibData, a_converArray, (VOS_UINT16)VOS_StrLen(calibData), sizeof(FTM_SCALIB_APCOFFSET_SETTING_STRU) * 2 + 1); MSP_MEMCPY(g_pstApcoffsetFlag, a_converArray, sizeof(FTM_SCALIB_APCOFFSET_SETTING_STRU)); return ERR_MSP_SUCCESS; }
/***************************************************************************** 函 数 名 : DMS_WritePortCfgFile 功能描述 : PortCfg虚拟文件写实现 输入参数 : file ----- 文件句柄 buf ----- 用户空间数据 lLength -- 用户数据长度 ppos - ----文件偏移,参数未使用 输出参数 : 无 返 回 值 : 成功或失败 修改历史 : 1.日 期 : 2013年10月25日 修改内容 : 新生成函数 *****************************************************************************/ ssize_t DMS_WritePortCfgFile( struct file *file, const char __user *buf, size_t len, loff_t *ppos ) { VOS_CHAR acModeTemp[DMS_PORTCFG_FILE_LEN]; VOS_UINT32 ulRlst; VOS_UINT32 ulStrLen; VOS_UINT32 i; VOS_UINT32 ulValue; ulValue = 0; VOS_MemSet(acModeTemp, 0x00, DMS_PORTCFG_FILE_LEN); if (len >= DMS_PORTCFG_FILE_LEN) { return -ENOSPC; } /*拷贝用户空间数据到内核空间上面*/ ulRlst = copy_from_user((VOS_VOID *)acModeTemp, (VOS_VOID *)buf, len); if (ulRlst > 0) { return -EFAULT; } acModeTemp[len] = '\0'; ulStrLen = VOS_StrLen(acModeTemp); for ( i = 0; i < ulStrLen; i++ ) { if ( (acModeTemp[i] >= '0') && (acModeTemp[i] <= '9') ) { ulValue = (ulValue * 10) + (acModeTemp[i] - '0'); } } g_stDmsMainInfo.ulPortCfgValue = ulValue; /* 如果已经写过这个文件,则以写的值为准,后续不需要再读NVE */ g_stDmsMainInfo.bPortCfgFlg = TRUE; return (ssize_t)len; }
/***************************************************************************** 函 数 名 : chap_Challenge 功能描述 : 构造Challenge帧并发送 输入参数 : l - PPP链接 输出参数 : 无 返 回 值 : 无 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2008年10月25日 作 者 : liukai 修改内容 : porting from BSD *****************************************************************************/ VOS_VOID chap_Challenge(struct link *l) { struct chap *chap = &(l->chap); VOS_UINT32 len, i; VOS_UINT8 *cp; VOS_UINT32 ulTick; const VOS_CHAR acLocalChallenge[] = "HUAWEI_CHAP_SRVR"; /* we always use "HUAWEI_CHAP_SRVR" as Name of Challenge */ /* Challenge body: */ /* * ------------------------ --------------------- ---------- * | Challenge-Size(1B) | Challenge-Value | Name | * ------------------------ --------------------- ---------- */ len = VOS_StrLen((VOS_CHAR *)acLocalChallenge); if (0x0 == *(chap->challenge.local)) { /* as each time local[0] is 0x0, here is always true */ ulTick = VOS_GetTick(); VOS_SetSeed(ulTick); /* use current tick as seed of random algorithm */ cp = chap->challenge.local; /*AT2D19295 测试组建议challenge中随机字符串长度固定为16,和标杆一致 */ *cp++ = (VOS_UINT8)(MD5DIGESTSIZE); /* *cp++ = (VOS_UINT8)(PS_RAND(CHAPCHALLENGELEN-MD5DIGESTSIZE) + MD5DIGESTSIZE); 随机字串长度本为任意长度, 存放在local的第一个字节,为了防止对端只支持MD5而要求长度为16, 特意保证长度至少16字节 */ for (i = 0; i < *(chap->challenge.local); i++) { *cp++ = (VOS_UINT8)PS_RAND(PS_NULL_UINT8+1); /* 随机字串 */ } /* use memcpy instead of strcpy, as "The Name should not be NUL or CR/LF terminated." in RFC1994 */ PS_MEM_CPY(cp, acLocalChallenge, len); } /* each time send challenge, record its packet */ ChapBufferChallengePacket(chap, chap->auth.id, chap->challenge.local, 1 + *(chap->challenge.local) + len); ChapOutput(l, CHAP_CHALLENGE, chap->auth.id, chap->challenge.local, 1 + *(chap->challenge.local) + len, VOS_NULL_PTR); /* 1: challenge length, *local: 随机字串长度, len: Name length */ return; } /* chap_Challenge */
/***************************************************************************** 函 数 名 : PIH_GetVsimAPN 功能描述 : VSIM卡APN接口 输入参数 : APN的存储空间 输出参数 : 无 修订记录 : 1. 日 期 : 2014年10月9日 作 者 : 祝锂 修改内容 : Creat *****************************************************************************/ VOS_VOID PIH_GetVsimAPN(VOS_UINT32 ulApnMax, VOS_UINT8 *pucApnData, VOS_UINT8 *pucApnLen) { #if (FEATURE_ON == FEATURE_VSIM) VOS_UINT32 ulDataLen; if ((VOS_NULL_PTR == pucApnData)||(VOS_NULL_PTR == pucApnLen)) { PIH_WARNING_LOG("PIH_GetVsimAPN: Input Para is NULL"); return; } if (VOS_FALSE == USIMM_VsimIsActive()) /*VSIM is Disable*/ { PIH_WARNING_LOG("PIH_GetVsimAPN: USIMM_VsimIsActive return False"); return; } if (VOS_OK != VOS_TaskLock()) { PIH_WARNING_LOG("PIH_GetVsimAPN: VOS_TaskLock Error"); return; } ulDataLen = VOS_StrLen((VOS_CHAR*)g_aucVsimAPNData); if ((VOS_NULL != ulDataLen)&&(ulApnMax >= ulDataLen)) { VOS_MemCpy(pucApnData, g_aucVsimAPNData, ulDataLen); /*拷贝不包含字符串结尾*/ *pucApnLen = (VOS_UINT8)ulDataLen; } else { PIH_WARNING1_LOG("PIH_GetVsimAPN: VSIM Apn Data Len is %d", (VOS_INT32)ulDataLen); } VOS_TaskUnlock(); #endif return; }
ssize_t RNIC_ReadDialEventReportFile( struct file *file, char __user *buf, size_t len, loff_t *ppos ) { RNIC_DIAL_MODE_STRU *pstDialMode; VOS_CHAR acDialEventTemp[RNIC_EVENTFLAG_FILE_LEN]; VOS_UINT32 ulDialEventLen; if (*ppos > 0) { RNIC_ERROR_LOG(ACPU_PID_RNIC, "RNIC_ReadDialEventReportFile:ppos err!"); return 0; } PS_MEM_SET(acDialEventTemp, 0x00, RNIC_EVENTFLAG_FILE_LEN); /* 获取按需拨号的模式以及时长的地址 */ pstDialMode = RNIC_GetDialModeAddr(); VOS_sprintf(acDialEventTemp, "%d", pstDialMode->enEventReportFlag); ulDialEventLen = VOS_StrLen(acDialEventTemp); len = PS_MIN(len, ulDialEventLen); /*拷贝内核空间数据到用户空间上面*/ if (0 == copy_to_user(buf, (VOS_VOID *)acDialEventTemp, len)) { *ppos += (loff_t)len; return (ssize_t)len; } else { RNIC_ERROR_LOG(ACPU_PID_RNIC, "RNIC_ReadDialEventReportFile:copy_to_user err!"); return -EPERM; } }
VOS_UINT32 OmPrintfWriteData(VOS_UINT32 ulModuleID, VOS_UINT32 ulLevel, VOS_CHAR *pcStr, VOS_UINT32 ulStrLen) { VOS_CHAR *pcWarning; VOS_UINT32 ulTempLen; VOS_UINT32 ulDataLen; /* 数组前四字节存储模块ID,接着四个直接存储打印机别,从第九字节开始为转换后字符串, 为确保在转换为字符串过程中不越界,多定义四字节作保护 */ /*lint -e813 */ VOS_CHAR acOutput[VOS_MAX_PRINT_LEN + 12]; /*lint +e813 */ /*数据头部需要默认填写*/ *((VOS_UINT32*)acOutput) = ulModuleID; *(((VOS_UINT32*)acOutput)+1) = ulLevel; /* 添加字符串结束标志 */ acOutput[VOS_MAX_PRINT_LEN + OM_PRINTF_OFFSET - 1] = '\0'; /* 对输入进行判断,并在转换后字符串中添加相应提示信息 */ if( ulStrLen >= (VOS_MAX_PRINT_LEN - 1) ) { pcWarning = "OM_Printf: Warning!Print too long!!!"; ulTempLen = VOS_StrLen(pcWarning); VOS_MemCpy(acOutput + OM_PRINTF_OFFSET, pcWarning, ulTempLen); /* 在转换后字符串倒数第二个字节添加换行符 */ acOutput[VOS_MAX_PRINT_LEN + OM_PRINTF_OFFSET- 2] = '\n'; ulDataLen = VOS_MAX_PRINT_LEN + OM_PRINTF_OFFSET - 1; } else { ulDataLen = (VOS_UINT32)ulStrLen + OM_PRINTF_OFFSET; if ( VOS_OK != copy_from_user(acOutput + OM_PRINTF_OFFSET, pcStr, ulStrLen) ) /*拷贝用户空间数据到内核空间上面*/ { /* make Coverity happy*/ } } OM_PrintfDataPut(acOutput, ulDataLen); return VOS_OK; }
ssize_t RNIC_ReadIdleTimerOutFile( struct file *file, char __user *buf, size_t len, loff_t *ppos ) { RNIC_DIAL_MODE_STRU *pstDialMode; VOS_CHAR acIdleTimeTemp[RNIC_IDLETIMEROUT_FILE_LEN]; VOS_UINT32 ulIdleTimeLen; if (*ppos > 0) { RNIC_ERROR_LOG(ACPU_PID_RNIC, "RNIC_ReadIdleTimerOutFile:ppos ERR!"); return 0; } PS_MEM_SET(acIdleTimeTemp, 0x00, RNIC_IDLETIMEROUT_FILE_LEN); /* 获取按需拨号的模式以及时长的地址 */ pstDialMode = RNIC_GetDialModeAddr(); VOS_sprintf(acIdleTimeTemp, "%d", pstDialMode->ulIdleTime); ulIdleTimeLen = VOS_StrLen(acIdleTimeTemp); len = PS_MIN(len, ulIdleTimeLen); /*拷贝内核空间数据到用户空间上面*/ if (0 == copy_to_user(buf,(VOS_VOID *)acIdleTimeTemp, len)) { *ppos += (loff_t)len; return (ssize_t)len; } else { RNIC_ERROR_LOG(ACPU_PID_RNIC, "RNIC_ReadIdleTimerOutFile:copy_to_user ERR!"); return -EPERM; } }
VOS_UINT32 TAF_MmiEncodeOperationTypeString( VOS_UINT32 ulEventType, VOS_CHAR *pcOutMmiStr, VOS_UINT32 *pulLength ) { VOS_UINT32 ulRet; VOS_UINT32 ulLoop; VOS_UINT32 ulTableSize; MN_MMI_OPERATION_TYPE_ENUM_U8 enSsOpType; MN_MMI_SS_OP_Tbl_STRU *pstOperationType = VOS_NULL_PTR; /* 获取事件对应的操作类型 */ ulRet = TAF_MmiGetOperationType(ulEventType, &enSsOpType); /* 获取业务操作类型失败,返回编码失败 */ if (VOS_FALSE == ulRet) { return VOS_FALSE; } /* 获取补充业务操作类型字符串 */ ulTableSize = MMI_GetOporationTypeTblSize(); pstOperationType = MMI_GetOporationTypeTblAddr(); for (ulLoop = 0; ulLoop < ulTableSize; ulLoop++) { if (enSsOpType == pstOperationType->enSsOpType) { *pulLength = VOS_StrLen((VOS_CHAR *)pstOperationType->pcSsOpStr); (VOS_VOID)VOS_StrNCpy((VOS_CHAR *)pcOutMmiStr, (VOS_CHAR *)pstOperationType->pcSsOpStr, *pulLength); return VOS_TRUE; } pstOperationType++; } return VOS_FALSE; }
/***************************************************************************** Function : NV_File_Remove Description: remove a file Input : VOS_CHAR *pcFileName -> File name Return : OK, or ERROR Other : *****************************************************************************/ VOS_INT32 NV_File_Remove(VOS_CHAR *pcDir, VOS_CHAR *pcFile) { VOS_INT32 lRslt; VOS_CHAR acFilePath[MAX_PATH] = {0}; strncpy(acFilePath, pcDir, (MAX_PATH - 1)); if (VOS_NULL_PTR != pcFile) { strncat(acFilePath, pcFile, (MAX_PATH - VOS_StrLen(acFilePath) - 1)); } lRslt = DRV_FILE_RMFILE(acFilePath); if(VOS_OK != lRslt) { NV_Printf("Remove File %s fail.\r\n", acFilePath); } return lRslt; }
VOS_VOID TAF_MmiEncodeDN( TAF_SS_REGISTERSS_REQ_STRU *pstRegisterInfo, VOS_CHAR *pcOutMmiStr, VOS_UINT32 *pulDNLength ) { VOS_UINT32 ulNumberLength; ulNumberLength = VOS_StrLen((VOS_CHAR *)pstRegisterInfo->aucFwdToNum); if (ulNumberLength > TAF_SS_MAX_FORWARDED_TO_NUM_LEN) { ulNumberLength = TAF_SS_MAX_FORWARDED_TO_NUM_LEN; } (VOS_VOID)VOS_StrNCpy(pcOutMmiStr, (VOS_CHAR *)pstRegisterInfo->aucFwdToNum, ulNumberLength); /* 根据目的号码和子号码字符串输出*DN和长度 */ *pulDNLength = ulNumberLength; return; }
VOS_UINT32 RNIC_TransferStringToInt(VOS_CHAR *pcString) { VOS_UINT32 ulStrLen; VOS_UINT32 i; VOS_UINT32 ulRst; ulStrLen = 0; ulRst = 0; ulStrLen = VOS_StrLen(pcString); for ( i = 0; i < ulStrLen; i++ ) { if ( (pcString[i] >= '0') && (pcString[i] <= '9') ) { ulRst = (ulRst * 10) + (pcString[i] - '0'); } } return ulRst; }
VOS_UINT32 OM_OledDisplay(VOS_UINT16 usXPos, VOS_UINT16 usYPos, VOS_CHAR *pcString) { VOS_UINT32 ulLen; OM_OLED_DISPLAY_REQ_STRU *pstOledMsg; /* 参数检测 */ if (VOS_NULL_PTR == pcString) { return VOS_ERR; } /* 获取字符串的长度 */ ulLen = VOS_StrLen(pcString); /* 消息内容中需要包括\0 */ ulLen++; /* 分配消息内存 */ pstOledMsg = (OM_OLED_DISPLAY_REQ_STRU*)VOS_AllocMsg(CCPU_PID_OMAGENT, (sizeof(OM_OLED_DISPLAY_REQ_STRU) - VOS_MSG_HEAD_LENGTH) + ulLen); if (VOS_NULL_PTR == pstOledMsg) { return VOS_ERR; } pstOledMsg->ulReceiverPid = ACPU_PID_OMAGENT; pstOledMsg->usPrimId = OM_OLED_DISPLAY_REQ; pstOledMsg->usXPos = usXPos; pstOledMsg->usYPos = usYPos; VOS_MemCpy((VOS_UINT8*)pstOledMsg + sizeof(OM_OLED_DISPLAY_REQ_STRU), pcString, ulLen); /* 将消息发送给ACPU */ return VOS_SendMsg(CCPU_PID_OMAGENT, pstOledMsg); }
VOS_UINT32 diag_FsGetItemInfo(VOS_CHAR *pDirectory,DIAG_DIR_FILE_INFO_STRU *pstDirFileInfo) { /*lint -save -e958*/ DIAG_DIRENT_STRU *pstTmpDirent; DIAG_STAT_STRU stStat; VOS_UINT8 *pDirName; VOS_UINT16 usDirLen; VOS_UINT32 ultemp_len = 0; VOS_INT32 dir_handle =0; /*lint -restore*/ /*再次打开目录*/ dir_handle = (VOS_INT32)DIAG_FS_OPENDIR(pDirectory,DIAG_FS_RDONLY|DIAG_FS_DIRECTORY,0); /* [false alarm]:屏蔽Fortify */ if(dir_handle < 0) { return VOS_ERR; } /*分配空间用来存放文件或文件夹的路径,加1是因为后面需要添加斜杠*/ pDirName = (VOS_UINT8*)VOS_MemAlloc(diag_GetAgentPid(), DYNAMIC_MEM_PT,MSP_DF_DIR_MAX_LEN); if (VOS_NULL_PTR == pDirName) { DIAG_FS_CLOSEDIR(dir_handle); return VOS_ERR; } /*将目录路径拷贝进文件路径中*/ usDirLen = (VOS_UINT16)VOS_StrLen((VOS_CHAR*)pDirectory); VOS_MemCpy(pDirName, pDirectory, usDirLen); /*由于目录路径是不以斜杠结束,在与文件名结合时,需要添加斜杠*/ pDirName[usDirLen] = '/'; usDirLen++; do { /*遍历整个pstDir指向路径中的所有文件和文件夹*/ pstTmpDirent = (DIAG_DIRENT_STRU *)DIAG_FS_READDIR(dir_handle); /*readdir的返回值为空,表明目录浏览完毕*/ /*lint -save -e830*/ if (VOS_NULL_PTR != pstTmpDirent) /*lint -restore*/ { /*得到文件或文件夹名的长度*/ ultemp_len = (VOS_UINT16)VOS_StrLen(pstTmpDirent->d_name); /* [false alarm]:屏蔽Fortify */ /*由于文件或文件夹路径需要以'\0'作为结束,所以在Copy时,长度加1*/ VOS_MemCpy(pDirName + usDirLen,pstTmpDirent->d_name, ultemp_len + 1); /*通过stat获取文件或文件夹的信息*/ /*lint -save -e628*/ if (DIAG_FS_ERROR == DIAG_FS_STAT((VOS_CHAR*)pDirName, &stStat))/*lint !e628*/ { /*lint -restore*/ pstDirFileInfo->ulItemType = DIAG_FS_ITEM_FILE; pstDirFileInfo->st_size = 0; pstDirFileInfo->st_mode = 0; pstDirFileInfo->st_atime = 0; pstDirFileInfo->st_mtime = 0; pstDirFileInfo->st_ctime = 0; } else { /*目录*/ if (0 != (DIAG_IF_DIR&stStat.st_mode)) { pstDirFileInfo->ulItemType = DIAG_FS_ITEM_FOLDER; } /*文件*/ else { pstDirFileInfo->ulItemType = DIAG_FS_ITEM_FILE; } pstDirFileInfo->st_size = (stStat.st_size & 0xFFFFFFFF);/* 目前文件大小不会超过32位大小 */ pstDirFileInfo->st_atime = (VOS_INT32)(stStat.st_atime); pstDirFileInfo->st_mtime = (VOS_INT32)(stStat.st_mtime); pstDirFileInfo->st_ctime = (VOS_INT32)(stStat.st_ctime); pstDirFileInfo->st_mode = stStat.st_mode; } /*文件或文件夹名*/ VOS_MemCpy(pstDirFileInfo->aucDirName, pstTmpDirent->d_name, ultemp_len +1); /* coverity[suspicious_pointer_arithmetic] */ pstDirFileInfo = pstDirFileInfo + sizeof(DIAG_DIR_FILE_INFO_STRU ); } }while(VOS_NULL_PTR != pstTmpDirent); VOS_MemFree(diag_GetAgentPid(), pDirName); DIAG_FS_CLOSEDIR(dir_handle); return VOS_OK; }
VOS_VOID TAF_APS_SndL4aSetPdprofReq( VOS_VOID *pMsgData ) { TAF_PS_SET_PROFILE_INFO_REQ_STRU *pstPdprofInfoReq; APS_L4A_SET_PDPROFMOD_REQ_STRU *pstPdprofmodReq; /* 参数初始化 */ pstPdprofInfoReq = (TAF_PS_SET_PROFILE_INFO_REQ_STRU*)(pMsgData); /* 构造消息 */ pstPdprofmodReq = (APS_L4A_SET_PDPROFMOD_REQ_STRU*)PS_ALLOC_MSG_WITH_HEADER_LEN( WUEPS_PID_TAF, sizeof(APS_L4A_SET_PDPROFMOD_REQ_STRU)); if (VOS_NULL_PTR == pstPdprofmodReq) { TAF_ERROR_LOG(WUEPS_PID_TAF, "TAF_APS_SndL4aSetPdprofReq: Memory alloc failed."); return; } /* 初始化消息 */ PS_MEM_SET((VOS_CHAR*)pstPdprofmodReq + VOS_MSG_HEAD_LENGTH, 0x00, sizeof(APS_L4A_SET_PDPROFMOD_REQ_STRU) - VOS_MSG_HEAD_LENGTH); /* 填写消息头 */ pstPdprofmodReq->ulReceiverCpuId = VOS_LOCAL_CPUID; pstPdprofmodReq->ulReceiverPid = MSP_L4_L4A_PID; pstPdprofmodReq->enMsgId = ID_APS_L4A_SET_PDPROFMOD_REQ; /* 填写消息内容 */ pstPdprofmodReq->stCtrl.ulPid = pstPdprofInfoReq->stCtrl.ulModuleId; pstPdprofmodReq->stCtrl.ulClientId = pstPdprofInfoReq->stCtrl.usClientId; pstPdprofmodReq->stCtrl.ulOpId = pstPdprofInfoReq->stCtrl.ucOpId; pstPdprofmodReq->stPdprofmod.bitOpPdpType = pstPdprofInfoReq->stPdpProfInfo.bitOpPdpType; pstPdprofmodReq->stPdprofmod.bitOpApn = pstPdprofInfoReq->stPdpProfInfo.bitOpApn; pstPdprofmodReq->stPdprofmod.bitOpPassword = pstPdprofInfoReq->stPdpProfInfo.bitOpPassword; pstPdprofmodReq->stPdprofmod.bitOpUsername = pstPdprofInfoReq->stPdpProfInfo.bitOpUsername; pstPdprofmodReq->stPdprofmod.bitOpAuthType = pstPdprofInfoReq->stPdpProfInfo.bitOpAuthType; pstPdprofmodReq->stPdprofmod.bitOpSpare = pstPdprofInfoReq->stPdpProfInfo.bitOpSpare; pstPdprofmodReq->stPdprofmod.ucCid = pstPdprofInfoReq->stPdpProfInfo.ucCid; pstPdprofmodReq->stPdprofmod.ucDefined = pstPdprofInfoReq->stPdpProfInfo.ucDefined; pstPdprofmodReq->stPdprofmod.enPdpType = pstPdprofInfoReq->stPdpProfInfo.enPdpType; PS_MEM_CPY((VOS_UINT8*)(pstPdprofmodReq->stPdprofmod.aucApn), (VOS_UINT8*)(pstPdprofInfoReq->stPdpProfInfo.aucApn), (APS_L4A_MAX_APN_LEN + 1)); pstPdprofmodReq->stPdprofmod.ucAuthType = pstPdprofInfoReq->stPdpProfInfo.ucAuthType; pstPdprofmodReq->stPdprofmod.ucPwdLen = (VOS_UINT8)VOS_StrLen((VOS_CHAR*)pstPdprofInfoReq->stPdpProfInfo.aucPassWord); pstPdprofmodReq->stPdprofmod.ucUserNameLen = (VOS_UINT8)VOS_StrLen((VOS_CHAR*)pstPdprofInfoReq->stPdpProfInfo.aucUserName); PS_MEM_CPY(pstPdprofmodReq->stPdprofmod.aucPassWord, pstPdprofInfoReq->stPdpProfInfo.aucPassWord, pstPdprofmodReq->stPdprofmod.ucPwdLen); PS_MEM_CPY(pstPdprofmodReq->stPdprofmod.aucUserName, pstPdprofInfoReq->stPdpProfInfo.aucUserName, pstPdprofmodReq->stPdprofmod.ucUserNameLen); /* 发送消息 */ if (VOS_OK != PS_SEND_MSG(WUEPS_PID_TAF, pstPdprofmodReq)) { TAF_ERROR_LOG(WUEPS_PID_TAF, "TAF_APS_SndL4aSetPdprofReq: Send message failed."); return; } return; }
VOS_VOID TAF_APS_SndL4aSetAuthdataReq( VOS_VOID *pMsgData ) { TAF_PS_SET_AUTHDATA_INFO_REQ_STRU *pstAuthdataInfoReq; APS_L4A_SET_AUTHDATA_REQ_STRU *pstAuthdataReq; /* 参数初始化 */ pstAuthdataInfoReq = (TAF_PS_SET_AUTHDATA_INFO_REQ_STRU*)(pMsgData); /* 构造消息 */ pstAuthdataReq = (APS_L4A_SET_AUTHDATA_REQ_STRU*)PS_ALLOC_MSG_WITH_HEADER_LEN( WUEPS_PID_TAF, sizeof(APS_L4A_SET_AUTHDATA_REQ_STRU)); if (VOS_NULL_PTR == pstAuthdataReq) { TAF_ERROR_LOG(WUEPS_PID_TAF, "TAF_APS_SndL4aSetAuthdataReq: Memory alloc failed."); return; } /* 初始化消息 */ PS_MEM_SET((VOS_CHAR*)pstAuthdataReq + VOS_MSG_HEAD_LENGTH, 0x00, sizeof(APS_L4A_SET_AUTHDATA_REQ_STRU) - VOS_MSG_HEAD_LENGTH); /* 填写消息头 */ pstAuthdataReq->ulReceiverCpuId = VOS_LOCAL_CPUID; pstAuthdataReq->ulReceiverPid = MSP_L4_L4A_PID; pstAuthdataReq->enMsgId = ID_APS_L4A_SET_AUTHDATA_REQ; /* 填写消息内容 */ pstAuthdataReq->stCtrl.ulPid = pstAuthdataInfoReq->stCtrl.ulModuleId; pstAuthdataReq->stCtrl.ulClientId = pstAuthdataInfoReq->stCtrl.usClientId; pstAuthdataReq->stCtrl.ulOpId = pstAuthdataInfoReq->stCtrl.ucOpId; pstAuthdataReq->stAuthData.ucCid = pstAuthdataInfoReq->stAuthDataInfo.ucCid; pstAuthdataReq->stAuthData.ucDefined = pstAuthdataInfoReq->stAuthDataInfo.ucDefined; pstAuthdataReq->stAuthData.usAuthType = pstAuthdataInfoReq->stAuthDataInfo.enAuthType; pstAuthdataReq->stAuthData.ucPwdLen = (VOS_UINT8)VOS_StrLen((VOS_CHAR*)pstAuthdataInfoReq->stAuthDataInfo.aucPassWord); pstAuthdataReq->stAuthData.ucUserNameLen = (VOS_UINT8)VOS_StrLen((VOS_CHAR*)pstAuthdataInfoReq->stAuthDataInfo.aucUserName); TAF_APS_String2Hex(pstAuthdataInfoReq->stAuthDataInfo.aucPlmn, (VOS_UINT16)(VOS_StrLen((VOS_CHAR*)pstAuthdataInfoReq->stAuthDataInfo.aucPlmn)), &(pstAuthdataReq->stAuthData.ulPLMN)); PS_MEM_CPY(pstAuthdataReq->stAuthData.aucPassword, pstAuthdataInfoReq->stAuthDataInfo.aucPassWord, pstAuthdataReq->stAuthData.ucPwdLen); PS_MEM_CPY(pstAuthdataReq->stAuthData.aucUserName, pstAuthdataInfoReq->stAuthDataInfo.aucUserName, pstAuthdataReq->stAuthData.ucUserNameLen); /* 发送消息 */ if (VOS_OK != PS_SEND_MSG(WUEPS_PID_TAF, pstAuthdataReq)) { TAF_ERROR_LOG(WUEPS_PID_TAF, "TAF_APS_SndL4aSetAuthdataReq: Send message failed."); return; } return; }