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_VOID BST_SRV_CHNL_ThreadEntry( BST_VOID *pvArg )
{
    BST_OS_MBX_T      **pstMailBox;
    BST_OS_LOCKCNT_T    tThreadLockCnt;
    BST_EVT_HEAD_STRU  *pstEvent;
    BST_UINT32          ulRtnVal;

    if ( BST_NULL_PTR == pvArg )
    {
        return;
    }
    /*
     * 线程参数初始化,包括邮箱,运行标识
     */
    tThreadLockCnt      = BST_OS_ThreadLock ();
    pstMailBox          = (BST_OS_MBX_T **)pvArg;
   *pstMailBox          = BST_OS_CreateMbx
                        ( BST_OS_GetCurrentThreadId(), BST_L_MBOX_SIZE );
    if ( BST_NULL_PTR == *pstMailBox )
    {
        BST_OS_ThreadUnLock ( tThreadLockCnt );
        return;
    }

    BST_SetThreadInitFlag( BST_CHNL_CTRL_THREAD_FLAG );
    g_lstChnlMng        = BST_NULL_PTR;
    BST_OS_InitSpinLock( &g_HighPriCntSpinLock );
    BST_OS_ThreadUnLock ( tThreadLockCnt );

    /*
     * 进入线程主循环,等待邮件,邮件内容为即将执行的任务
     */
    for(;;)
    {
        ulRtnVal        = BST_OS_RecvMail
                       ( *pstMailBox, (BST_VOID **)&pstEvent, BST_OS_SYS_FOREVER );
        BST_ASSERT_NORM( BST_OS_SYS_TIMEOUT == ulRtnVal );
        BST_SRV_ProcChnlCtrEvent( pstEvent );
        /*这里判断指针不为空再次释放,因此需要传递指针的指针*/
        if( BST_NULL_PTR != pstEvent->pucData )
        {
            BST_DBG_LOG1( "tiger BST_OS_FREE 8,", pstEvent->pucData );
            BST_OS_FREE( pstEvent->pucData );
        }
        BST_OS_FREE( pstEvent );
#if ( BST_VER_TYPE == BST_UT_VER )
        break;
#endif
     }
}
BST_VOID BST_CTaskSchdler::AppThread ( BST_VOID* arg )
{
    BST_CORE_CPTask    *pcTask;
    BST_OS_MBX_T      **pstMailBox;
    BST_OS_LOCKCNT_T    tThreadLockCnt;
    BST_UINT32          ulRtnVal;

    if ( BST_NULL_PTR == arg )
    {
        return;
    }
    /*
     * 线程参数初始化,包括邮箱,运行标识
     */
    tThreadLockCnt      = BST_OS_ThreadLock ();
    pstMailBox          = (BST_OS_MBX_T **)arg;
   *pstMailBox          = BST_OS_CreateMbx
                        ( BST_OS_GetCurrentThreadId (), BST_MAX_APP_NUMBER );
    BST_SetThreadInitFlag ( BST_APP_THREAD_FLAG << g_ucAppInitCnt );
    g_ucAppInitCnt++;
    BST_OS_ThreadUnLock ( tThreadLockCnt );

    /*
     * 进入线程主循环,等待邮件,邮件内容为即将执行的任务
     */
    for(;;)
    {
        ulRtnVal        = BST_OS_RecvMail
                       ( *pstMailBox, (BST_VOID **)&pcTask, BST_OS_SYS_FOREVER );
        BST_ASSERT_NORM( BST_OS_SYS_TIMEOUT == ulRtnVal );
        if ( BST_NULL_PTR == pcTask )
        {
            continue;
        }
        if ( BST_FALSE == ChkTaskExist (pcTask) )
        {
            continue;
        }
        if ( BST_TRUE == pcTask->IsBusy () )
        {
            continue;
        }
        pcTask->PEntry ();
    }
}
BST_VOID BST_SRV_CHNL_InitLink(
    BST_SRV_CHNL_LINK_STRU     *pstChnlLink,
    BST_IP_CSocket             *pcSocket,
    BST_OS_TIMERID_T            ulTimerId )
{
    BST_ASSERT_NULL( pcSocket );
    BST_ASSERT_NULL( pstChnlLink );
    BST_ASSERT_NORM( BST_OS_INVALID_TIMER_ID == ulTimerId );
    pstChnlLink->enState                = BST_SRV_CHNL_STATE_UN_INITED;
    pstChnlLink->pNext                  = BST_NULL_PTR;
    pstChnlLink->pSentList              = BST_NULL_PTR;
    pstChnlLink->pUnsendList            = BST_NULL_PTR;
    pstChnlLink->stLink.ulMainLinkId    = 0;
    pstChnlLink->stLink.ulAuxLinkId     = 0;
    pstChnlLink->ulRetryTimes           = 0;
    pstChnlLink->ulCurrentSeq           = 0;
    pstChnlLink->ulIsPropSet            = BST_FALSE;
    pstChnlLink->ulAddrType             = BST_DSPP_FLG_ADDTYPE_VOID;
    pstChnlLink->ulTimerId              = ulTimerId;
    pstChnlLink->pcSocket               = pcSocket;
}