亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? voipcall.cpp

?? 一個WinCE6。0下的IP phone的源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
        PHONEAPP_DEBUGMSG(ZONE_PHONEAPP_EVENT, (L"received a RTCSessionReferStatusChangeEvent w/ RTCSRS_DONE"));                        
        KillTimer(&m_TransferDoneTimerId); 
        return End(); 

    default:
        break;
    }

    return S_OK;

}

/*------------------------------------------------------------------------------
    VoIPGroup_t::OnRTCSessionReferredEvent

    Handle a notification from the phone canvas object that there is a Refered event
    comming with this session

    this notification is handled by the receiver in transfer scenario
------------------------------------------------------------------------------*/
HRESULT 
VoIPCall_t::OnRTCSessionReferredEvent(
    IRTCSessionReferredEvent*          pEvent
    )
{
    TRACE(ZONE_PHONEAPP_EVENT);

    //validate the input
    if (!pEvent)
    {
        ASSERT(FALSE);
        return E_POINTER;
    }

    return DoPhoneVerb(PH_VERB_HOLD); 
}


/*------------------------------------------------------------------------------
    VoIPCall_t::OnParticipantStateChangeEvent

    Updates internal state based on an RTCE_PARTICIPANT_STATE_CHANGE event
------------------------------------------------------------------------------*/
HRESULT 
VoIPCall_t::OnRTCParticipantStateChangeEvent(
    IRTCParticipantStateChangeEvent*    pEvent
    )
{
    TRACE(ZONE_PHONEAPP_EVENT);

    if (! pEvent)
    {
        ASSERT(FALSE);
        return E_POINTER;
    }

    RTC_PARTICIPANT_STATE   ParticipantState  = RTCPS_IDLE;

    //get the new state from the event
    HRESULT hr = pEvent->get_State(&ParticipantState);
    if (FAILED(hr))
    {
        PHONEAPP_DEBUGMSG(ZONE_PHONEAPP_ERROR, (L"Could not get the participant state from the event! [Hr = 0x%x]", hr));
        return hr;
    }

    switch (ParticipantState)
    {
    case RTCPS_CONNECTED:
        //if this is the first connected event we should record the new connected time
        if (!IsValidTime(&m_StartTime))
        {
             GetLocalTime(&m_StartTime); 
        }
        else
        {
            hr = S_FALSE;
        }
        break;

    case RTCPS_DISCONNECTED:
        
        UpdateDisconnectReason(pEvent);

        LogCallIfNecessary(); 

        break;

    default:
        hr = S_FALSE;
        break;
    }

    return hr;
}

/*------------------------------------------------------------------------------
    VoIPCall_t::StartRingbackTone
    
    Start playing the ringback tone after a small timeout
------------------------------------------------------------------------------*/
void 
VoIPCall_t::StartRingbackTone()
{
    if (m_StartRingbackTimerId)
    {
        return;
    }

    //start a timer for a short while before actually playing the ringback tone - 
    //we want to prevent unnecessary playback when we get a 180 then a connect/disconnect/update
    //and have to stop the ringback. 
    GetApp()->GetTimers().AddTimer(
        sc_RingbackStartTimeout,
        this,
        &m_StartRingbackTimerId
        );
    
    return;
}
/*------------------------------------------------------------------------------
    VoIPCall_t::StopRingbackTone
    
    If we are currently playing the ringback tone, stop it!
------------------------------------------------------------------------------*/
void 
VoIPCall_t::StopRingbackTone()
{
    KillTimer(&m_StartRingbackTimerId);
    
    if (m_PlayingRingbackTone)
    {
        GetApp()->StopActiveTone(); 
        m_PlayingRingbackTone = false;
    }
}

