/*****************************************************************************
 函 数 名  : 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;
}
Ejemplo n.º 4
0
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;
    }
}
Ejemplo n.º 5
0
/*****************************************************************************
 函 数 名  : 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;
}
Ejemplo n.º 16
0
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;
}
Ejemplo n.º 17
0
/*****************************************************************************
 函 数 名  : 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;
}
Ejemplo n.º 27
0
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;
}