コード例 #1
0
BST_APP_CEmailIMAP::BST_APP_CEmailIMAP( const EMAIL_ACCOUNT_STRU *penInAccountInfo )
    : BST_APP_CEmailPacketProc( penInAccountInfo )
{
    m_usTag                     = BST_IMAP_START_TAG;
    m_lServerState              = BST_EMAIL_UNCONNECT;
    m_pstrImapIDCmd             = BST_LIB_StrCreat( BST_LIB_SHORT_STR_LEN );
    BST_ASSERT_NORM( BST_NULL_PTR == m_pstrImapIDCmd );
    m_pcServerResponse0         = (BST_UINT8 *)BST_OS_MALLOC( BST_IMAP_COLUMN_MAX );
    if ( BST_NULL_PTR == m_pcServerResponse0 )
    {
        BST_LIB_StrDelete( m_pstrImapIDCmd );
        return;
    }
    m_pcServerResponse1         = (BST_UINT8 *)BST_OS_MALLOC( BST_IMAP_COLUMN_MAX );
    if ( BST_NULL_PTR == m_pcServerResponse1 )
    {
        BST_LIB_StrDelete( m_pstrImapIDCmd );
        BST_OS_FREE( m_pcServerResponse0 );
        return;
    }
    m_pcServerResponse2         = (BST_UINT8 *)BST_OS_MALLOC( BST_IMAP_COLUMN_MAX );
    if ( BST_NULL_PTR == m_pcServerResponse2 )
    {
        BST_LIB_StrDelete( m_pstrImapIDCmd );
        BST_OS_FREE( m_pcServerResponse0 );
        BST_OS_FREE( m_pcServerResponse1 );
        return;
    }
    BST_OS_MEMSET( m_pcServerResponse0, 0, BST_IMAP_COLUMN_MAX );
    BST_OS_MEMSET( m_pcServerResponse1, 0, BST_IMAP_COLUMN_MAX );
    BST_OS_MEMSET( m_pcServerResponse2, 0, BST_IMAP_COLUMN_MAX );
}
コード例 #2
0
BST_ERR_ENUM_UINT8  BST_APP_CEmailIMAP::RunStateMachine( BST_VOID )
{
    BST_ERR_ENUM_UINT8          enErrMsg;

    BST_DBG_LOG1( "CEmailIMAP::RunStateMachine m_lServerState =%d",
                  m_lServerState );

    BST_ASSERT_NULL_RTN( m_pcServerResponse0, BST_ERR_INVALID_PTR );
    BST_ASSERT_NULL_RTN( m_pcServerResponse1, BST_ERR_INVALID_PTR );
    BST_ASSERT_NULL_RTN( m_pcServerResponse2, BST_ERR_INVALID_PTR );

    enErrMsg                    = BST_NO_ERROR_MSG;
    switch ( m_lServerState )
    {
        case BST_EMAIL_UNCONNECT:
            enErrMsg            = HandleWelcomResp();
            break;
        case BST_EMAIL_CONNECTED:
            enErrMsg            = HandleImapIDResp();
            break;

        case BST_EMAIL_IMAP_ID:
            enErrMsg            = HandleAuthResp();
            break;

        case BST_EMAIL_IMAP_LOGINED:
            enErrMsg            = HandleSelectResp();
            break;

        case BST_EMAIL_IMAP_SELECTED:
            enErrMsg            = HandleQueryResp();
            break;

        case BST_EMAIL_IMAP_QUERYED:
            enErrMsg            = HandleQuitResp();
            break;
        default:
            break;
    }
    BST_OS_MEMSET( m_pcServerResponse0, 0, BST_IMAP_COLUMN_MAX );
    BST_OS_MEMSET( m_pcServerResponse1, 0, BST_IMAP_COLUMN_MAX );
    BST_OS_MEMSET( m_pcServerResponse2, 0, BST_IMAP_COLUMN_MAX );
    return enErrMsg;
}
コード例 #3
0
BST_VOID BST_SYS_MntnInit( BST_VOID )
{
    BST_OS_LOCKCNT_T                    tThreadLockCnt;

    tThreadLockCnt                      = BST_OS_ThreadLock();
    g_stBstMntnEntity.stReportTimer     = BST_OS_TimerCreate
                                        ( BST_SYS_MntnTimerExpired,
                                          BST_NULL_PTR );
    lstInit( &g_stBstMntnEntity.stAppList );
    BST_OS_MEMSET( &g_stBstMntnEntity.aucLocalIp[0],
                   0, OM_BST_IP_ADDR_LEN );
    g_stBstMntnEntity.ucChanged         = BST_FALSE;
    g_stBstMntnEntity.ucIsInit          = BST_TRUE;
    BST_RLS_LOG( "[Mntn] Initial System" );
    BST_OS_ThreadUnLock( tThreadLockCnt );
    return;
}
コード例 #4
0
BST_IP_ERR_T BST_IP_BsdReceive( BST_FD_T fd, BST_UINT8* pData, BST_UINT16 usLength )
{
    BST_IP_ERR_T                        lRtnVal;
    BST_IP_ERR_T                        lTmpVal;
    BST_UINT8                          *pucTmpData;
    BST_UINT16                          usDefLength;
    usDefLength                         = BST_IP_MTU_SIZE;

    if( !BST_IP_IsBsdFdValid(fd) )
    {
        return BST_IP_ERR_MEM;
    }
    if( BST_NULL_PTR == pData || usLength <= 0 )
    {
        return BST_IP_ERR_MEM;
    }

    lRtnVal                             = (BST_IP_ERR_T)lwip_read( fd.lFd, pData, usLength );

    if ( lRtnVal < usLength )
    {
        return lRtnVal;
    }

    /* 读空socket缓冲区里的数据 */
    pucTmpData                          = (BST_UINT8 *)BST_OS_MALLOC( usDefLength );
    if ( BST_NULL_PTR == pucTmpData )
    {
        return lRtnVal;
    }
    BST_OS_MEMSET( pucTmpData, 0, usDefLength );

    while( 1 )
    {
        lTmpVal                         = (BST_IP_ERR_T)lwip_read( fd.lFd, pucTmpData, usDefLength );
        if ( lTmpVal < usDefLength )
        {
            break;
        }
    }
    BST_OS_FREE( pucTmpData );

    return lRtnVal;
}
コード例 #5
0
BST_VOID BST_SYS_MntnAddTask(
    BST_UINT16  usType,
    BST_UINT16  usTaskId )
{
    BST_SYS_MNTN_APP_NODE_STRU             *pstAppInfoNode;
    BST_OS_LOCKCNT_T                    tThreadLockCnt;

    if ( !BST_SYS_MNTN_IsMntnInited() )
    {
        return;
    }

    if ( (BST_UINT32)BST_SYS_MNTN_GetAppNumber() >= BST_SYS_MNTN_MAX_APP_NUMBER )
    {
        return;
    }

    tThreadLockCnt                      = BST_OS_ThreadLock();
    if ( BST_NULL_PTR != BST_SYS_MntnSrchAppByTask( usType, usTaskId ) )
    {
        BST_OS_ThreadUnLock( tThreadLockCnt );
        return;
    }
    pstAppInfoNode                      = ( BST_SYS_MNTN_APP_NODE_STRU *)BST_OS_MALLOC
                                          ( BST_OS_SIZEOF(BST_SYS_MNTN_APP_NODE_STRU) );
    if ( BST_NULL_PTR == pstAppInfoNode )
    {
        BST_OS_ThreadUnLock( tThreadLockCnt );
        return;
    }
    BST_OS_MEMSET( &(pstAppInfoNode->stAppInfo),
                   0,
                   BST_OS_SIZEOF(OM_BST_APP_INFO_STRU) );

    pstAppInfoNode->stAppInfo.usAppType = usType;
    pstAppInfoNode->stAppInfo.usTaskId  = usTaskId;

    lstAdd( BST_SYS_MNTN_GetAppListHead(), (NODE *)pstAppInfoNode );
    BST_RLS_LOG3( "[Mntn] Add Task: TypeId=, TaskId=, Total=",
                  usType, usTaskId, BST_SYS_MNTN_GetAppNumber() );
    BST_SYS_MntnChangedInd();
    BST_OS_ThreadUnLock( tThreadLockCnt );
/*lint -e429*/
}
コード例 #6
0
BST_INT32 RAND_poll( BST_VOID )
{
    BST_UINT32      ulRnd;
    BST_UINT32      i;
    ulRnd           = 0;
    BST_UINT8       ucBuf[ENTROPY_NEEDED];
    for ( i = 0; i < BST_OS_SIZEOF(ucBuf); i++ )
    {
        if ( 0 == (i % 4) )
        {
            ulRnd   = VOS_Rand(0xff);/*此处调用rtos平台的随机数生成函数*/
        }
        ucBuf[i]    = ulRnd;
        ulRnd       >>= 8;
    }

    RAND_add( ucBuf, BST_OS_SIZEOF(ucBuf), (double)ENTROPY_NEEDED );
    BST_OS_MEMSET( ucBuf, 0, BST_OS_SIZEOF(ucBuf) );

    return 1;
}
BST_ERR_ENUM_UINT8  BST_CORE_DencryptChk ( BST_CORE_PID_ENUM_UINT16     enPid,
                                           const BST_VOID              *pvData,
                                           BST_UINT16                   usLen,
                                           BST_VOID                   **ppOutData,
                                           BST_UINT16                  *pusOutLen )
{
    BST_ERR_ENUM_UINT8                  enRet;
    BST_UINT32                          ulInLen;
    BST_UINT32                          ulOutLen;
    BST_UINT32                          ulBase64DataLen;
    BST_UINT8                          *pucIn;
    BST_UINT8                          *pucOut;
    BST_UINT8                          *pucBase64Data;
    ulInLen                             = 0;
    ulOutLen                            = 0;
    ulBase64DataLen                     = 0;
    pucIn                               = BST_NULL_PTR;
    pucOut                              = BST_NULL_PTR;
    pucBase64Data                       = BST_NULL_PTR;
    enRet                               = BST_NO_ERROR_MSG;

    if ( ( BST_NULL_PTR == pvData )
      || ( BST_NULL_PTR == pusOutLen )
      || ( BST_NULL_PTR == ppOutData) )
    {
        return BST_ERR_INVALID_PTR;
    }

    if ( 0 == usLen )
    {
        return BST_ERR_PAR_LEN;
    }

    if ( CheckIfEcryOrDecry ( enPid ) )
    {
        pucIn = ( BST_UINT8 * )BST_OS_MALLOC ( usLen );

        if ( BST_NULL_PTR == pucIn )
        {
            return BST_ERR_NO_MEMORY;
        }

        BST_OS_MEMCPY ( pucIn, pvData, usLen );
        ulInLen = usLen;

        pucBase64Data = ( BST_UINT8 * )BST_OS_MALLOC ( ulInLen );

        if ( BST_NULL_PTR == pucBase64Data )
        {
            BST_OS_FREE ( pucIn );
            pucIn = BST_NULL_PTR;
            return BST_ERR_NO_MEMORY;
        }

        ulBase64DataLen = EVP_DecodeBlock ( pucBase64Data, pucIn, ulInLen );

        while ( pucIn[--ulInLen] == '=' ) // Ecrypter string end is '='
        {
            ulBase64DataLen--;
        }

        pucOut = ( BST_UINT8 * )BST_OS_MALLOC ( ulInLen );

        if ( BST_NULL_PTR == pucOut )
        {
            BST_OS_FREE ( pucIn );
            pucIn = BST_NULL_PTR;
            BST_OS_FREE ( pucBase64Data );
            pucBase64Data = BST_NULL_PTR;
            return BST_ERR_NO_MEMORY;
        }

        BST_OS_MEMSET ( pucOut, 0, ulInLen );

        enRet = DecryptInternal ( pucBase64Data,
                                  ulBase64DataLen,
                                  pucOut,
                                 &ulOutLen,
                                  gs_BastetDsppKey );

        if ( BST_NO_ERROR_MSG == enRet )
        {
            *ppOutData = ( BST_VOID * )pucOut;
            *pusOutLen = ( BST_UINT16 )ulOutLen;
        }

        BST_OS_FREE ( pucIn );
        pucIn = BST_NULL_PTR;
        BST_OS_FREE ( pucBase64Data );
        pucBase64Data = BST_NULL_PTR;

        return enRet;
    }

    return BST_NO_ERROR_MSG;
}