/*------------------------------------------------------------------------------
    VoIPCall_t::KillTimer
    
    Terminates a timer (if the timer is still active)

    Parameters:
        pTimerId    : The pointer to a timer identifier 
------------------------------------------------------------------------------*/
void 
VoIPCall_t::KillTimer(UINT* pTimerId)
{
    if (pTimerId == NULL)
    {
        return; 
    }

    if ((*pTimerId != 0) && (GetApp() != NULL))
    {
        GetApp()->GetTimers().RemoveTimer(*pTimerId); 
        *pTimerId = 0; 
    }

    return; 
}

/*------------------------------------------------------------------------------
    VoIPCall_t::OnTimerExpires
    
    Handles our inactivity timer expiring - indicating it is time to forward
    this call
    
    Parameters:
        : The identifier of the timer which has expired
------------------------------------------------------------------------------*/
void 
VoIPCall_t::OnTimerExpires(
    UINT    TimerId
    )
{
    if (TimerId == 0)
    {
        return;
    }

    //if the ringback timer expires, we play the ringback tone
    if (TimerId == m_StartRingbackTimerId)
    {
        GetApp()->PlayProgressTone(AudioManager_t::ProgressToneRingback); 
        m_PlayingRingbackTone = true;

        KillTimer(&m_StartRingbackTimerId);
    }
    else if (TimerId == m_TransferDoneTimerId)
    {
        KillTimer(&m_TransferDoneTimerId); 
        End(); 
    }
        
    return;
}


HRESULT 
VoIPCall_t::GetURI(BSTR* pURI)
{
    if (m_cpRTCParticipant == NULL)
    {
        return E_FAIL; 
    }

    return m_cpRTCParticipant->get_UserURI(pURI); 
    
}


HRESULT             
VoIPCall_t::GetDuration(
    SYSTEMTIME* pDuration
    )
{
    if (pDuration == NULL)
    {
        return E_INVALIDARG; 
    }

    //initialize the duration structure to 0
    memset(pDuration, 0, sizeof(SYSTEMTIME)); 
    
    if (!IsValidTime(&m_StartTime))
    {
        //we have not gotten the RTCPS_CONNECTED event yet, return S_FALSE
        return S_FALSE; 
    }

    GetLocalTime(&m_EndTime); 

    ULONGLONG ullStartTime; 
    ULONGLONG ullEndTime; 

    HRESULT hr = GetSystemTimeAsULL(&m_StartTime, &ullStartTime); 
    if (FAILED(hr))
    {
        return hr; 
    }

    hr = GetSystemTimeAsULL(&m_EndTime, &ullEndTime); 
    if (FAILED(hr))
    {
        return hr; 
    }

    return GetULLAsSystemTime(
            ullEndTime - ullStartTime, 
            pDuration
            ); 

}


HRESULT
VoIPCall_t::DoVerbTransfer(
        VPARAM Parameter
        )
{
    if (Parameter == NULL)
    {
        return E_INVALIDARG; 
    }

    if (m_cpRTCSession == NULL)
    {
        return E_UNEXPECTED; 
    }

    WCHAR* pTransferToURI = reinterpret_cast<WCHAR*>(Parameter); 
    ce::auto_bstr TransferToURI = SysAllocString(pTransferToURI); 

    CComPtr<IRTCSessionCallControl> cpSessionCallControl; 
    HRESULT hr = m_cpRTCSession->QueryInterface(
                                    IID_IRTCSessionCallControl,
                                    (void **)&cpSessionCallControl
                                    ); 
    if (FAILED(hr))
    {
        PHONEAPP_DEBUGMSG(ZONE_PHONEAPP_ERROR, (L"Failed to query interface for IRTCSessionCallControl -- error code = 0x%x", hr)); 
        return hr; 
    }
    
    hr = cpSessionCallControl->Refer(
                                TransferToURI, 
                                TransferToURI
                                ); 
    if (FAILED(hr))
    {
        PHONEAPP_DEBUGMSG(ZONE_PHONEAPP_ERROR, (L"Failed at refering -- error code = 0x%x", hr)); 
        return hr; 
    }

    return hr; 
}


