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 ); }
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; }
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; }
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; }
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*/ }
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; }