HRESULT
VoIPCall_t::SetInfoAboutBeingTransferred(
    IRTCSessionReferredEvent*  pRTCSessionReferredEvent, 
    Call_t*                    pReferringCall
    )
{
    if ((pRTCSessionReferredEvent == NULL) || (pReferringCall == NULL))
    {
        return E_INVALIDARG; 
    }

    if (IsBeingTransferred())
    {
        return E_FAIL; 
    }

    m_cpRTCSessionReferredEvent = pRTCSessionReferredEvent; 
    m_cpReferringCall           = pReferringCall; 

    return S_OK; 
}


HRESULT
VoIPCall_t::StateChangeWhileBeingTransferred(
    RTC_SESSION_STATE NewSessionState
    )
{
    HRESULT hr = S_OK; 
    
    switch(NewSessionState)
    {
    case RTCSS_CONNECTED: 
        //transfer: receiver notifies the initiator that refer is successful
        hr = m_cpRTCSessionReferredEvent->SetReferredSessionState(RTCSS_CONNECTED);
        if (FAILED(hr))
        {
            PHONEAPP_DEBUGMSG(ZONE_PHONEAPP_ERROR, (L"Failed at setting referred session state -- error code = 0x%x", hr));
            return hr;
        }

        ClearInfoAboutBeingTransferred();
        return S_OK;
        
    case RTCSS_DISCONNECTED: 
        //if this is still being transferred
        //transfer: receiver notifies the refer-er that refer is failed, maybe caused by the target rejects the callneeds to check if the current session is still being transferred
        hr = m_cpRTCSessionReferredEvent->SetReferredSessionState(RTCSS_DISCONNECTED);
        if (FAILED(hr))
        {
            //even if it fails, still keep going
            PHONEAPP_DEBUGMSG(ZONE_PHONEAPP_ERROR, (L"Failed at setting referred session state -- error code = 0x%x", hr));
        }

        //unhold the session with refer-er
        hr = m_cpReferringCall->DoPhoneVerb(PH_VERB_UNHOLD);
        if (FAILED(hr))
        {
            //even if it fails, still keep going
            PHONEAPP_DEBUGMSG(ZONE_PHONEAPP_ERROR, (L"Failed at unholding session -- error code = 0x%x", hr));
        }

        ClearInfoAboutBeingTransferred();

        return hr;

    default: 
        break;         
    }

    return hr; 
}

void
VoIPCall_t::UpdateNewLoggedCall(
    VoIPCallType CallType
    )
{
    HRESULT hr;    

    switch (CallType)
    {
    case e_vctIncoming:
        hr = PHSetValue(phsIncomingCalls, 1);
        if (FAILED(hr))
        {
            PHONEAPP_DEBUGMSG(ZONE_PHONEAPP_ERROR, (L"Failed at writting new incoming call count to regsitry, hr = 0x%x", hr)); 
        }
        break;
        
    case e_vctOutgoing: 
        hr = PHSetValue(phsOutgoingCalls, 1);
        if (FAILED(hr))
        {
            PHONEAPP_DEBUGMSG(ZONE_PHONEAPP_ERROR, (L"Failed at writting new outgoing call count to regsitry, hr = 0x%x", hr)); 
        }
        break;
        
    case e_vctMissed:
        hr = PHSetValue(phsMissedCalls, 1);
        if (FAILED(hr))
        {
            PHONEAPP_DEBUGMSG(ZONE_PHONEAPP_ERROR, (L"Failed at writting new missed call count to regsitry, hr = 0x%x", hr)); 
        }
        break;

    default:
        PHONEAPP_DEBUGMSG(ZONE_PHONEAPP_ERROR, (L"Invalid call type specified.")); 
    }
    return; 
}

/*------------------------------------------------------------------------------
    VoIPCall_t::LogCall
    
    Log call to database
------------------------------------------------------------------------------*/
void
VoIPCall_t::LogCallIfNecessary(
    void
    )
{
    if (m_IsLogged)
    {
        //return if the call is already been logged
        return;         
    }
    
    GetLocalTime(&m_EndTime); 
    if (!IsValidTime(&m_StartTime))
    {
        //if we don't have valid start time, it means we either rejected the call or the call was missed
        //we should set the start time as the same as end time for both cases
        memcpy(&m_StartTime, &m_EndTime, sizeof(SYSTEMTIME)); 
    }

    if (m_CouldBeMissed && m_CallType == e_vctIncoming)
    {
        m_CallType = e_vctMissed; 
    }

    GetApp()->GetDatabase().AddToCallLog(
                                GetDisplayNumber(), 
                                GetDisplayName(), 
                                m_bstrName, 
                                m_CallType, 
                                m_StartTime, 
                                m_EndTime
                                );
    
    UpdateNewLoggedCall(m_CallType);

    //set the flag to indicate the call is already logged
    m_IsLogged = true; 

    return; 
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美va亚洲va在线观看蝴蝶网| 欧美激情艳妇裸体舞| 欧美成人精品3d动漫h| 国产精品美女久久久久aⅴ| 亚洲国产裸拍裸体视频在线观看乱了| 极品少妇xxxx精品少妇偷拍 | 色婷婷精品大在线视频| 欧美一级二级三级蜜桃| 亚洲蜜臀av乱码久久精品| 九九视频精品免费| 色婷婷av一区二区三区gif| 26uuu精品一区二区在线观看| 一区二区三区不卡在线观看| 国产成人亚洲综合a∨猫咪| 日韩视频国产视频| 婷婷开心激情综合| 欧洲一区二区三区在线| 国产精品麻豆欧美日韩ww| 韩国v欧美v日本v亚洲v| 91精品国产手机| 视频一区欧美日韩| 欧美日韩国产区一| 亚洲va韩国va欧美va| 色综合中文字幕国产| 91精品国产全国免费观看| 中文字幕在线不卡一区二区三区| 国产在线一区二区综合免费视频| 91精品国产aⅴ一区二区| 亚洲综合免费观看高清完整版| 成人性视频免费网站| 欧美国产欧美综合| 国产一区二区电影| 久久久国际精品| 国产不卡在线一区| 中文字幕在线一区免费| 成人高清视频免费观看| 成人欧美一区二区三区| 99国产精品久久久久久久久久久| 国产精品久久一卡二卡| 99re8在线精品视频免费播放| 国产精品超碰97尤物18| 91福利社在线观看| 亚洲无线码一区二区三区| 欧美日韩久久久久久| 石原莉奈一区二区三区在线观看| 91精品国产入口| 麻豆成人免费电影| 国产亚洲一区二区在线观看| 成人a免费在线看| 一区二区三区中文免费| 日本韩国欧美一区二区三区| 亚洲一区二区欧美日韩| 69成人精品免费视频| 极品少妇xxxx精品少妇| 国产精品久久久久影院| 在线欧美日韩国产| 免费成人美女在线观看| 久久精品夜夜夜夜久久| 97se亚洲国产综合自在线观| 五月婷婷色综合| 国产亚洲欧美色| 色欧美日韩亚洲| 精品一区二区三区香蕉蜜桃| 国产精品色一区二区三区| 欧美亚洲高清一区| 精品一二三四区| 亚洲综合视频在线观看| 日韩一区二区在线免费观看| 成人动漫精品一区二区| 亚洲国产精品一区二区尤物区| 日韩欧美一级二级三级| 色综合视频一区二区三区高清| 日产精品久久久久久久性色| 中文字幕制服丝袜一区二区三区| 91精品婷婷国产综合久久竹菊| 国产成人精品影视| 亚洲国产精品人人做人人爽| 久久精品一二三| 欧美一区二区黄| 色狠狠色狠狠综合| 成人一区二区三区中文字幕| 日韩极品在线观看| 亚洲品质自拍视频| 国产性色一区二区| 欧美精品乱码久久久久久按摩| 99精品视频在线免费观看| 美女精品自拍一二三四| 一级中文字幕一区二区| 国产精品美女久久久久aⅴ国产馆| 欧美日韩一区小说| 91玉足脚交白嫩脚丫在线播放| 国产在线精品一区二区 | 国产女人水真多18毛片18精品视频| 在线这里只有精品| 99久久精品免费看国产免费软件| 久久国产精品99久久人人澡| 亚洲成av人片一区二区梦乃| 国产精品你懂的| 久久久影视传媒| 精品日韩99亚洲| 91麻豆精品国产91久久久久| 欧美日韩五月天| 91黄色激情网站| 91网站在线播放| 99天天综合性| 成人午夜免费电影| 国产麻豆视频一区| 国产综合色产在线精品| 激情综合色综合久久| 另类调教123区| 久久精品国产亚洲一区二区三区| 午夜精品视频在线观看| 亚洲福利一二三区| 亚洲国产精品久久人人爱| 亚洲最大成人网4388xx| 一级中文字幕一区二区| 亚洲国产日韩a在线播放性色| 亚洲伦理在线精品| 一区二区三区美女| 亚洲妇女屁股眼交7| 亚洲成人av电影在线| 天天综合色天天| 日韩制服丝袜av| 视频一区视频二区在线观看| 奇米影视在线99精品| 久久av中文字幕片| 国产精品一区二区你懂的| 国产黑丝在线一区二区三区| 波波电影院一区二区三区| 成人av电影免费在线播放| 色综合久久久久久久| 日本高清成人免费播放| 91麻豆精品国产自产在线| 欧美成人猛片aaaaaaa| 精品国产伦一区二区三区观看方式| 精品99999| 亚洲欧美日韩成人高清在线一区| 亚洲一区二区在线播放相泽 | 亚洲一区二三区| 日韩国产精品久久久久久亚洲| 美国欧美日韩国产在线播放| 国产成人av影院| 色综合天天狠狠| 欧美xxxxx裸体时装秀| 国产精品久久久99| 午夜久久久久久久久久一区二区| 激情六月婷婷久久| 91色porny在线视频| 91精品国产色综合久久ai换脸| 久久久精品中文字幕麻豆发布| 亚洲激情在线激情| 麻豆一区二区三| 日本高清免费不卡视频| 久久综合网色—综合色88| 亚洲私人黄色宅男| 老司机午夜精品| 91蜜桃传媒精品久久久一区二区| 日韩欧美亚洲国产另类| 国产精品久久久久一区| 日韩电影在线一区| 不卡的av电影在线观看| 日韩欧美国产综合一区| 亚洲色欲色欲www| 久久99精品国产麻豆婷婷洗澡| 91久久精品国产91性色tv| 久久综合色婷婷| 亚洲成人免费在线观看| 成人美女在线视频| 日韩美女一区二区三区四区| 亚洲日韩欧美一区二区在线| 国产曰批免费观看久久久| 欧美色精品在线视频| 国产精品国产三级国产普通话蜜臀| 日韩经典一区二区| 欧美亚洲综合色| 亚洲视频狠狠干| 国产高清精品在线| 日韩三级精品电影久久久| 亚洲高清不卡在线| 色婷婷综合久久久中文一区二区| 国产女同互慰高潮91漫画| 精品一区精品二区高清| 日韩一区二区影院| 亚洲成a人v欧美综合天堂| 99久久综合狠狠综合久久| 久久伊99综合婷婷久久伊| 免费视频一区二区| 欧美老年两性高潮| 亚洲图片欧美一区| 欧美在线一二三四区| 亚洲美腿欧美偷拍| 91一区二区在线观看| 亚洲丝袜精品丝袜在线| 成人国产精品免费观看动漫 | 91麻豆精品国产91久久久资源速度 | 欧美国产精品一区二区| 极品少妇一区二区| 久久这里只有精品视频网| 激情六月婷婷久久| 国产午夜精品一区二区三区嫩草 |