/*++ Copyright (c) 1997-1999 Microsoft Corporation Module Name: callevnt.cpp Abstract: Implementation of the Call events for TAPI 3.0. Author: mquinton - 9/4/98 Notes: Revision History: --*/ #include "stdafx.h" //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // CCallStateEvent - // implementation of the ITCallStateEvent interface // This object is given to applications for call state events // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // CCallStateEvent::FireEvent // static function to create and fire a new CCallStateEvent // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HRESULT CCallStateEvent::FireEvent( ITCallInfo * pCall, CALL_STATE state, CALL_STATE_EVENT_CAUSE cause, CTAPI * pTapi, long lCallbackInstance ) { CComObject< CCallStateEvent > * p; IDispatch * pDisp; HRESULT hr; CCall * pCCall; STATICLOG((TL_TRACE, "Create - enter" )); STATICLOG((TL_INFO, " CallState -------------> %d", state )); STATICLOG((TL_INFO, " CallStateEventCause ---> %d", cause )); pCCall = dynamic_cast*>(pCall); if (NULL == pCCall) { STATICLOG((TL_ERROR, "FireEvent - bad call pointer" )); return E_FAIL; } if( pCCall->DontExpose()) { STATICLOG((TL_INFO, "FireEvent - Don't expose this call %p", pCCall)); return S_OK; } // // Check the event filter mask // This event is not filtered by TapiSrv because is // related with TE_CALLSTATE. // DWORD dwEventFilterMask = 0; dwEventFilterMask = pCCall->GetSubEventsMask( TE_CALLSTATE ); STATICLOG((TL_INFO, " CallStateEventMask ---> %ld", dwEventFilterMask )); if( !( dwEventFilterMask & GET_SUBEVENT_FLAG(state))) { STATICLOG((TL_WARN, "FireEvent - filtering out this event [%lx]", cause)); return S_OK; } // // create the event object // CComObject< CCallStateEvent >::CreateInstance( &p ); if (NULL == p) { STATICLOG((TL_ERROR, "FireEvent - could not createinstance" )); return E_OUTOFMEMORY; } // // save info // p->m_pCall = pCall; pCall->AddRef(); p->m_CallState = state; p->m_CallStateEventCause = cause; p->m_lCallbackInstance = lCallbackInstance; #if DBG p->m_pDebug = (PWSTR) ClientAlloc( 1 ); #endif // // get the dispatch interface // hr = p->_InternalQueryInterface( IID_IDispatch, (void **)&pDisp ); if (!SUCCEEDED(hr)) { delete p; STATICLOG((TL_ERROR, "CallStateEvent - could not get IDispatch %lx", hr)); return hr; } // // fire the event // pTapi->Event( TE_CALLSTATE, pDisp ); // // release our reference // pDisp->Release(); STATICLOG((TL_TRACE, "FireEvent - exit - returing SUCCESS" )); return S_OK; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // FinalRelease // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void CCallStateEvent::FinalRelease() { m_pCall->Release(); #if DBG ClientFree( m_pDebug ); #endif } // ITCallStateEvent methods //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_Call // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HRESULT CCallStateEvent::get_Call( ITCallInfo ** ppCallInfo ) { HRESULT hr = S_OK; LOG((TL_TRACE, "get_Call - enter" )); LOG((TL_TRACE, " ppCallInfo ---> %p", ppCallInfo )); if (TAPIIsBadWritePtr( ppCallInfo, sizeof( ITCallInfo * ) ) ) { LOG((TL_ERROR, "get_Call - bad pointer")); return E_POINTER; } *ppCallInfo = m_pCall; m_pCall->AddRef(); LOG((TL_TRACE, "get_Call - exit - returing %lx", hr )); return hr; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_State // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HRESULT CCallStateEvent::get_State( CALL_STATE * pCallState ) { HRESULT hr = S_OK; LOG((TL_TRACE, "get_State - enter" )); LOG((TL_TRACE, " pCallState ---> %p", pCallState )); if (TAPIIsBadWritePtr( pCallState, sizeof(CALL_STATE) ) ) { LOG((TL_ERROR, "get_State - bad pointer")); return E_POINTER; } *pCallState = m_CallState; LOG((TL_TRACE, "get_State - exit - returing %lx", hr )); return hr; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_Cause // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HRESULT CCallStateEvent::get_Cause( CALL_STATE_EVENT_CAUSE * pCEC ) { HRESULT hr = S_OK; LOG((TL_TRACE, "get_Cause - enter" )); LOG((TL_TRACE, " pCEC ---> %p", pCEC )); if (TAPIIsBadWritePtr( pCEC, sizeof( CALL_STATE_EVENT_CAUSE ) ) ) { LOG((TL_ERROR, "get_Cause - bad pointer")); return E_POINTER; } *pCEC = m_CallStateEventCause; LOG((TL_TRACE, "get_Cause - exit - returning %lx", hr )); return hr; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_callbackinstance // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HRESULT CCallStateEvent::get_CallbackInstance( long * plCallbackInstance ) { HRESULT hr = S_OK; if (TAPIIsBadWritePtr( plCallbackInstance, sizeof(long) ) ) { LOG((TL_ERROR, "get_CallbackInstance - bad pointer")); return E_POINTER; } *plCallbackInstance = m_lCallbackInstance; return hr; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // CCallNotificationEvent // Implements the ITCallNotificationEvent interface // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // FireEvent // // Creates and fires a ITCallNotificationEvent object // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HRESULT CCallNotificationEvent::FireEvent( ITCallInfo * pCall, CALL_NOTIFICATION_EVENT CallNotificationEvent, CTAPI * pTapi, long lCallbackInstance ) { CComObject< CCallNotificationEvent > * p; IDispatch * pDisp; HRESULT hr; CCall * pCCall; STATICLOG((TL_TRACE, "FireEvent - enter" )); STATICLOG((TL_INFO, " CallNotification -------------> %d", CallNotificationEvent )); pCCall = dynamic_cast*>(pCall); if (NULL == pCCall) { STATICLOG((TL_ERROR, "FireEvent - bad call pointer" )); return E_FAIL; } if( pCCall->DontExpose()) { STATICLOG((TL_INFO, "FireEvent - Don't expose this call %p", pCCall)); return S_OK; } // // Check the event filter mask // This event is not filtered by TapiSrv because is // related with TE_CALLSTATE. // DWORD dwEventFilterMask = 0; dwEventFilterMask = pCCall->GetSubEventsMask( TE_CALLNOTIFICATION ); if( !( dwEventFilterMask & GET_SUBEVENT_FLAG(CallNotificationEvent))) { STATICLOG((TL_WARN, "FireEvent - filtering out this event [%lx]", CallNotificationEvent)); return S_OK; } // // create the event object // CComObject< CCallNotificationEvent >::CreateInstance( &p ); if (NULL == p) { STATICLOG((TL_ERROR, "FireEvent - could not createinstance" )); return E_OUTOFMEMORY; } // // save info // p->m_pCall = pCall; pCall->AddRef(); p->m_CallNotificationEvent = CallNotificationEvent; p->m_lCallbackInstance = lCallbackInstance; #if DBG p->m_pDebug = (PWSTR) ClientAlloc( 1 ); #endif // // get the dispatch interface // hr = p->_InternalQueryInterface( IID_IDispatch, (void **)&pDisp ); if (!SUCCEEDED(hr)) { delete p; STATICLOG((TL_ERROR, "CallNotificationEvent - could not get IDispatch %lx", hr)); return hr; } // // fire the event // pTapi->Event( TE_CALLNOTIFICATION, pDisp ); // // release our reference // pDisp->Release(); STATICLOG((TL_TRACE, "FireEvent - exit - returing SUCCESS" )); return S_OK; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // finalrelease // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void CCallNotificationEvent::FinalRelease() { LOG((TL_INFO, "CallNotificationEvent - FinalRelease")); m_pCall->Release(); #if DBG ClientFree( m_pDebug ); #endif } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_call // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HRESULT CCallNotificationEvent::get_Call( ITCallInfo ** ppCall ) { HRESULT hr = S_OK; if (TAPIIsBadWritePtr( ppCall, sizeof( ITCallInfo *) ) ) { LOG((TL_ERROR, "get_Call - bad pointer")); return E_POINTER; } *ppCall = m_pCall; (*ppCall)->AddRef(); return hr; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_Event // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HRESULT CCallNotificationEvent::get_Event( CALL_NOTIFICATION_EVENT * pCallNotificationEvent ) { HRESULT hr = S_OK; if (TAPIIsBadWritePtr(pCallNotificationEvent, sizeof(CALL_NOTIFICATION_EVENT) ) ) { LOG((TL_ERROR, "get_Event - bad pointer")); return E_POINTER; } *pCallNotificationEvent = m_CallNotificationEvent; return hr; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_callbackinstance // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HRESULT CCallNotificationEvent::get_CallbackInstance( long * plCallbackInstance ) { HRESULT hr = S_OK; if (TAPIIsBadWritePtr( plCallbackInstance, sizeof(long) ) ) { LOG((TL_ERROR, "get_CallbackInstance bad pointer")); return E_POINTER; } *plCallbackInstance = m_lCallbackInstance; return hr; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CQOSEvent::FireEvent // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= HRESULT CQOSEvent::FireEvent( ITCallInfo * pCall, QOS_EVENT QosEvent, long lMediaMode, CTAPI * pTapi ) { CComObject * p; HRESULT hr = S_OK; IDispatch * pDisp; CCall * pCCall; // // We don't need to filter the event because it's already done // by TapiSrv // pCCall = dynamic_cast*>(pCall); if (NULL == pCCall) { STATICLOG((TL_ERROR, "FireEvent - bad call pointer" )); return E_FAIL; } if( pCCall->DontExpose()) { STATICLOG((TL_INFO, "FireEvent - Don't expose this call %p", pCCall)); return S_OK; } CComObject< CQOSEvent >::CreateInstance( &p ); if (NULL == p) { STATICLOG((TL_ERROR, "FireEvent - could not createinstance" )); return E_OUTOFMEMORY; } // // save info // p->m_pCall = pCall; pCall->AddRef(); p->m_QosEvent = QosEvent; p->m_lMediaMode = lMediaMode; // // get the dispatch interface // hr = p->_InternalQueryInterface( IID_IDispatch, (void **)&pDisp ); if (!SUCCEEDED(hr)) { delete p; STATICLOG((TL_ERROR, "CallStateEvent - could not get IDispatch %lx", hr)); return hr; } // // fire the event // pTapi->Event( TE_QOSEVENT, pDisp ); // // release our reference // pDisp->Release(); STATICLOG((TL_TRACE, "FireEvent - exit - returing SUCCESS" )); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CQOSEvent::get_Call // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CQOSEvent::get_Call( ITCallInfo ** ppCall ) { if ( TAPIIsBadWritePtr( ppCall, sizeof (ITCallInfo *) ) ) { LOG((TL_ERROR, "get_Call - bad pointer")); return E_POINTER; } *ppCall = m_pCall; m_pCall->AddRef(); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CQOSEvent::get_Event // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CQOSEvent::get_Event( QOS_EVENT * pQosEvent ) { if ( TAPIIsBadWritePtr( pQosEvent, sizeof( QOS_EVENT ) ) ) { LOG((TL_ERROR, "get_Event - bad pointer")); return E_POINTER; } *pQosEvent = m_QosEvent; return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CQOSEvent::get_MediaType // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CQOSEvent::get_MediaType( long * plMediaMode ) { if ( TAPIIsBadWritePtr( plMediaMode, sizeof( long ) ) ) { LOG((TL_ERROR, "get_MediaMode - bad pointer")); return E_POINTER; } *plMediaMode = m_lMediaMode; return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CQOSEvent::FinalRelease // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= void CQOSEvent::FinalRelease() { m_pCall->Release(); } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CCall::CallInfoChangeEvent // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= HRESULT CCall::CallInfoChangeEvent( CALLINFOCHANGE_CAUSE cic ) { if ( DontExpose() ) { return S_OK; } if (NULL != m_pAddress) { return CCallInfoChangeEvent::FireEvent( this, cic, m_pAddress->GetTapi(), (m_pAddressLine)?(m_pAddressLine->lCallbackInstance):0 ); } else { return E_FAIL; } } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CCallInfoChangeEvent::FireEvent // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= HRESULT CCallInfoChangeEvent::FireEvent( ITCallInfo * pCall, CALLINFOCHANGE_CAUSE Cause, CTAPI * pTapi, long lCallbackInstance ) { HRESULT hr = S_OK; CComObject * p; IDispatch * pDisp; CCall * pCCall; pCCall = dynamic_cast*>(pCall); if (NULL == pCCall) { STATICLOG((TL_ERROR, "FireEvent - bad call pointer" )); return E_FAIL; } if( pCCall->DontExpose()) { STATICLOG((TL_INFO, "FireEvent - Don't expose this call %p", pCCall)); return S_OK; } // // Check the event filter mask // This event is not filtered by TapiSrv because is // related with TE_CALLSTATE. // DWORD dwEventFilterMask = 0; dwEventFilterMask = pCCall->GetSubEventsMask( TE_CALLINFOCHANGE ); STATICLOG((TL_INFO, " CallInfochangeEventMask ---> %ld", dwEventFilterMask )); if( !( dwEventFilterMask & GET_SUBEVENT_FLAG(Cause))) { STATICLOG((TL_WARN, "FireEvent - filtering out this event [%lx]", Cause)); return S_OK; } // // create event // hr = CComObject::CreateInstance( &p ); if ( !SUCCEEDED(hr) ) { STATICLOG((TL_ERROR, "Could not create CallInfoStateChange object - %lx", hr)); return hr; } // // initialize // p->m_Cause = Cause; p->m_pCall = pCall; p->m_pCall->AddRef(); p->m_lCallbackInstance = lCallbackInstance; #if DBG p->m_pDebug = (PWSTR) ClientAlloc( 1 ); #endif // // get idisp interface // hr = p->QueryInterface( IID_IDispatch, (void **)&pDisp ); if ( !SUCCEEDED(hr) ) { STATICLOG((TL_ERROR, "Could not get disp interface of CallInfoStateChange object %lx", hr)); delete p; return hr; } // // fire event // pTapi->Event( TE_CALLINFOCHANGE, pDisp ); // // release stuff // pDisp->Release(); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CCallInfoChangeEvent::FinalRelease // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= void CCallInfoChangeEvent::FinalRelease() { m_pCall->Release(); #if DBG ClientFree( m_pDebug ); #endif } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CCallInfoChangeEvent::get_Call // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CCallInfoChangeEvent::get_Call( ITCallInfo ** ppCallInfo) { if ( TAPIIsBadWritePtr( ppCallInfo, sizeof (ITCallInfo *) ) ) { return E_POINTER; } m_pCall->QueryInterface( IID_ITCallInfo, (void **) ppCallInfo ); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CCallInfoChangeEvent::get_Cause // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CCallInfoChangeEvent::get_Cause( CALLINFOCHANGE_CAUSE * pCallInfoChangeCause ) { if ( TAPIIsBadWritePtr( pCallInfoChangeCause, sizeof (CALLINFOCHANGE_CAUSE) ) ) { return E_POINTER; } *pCallInfoChangeCause = m_Cause; return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CCallInfoChangeEvent::get_CallbackInstance // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CCallInfoChangeEvent::get_CallbackInstance( long * plCallbackInstance ) { if ( TAPIIsBadWritePtr( plCallbackInstance, sizeof(long) ) ) { return E_POINTER; } *plCallbackInstance = m_lCallbackInstance; return S_OK; } HRESULT CCallMediaEvent::FireEvent( ITCallInfo * pCall, CALL_MEDIA_EVENT Event, CALL_MEDIA_EVENT_CAUSE Cause, CTAPI * pTapi, ITTerminal * pTerminal, ITStream * pStream, HRESULT hrEvent ) { CComObject< CCallMediaEvent > * p; IDispatch * pDisp; HRESULT hr; CCall * pCCall; STATICLOG((TL_TRACE, "FireEvent - enter" )); pCCall = dynamic_cast*>(pCall); if (NULL == pCCall) { STATICLOG((TL_ERROR, "FireEvent - bad call pointer" )); return E_FAIL; } if( pCCall->DontExpose()) { STATICLOG((TL_INFO, "FireEvent - Don't expose this call %p", pCCall)); return S_OK; } // // Check the event filter mask // These is a MSP event and it is not filter // by TapiSrv // DWORD dwEventFilterMask = 0; dwEventFilterMask = pCCall->GetSubEventsMask( TE_CALLMEDIA ); if( !( dwEventFilterMask & GET_SUBEVENT_FLAG(Event))) { STATICLOG((TL_ERROR, "FireEvent exit - " "This event is filtered - %lx", Event)); return S_OK; } // // create the event object // CComObject< CCallMediaEvent >::CreateInstance( &p ); if (NULL == p) { STATICLOG((TL_ERROR, "FireEvent - could not createinstance" )); return E_OUTOFMEMORY; } // // save info // p->m_pCall = pCall; p->m_Event = Event; p->m_Cause = Cause; p->m_hr = hrEvent; p->m_pTerminal = pTerminal; p->m_pStream = pStream; if ( NULL != pCall ) { pCall->AddRef(); } if ( NULL != pTerminal ) { pTerminal->AddRef(); } if ( NULL != pStream ) { pStream->AddRef(); } #if DBG p->m_pDebug = (PWSTR) ClientAlloc( 1 ); #endif // // get the dispatch interface // hr = p->_InternalQueryInterface( IID_IDispatch, (void **)&pDisp ); if (!SUCCEEDED(hr)) { STATICLOG((TL_ERROR, "CallMediaEvent - could not get IDispatch %lx", hr)); return hr; } // // fire the event // pTapi->Event( TE_CALLMEDIA, pDisp ); // // release our reference // pDisp->Release(); STATICLOG((TL_TRACE, "FireEvent - exit - returing SUCCESS" )); return S_OK; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_Call // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ STDMETHODIMP CCallMediaEvent::get_Call(ITCallInfo ** ppCallInfo) { if ( TAPIIsBadWritePtr( ppCallInfo, sizeof( ITCallInfo *) ) ) { LOG((TL_ERROR, "get_Call - bad pointer")); return E_POINTER; } *ppCallInfo = m_pCall; if ( NULL != m_pCall ) { m_pCall->AddRef(); } return S_OK; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_Event // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ STDMETHODIMP CCallMediaEvent::get_Event(CALL_MEDIA_EVENT * pCallMediaEvent) { if ( TAPIIsBadWritePtr( pCallMediaEvent, sizeof( CALL_MEDIA_EVENT ) ) ) { LOG((TL_ERROR, "get_Event - bad pointer")); return E_POINTER; } *pCallMediaEvent = m_Event; return S_OK; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_Cause // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ STDMETHODIMP CCallMediaEvent::get_Cause(CALL_MEDIA_EVENT_CAUSE * pCause) { if ( TAPIIsBadWritePtr( pCause, sizeof( CALL_MEDIA_EVENT_CAUSE ) ) ) { LOG((TL_ERROR, "get_Cause - bad pointer")); return E_POINTER; } *pCause = m_Cause; return S_OK; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_Error // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ STDMETHODIMP CCallMediaEvent::get_Error(HRESULT * phrError) { if ( TAPIIsBadWritePtr( phrError, sizeof( HRESULT ) ) ) { LOG((TL_ERROR, "get_Error - bad pointer")); return E_POINTER; } *phrError = m_hr; return S_OK; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_Terminal // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ STDMETHODIMP CCallMediaEvent::get_Terminal(ITTerminal ** ppTerminal) { HRESULT hr = S_OK; if ( TAPIIsBadWritePtr( ppTerminal, sizeof( ITTerminal *) ) ) { LOG((TL_ERROR, "get_Terminal - bad pointer")); return E_POINTER; } *ppTerminal = m_pTerminal; if ( NULL != m_pTerminal ) { m_pTerminal->AddRef(); } return hr; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_Stream // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ STDMETHODIMP CCallMediaEvent::get_Stream(ITStream ** ppStream) { if ( TAPIIsBadWritePtr( ppStream, sizeof( ITStream *) ) ) { LOG((TL_ERROR, "get_Stream - bad pointer")); return E_POINTER; } *ppStream = m_pStream; if ( NULL != m_pStream ) { m_pStream->AddRef(); } return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // FinalRelease // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= void CCallMediaEvent::FinalRelease() { if ( NULL != m_pCall ) { m_pCall->Release(); } if ( NULL != m_pTerminal ) { m_pTerminal->Release(); } if ( NULL != m_pStream ) { m_pStream->Release(); } #if DBG ClientFree( m_pDebug ); #endif } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitDetectionEvent::FireEvent // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= HRESULT CDigitDetectionEvent::FireEvent( ITCallInfo * pCall, unsigned char ucDigit, TAPI_DIGITMODE DigitMode, long lTickCount, CTAPI * pTapi, long lCallbackInstance ) { CComObject< CDigitDetectionEvent > * p; IDispatch * pDisp; HRESULT hr; CCall * pCCall; pCCall = dynamic_cast*>(pCall); if (NULL == pCCall) { STATICLOG((TL_ERROR, "FireEvent - bad call pointer" )); return E_FAIL; } if( pCCall->DontExpose()) { STATICLOG((TL_INFO, "FireEvent - Don't expose this call %p", pCCall)); return S_OK; } // // create the event object // CComObject< CDigitDetectionEvent >::CreateInstance( &p ); if (NULL == p) { STATICLOG((TL_ERROR, "FireEvent - could not createinstance" )); return E_OUTOFMEMORY; } // // save info // p->m_pCall = pCall; pCall->AddRef(); p->m_Digit = ucDigit; p->m_DigitMode = DigitMode; p->m_lTickCount = lTickCount; p->m_lCallbackInstance = lCallbackInstance; #if DBG p->m_pDebug = (PWSTR) ClientAlloc( 1 ); #endif // // get the dispatch interface // hr = p->_InternalQueryInterface( IID_IDispatch, (void **)&pDisp ); if (!SUCCEEDED(hr)) { STATICLOG((TL_ERROR, "DigitDetectionEvent - could not get IDispatch %lx", hr)); delete p; pCall->Release(); return hr; } // // fire the event // pTapi->Event( TE_DIGITEVENT, pDisp ); // // release our reference // pDisp->Release(); STATICLOG((TL_TRACE, "FireEvent - exit - returing SUCCESS" )); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitDetectionEvent::FinalRelease // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= void CDigitDetectionEvent::FinalRelease() { if ( NULL != m_pCall ) { m_pCall->Release(); } #if DBG ClientFree( m_pDebug ); #endif } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitDetectionEvent::get_Call // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CDigitDetectionEvent::get_Call( ITCallInfo ** ppCallInfo ) { LOG((TL_TRACE, "get_Call - enter")); if ( TAPIIsBadWritePtr( ppCallInfo, sizeof( ITCallInfo * ) ) ) { LOG((TL_ERROR, "get_Call - bad pointer")); return E_POINTER; } *ppCallInfo = m_pCall; m_pCall->AddRef(); LOG((TL_TRACE, "get_Call - exit - return SUCCESS")); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitDetectionEvent::get_Digit // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CDigitDetectionEvent::get_Digit( unsigned char * pucDigit ) { LOG((TL_TRACE, "get_Digit - enter")); if ( TAPIIsBadWritePtr( pucDigit, sizeof( unsigned char ) ) ) { LOG((TL_ERROR, "get_Digit - bad pointer")); return E_POINTER; } *pucDigit = m_Digit; LOG((TL_TRACE, "get_Digit - exit - return SUCCESS")); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitDetectionEvent::get_DigitMode // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CDigitDetectionEvent::get_DigitMode( TAPI_DIGITMODE * pDigitMode ) { HRESULT hr = S_OK; LOG((TL_TRACE, "get_DigitMode - enter")); if ( TAPIIsBadWritePtr( pDigitMode, sizeof( TAPI_DIGITMODE ) ) ) { LOG((TL_ERROR, "get_DigitMode - bad pointer")); return E_POINTER; } *pDigitMode = m_DigitMode; LOG((TL_TRACE, "get_DigitMode - exit - return %lx", hr)); return hr; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitDetectionEvent::get_TickCount // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CDigitDetectionEvent::get_TickCount( long * plTickCount ) { HRESULT hr = S_OK; LOG((TL_TRACE, "get_TickCount - enter")); if ( TAPIIsBadWritePtr( plTickCount, sizeof( long ) ) ) { LOG((TL_ERROR, "get_DigitMode - bad pointer")); return E_POINTER; } *plTickCount = m_lTickCount; LOG((TL_TRACE, "get_TickCount - exit - return %lx", hr)); return hr; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitDetectionEvent::get_CallbackInstance // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CDigitDetectionEvent::get_CallbackInstance( long * plCallbackInstance ) { HRESULT hr = S_OK; LOG((TL_TRACE, "get_CallbackInstance - enter")); if ( TAPIIsBadWritePtr( plCallbackInstance, sizeof( long ) ) ) { LOG((TL_ERROR, "get_DigitMode - bad pointer")); return E_POINTER; } *plCallbackInstance = m_lCallbackInstance; LOG((TL_TRACE, "get_CallbackInstance - exit - return %lx", hr)); return hr; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitGenerationEvent::FireEvent // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= HRESULT CDigitGenerationEvent::FireEvent( ITCallInfo * pCall, long lGenerationTermination, long lTickCount, long lCallbackInstance, CTAPI * pTapi ) { CComObject< CDigitGenerationEvent > * p; IDispatch * pDisp; HRESULT hr; CCall * pCCall; pCCall = dynamic_cast*>(pCall); if (NULL == pCCall) { STATICLOG((TL_ERROR, "FireEvent - bad call pointer" )); return E_FAIL; } if( pCCall->DontExpose()) { STATICLOG((TL_INFO, "FireEvent - Don't expose this call %p", pCCall)); return S_OK; } // // create the event object // CComObject< CDigitGenerationEvent >::CreateInstance( &p ); if (NULL == p) { STATICLOG((TL_ERROR, "FireEvent - could not createinstance" )); return E_OUTOFMEMORY; } // // get the dispatch interface // hr = p->_InternalQueryInterface( IID_IDispatch, (void **)&pDisp ); if (!SUCCEEDED(hr)) { STATICLOG((TL_ERROR, "FireEvent - could not get IDispatch %lx", hr)); delete p; return hr; } // // save info // p->m_pCall = pCall; pCall->AddRef(); p->m_lGenerationTermination = lGenerationTermination; p->m_lTickCount = lTickCount; p->m_lCallbackInstance = lCallbackInstance; #if DBG p->m_pDebug = (PWSTR) ClientAlloc( 1 ); #endif // // fire the event // pTapi->Event( TE_GENERATEEVENT, pDisp ); // // release our reference // pDisp->Release(); STATICLOG((TL_TRACE, "FireEvent - exit - returing SUCCESS" )); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitGenerationEvent::FinalRelease // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= void CDigitGenerationEvent::FinalRelease() { if ( NULL != m_pCall ) { m_pCall->Release(); } #if DBG ClientFree( m_pDebug ); #endif } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitGenerationEvent::get_Call // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CDigitGenerationEvent::get_Call( ITCallInfo ** ppCallInfo ) { LOG((TL_TRACE, "get_Call - enter")); if ( TAPIIsBadWritePtr( ppCallInfo, sizeof( ITCallInfo * ) ) ) { LOG((TL_ERROR, "get_Call - bad pointer")); return E_POINTER; } *ppCallInfo = m_pCall; m_pCall->AddRef(); LOG((TL_TRACE, "get_Call - exit - return SUCCESS")); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitGenerationEvent::get_GenerationTermination // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CDigitGenerationEvent::get_GenerationTermination( long * plGenerationTermination ) { HRESULT hr = S_OK; LOG((TL_TRACE, "get_GenerationTermination - enter")); if ( TAPIIsBadWritePtr( plGenerationTermination, sizeof( long ) ) ) { LOG((TL_ERROR, "get_DigitMode - bad pointer")); return E_POINTER; } *plGenerationTermination = m_lGenerationTermination; LOG((TL_TRACE, "get_GenerationTermination - exit - return %lx", hr)); return hr; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitGenerationEvent::get_TickCount // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CDigitGenerationEvent::get_TickCount( long * plTickCount ) { HRESULT hr = S_OK; LOG((TL_TRACE, "get_TickCount - enter")); if ( TAPIIsBadWritePtr( plTickCount, sizeof( long ) ) ) { LOG((TL_ERROR, "get_DigitMode - bad pointer")); return E_POINTER; } *plTickCount = m_lTickCount; LOG((TL_TRACE, "get_TickCount - exit - return %lx", hr)); return hr; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitGenerationEvent::get_CallbackInstance // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CDigitGenerationEvent::get_CallbackInstance( long * plCallbackInstance ) { HRESULT hr = S_OK; LOG((TL_TRACE, "get_CallbackInstance - enter")); if ( TAPIIsBadWritePtr( plCallbackInstance, sizeof( long ) ) ) { LOG((TL_ERROR, "get_DigitMode - bad pointer")); return E_POINTER; } *plCallbackInstance = m_lCallbackInstance; LOG((TL_TRACE, "get_CallbackInstance - exit - return %lx", hr)); return hr; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitsGatheredEvent::FireEvent // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= HRESULT CDigitsGatheredEvent::FireEvent( ITCallInfo * pCall, BSTR pDigits, TAPI_GATHERTERM GatherTermination, long lTickCount, long lCallbackInstance, CTAPI * pTapi ) { CComObject< CDigitsGatheredEvent > * p; IDispatch * pDisp; HRESULT hr; CCall * pCCall; pCCall = dynamic_cast*>(pCall); if (NULL == pCCall) { STATICLOG((TL_ERROR, "FireEvent - bad call pointer" )); return E_FAIL; } if( pCCall->DontExpose()) { STATICLOG((TL_INFO, "FireEvent - Don't expose this call %p", pCCall)); return S_OK; } // // create the event object // CComObject< CDigitsGatheredEvent >::CreateInstance( &p ); if (NULL == p) { STATICLOG((TL_ERROR, "FireEvent - could not createinstance" )); return E_OUTOFMEMORY; } // // get the dispatch interface // hr = p->_InternalQueryInterface( IID_IDispatch, (void **)&pDisp ); if (!SUCCEEDED(hr)) { STATICLOG((TL_ERROR, "CDigitsGatheredEvent - could not get IDispatch %lx", hr)); delete p; return hr; } // // save info // p->m_pCall = pCall; pCall->AddRef(); p->m_pDigits = pDigits; p->m_GatherTermination = GatherTermination; p->m_lTickCount = lTickCount; p->m_lCallbackInstance = lCallbackInstance; #if DBG p->m_pDebug = (PWSTR) ClientAlloc( 1 ); #endif // // fire the event // pTapi->Event( TE_GATHERDIGITS, pDisp ); // // release our reference // pDisp->Release(); STATICLOG((TL_TRACE, "FireEvent - exit - returing SUCCESS" )); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitsGatheredEvent::FinalRelease // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= void CDigitsGatheredEvent::FinalRelease() { if ( NULL != m_pCall ) { m_pCall->Release(); } #if DBG ClientFree( m_pDebug ); #endif } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitsGatheredEvent::get_Call // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CDigitsGatheredEvent::get_Call( ITCallInfo ** ppCallInfo ) { LOG((TL_TRACE, "get_Call - enter")); if ( TAPIIsBadWritePtr( ppCallInfo, sizeof( ITCallInfo * ) ) ) { LOG((TL_ERROR, "get_Call - bad pointer")); return E_POINTER; } *ppCallInfo = m_pCall; m_pCall->AddRef(); LOG((TL_TRACE, "get_Call - exit - return SUCCESS")); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitsGatheredEvent::get_Digits // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CDigitsGatheredEvent::get_Digits( BSTR * ppDigits ) { LOG((TL_TRACE, "get_Digits - enter")); if ( TAPIIsBadWritePtr( ppDigits, sizeof( BSTR ) ) ) { LOG((TL_ERROR, "get_Digits - bad pointer")); return E_POINTER; } *ppDigits = m_pDigits; LOG((TL_TRACE, "get_Digits - exit - return SUCCESS")); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitsGatheredEvent::get_GatherTermination // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CDigitsGatheredEvent::get_GatherTermination( TAPI_GATHERTERM *pGatherTermination ) { LOG((TL_TRACE, "get_GatherTermination - enter")); if ( TAPIIsBadWritePtr( pGatherTermination, sizeof( TAPI_GATHERTERM ) ) ) { LOG((TL_ERROR, "get_GatherTermination - bad pointer")); return E_POINTER; } *pGatherTermination = m_GatherTermination; LOG((TL_TRACE, "get_GatherTermination - exit - return SUCCESS")); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitsGatheredEvent::get_TickCount // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CDigitsGatheredEvent::get_TickCount( long * plTickCount ) { LOG((TL_TRACE, "get_TickCount - enter")); if ( TAPIIsBadWritePtr( plTickCount, sizeof( long ) ) ) { LOG((TL_ERROR, "get_TickCount - bad pointer")); return E_POINTER; } *plTickCount = m_lTickCount; LOG((TL_TRACE, "get_TickCount - exit - return SUCCESS")); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CDigitsGatheredEvent::get_CallbackInstance // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CDigitsGatheredEvent::get_CallbackInstance( long * plCallbackInstance ) { LOG((TL_TRACE, "get_CallbackInstance - enter")); if ( TAPIIsBadWritePtr( plCallbackInstance, sizeof( long ) ) ) { LOG((TL_ERROR, "get_CallbackInstance - bad pointer")); return E_POINTER; } *plCallbackInstance = m_lCallbackInstance; LOG((TL_TRACE, "get_CallbackInstance - exit - return SUCCESS")); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CToneDetectionEvent::FireEvent // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= HRESULT CToneDetectionEvent::FireEvent( ITCallInfo * pCall, long lAppSpecific, long lTickCount, long lCallbackInstance, CTAPI * pTapi ) { CComObject< CToneDetectionEvent > * p; IDispatch * pDisp; HRESULT hr; CCall * pCCall; pCCall = dynamic_cast*>(pCall); if (NULL == pCCall) { STATICLOG((TL_ERROR, "FireEvent - bad call pointer" )); return E_FAIL; } if( pCCall->DontExpose()) { STATICLOG((TL_INFO, "FireEvent - Don't expose this call %p", pCCall)); return S_OK; } // // create the event object // CComObject< CToneDetectionEvent >::CreateInstance( &p ); if (NULL == p) { STATICLOG((TL_ERROR, "FireEvent - could not createinstance" )); return E_OUTOFMEMORY; } // // get the dispatch interface // hr = p->_InternalQueryInterface( IID_IDispatch, (void **)&pDisp ); if (!SUCCEEDED(hr)) { STATICLOG((TL_ERROR, "CToneDetectionEvent - could not get IDispatch %lx", hr)); delete p; return hr; } // // save info // p->m_pCall = pCall; pCall->AddRef(); p->m_lAppSpecific = lAppSpecific; p->m_lTickCount = lTickCount; p->m_lCallbackInstance = lCallbackInstance; #if DBG p->m_pDebug = (PWSTR) ClientAlloc( 1 ); #endif // // fire the event // pTapi->Event( TE_TONEEVENT, pDisp ); // // release our reference // pDisp->Release(); STATICLOG((TL_TRACE, "FireEvent - exit - returing SUCCESS" )); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CToneDetectionEvent::FinalRelease // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= void CToneDetectionEvent::FinalRelease() { if ( NULL != m_pCall ) { m_pCall->Release(); } #if DBG ClientFree( m_pDebug ); #endif } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CToneDetectionEvent::get_Call // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CToneDetectionEvent::get_Call( ITCallInfo ** ppCallInfo ) { LOG((TL_TRACE, "get_Call - enter")); if ( TAPIIsBadWritePtr( ppCallInfo, sizeof( ITCallInfo * ) ) ) { LOG((TL_ERROR, "get_Call - bad pointer")); return E_POINTER; } *ppCallInfo = m_pCall; m_pCall->AddRef(); LOG((TL_TRACE, "get_Call - exit - return SUCCESS")); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CToneDetectionEvent::get_AppSpecific // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CToneDetectionEvent::get_AppSpecific( long * plAppSpecific ) { LOG((TL_TRACE, "get_AppSpecific - enter")); if ( TAPIIsBadWritePtr( plAppSpecific, sizeof( long ) ) ) { LOG((TL_ERROR, "get_AppSpecific - bad pointer")); return E_POINTER; } *plAppSpecific = m_lAppSpecific; LOG((TL_TRACE, "get_AppSpecific - exit - return SUCCESS")); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CToneDetectionEvent::get_TickCount // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CToneDetectionEvent::get_TickCount( long * plTickCount ) { LOG((TL_TRACE, "get_TickCount - enter")); if ( TAPIIsBadWritePtr( plTickCount, sizeof( long ) ) ) { LOG((TL_ERROR, "get_TickCount - bad pointer")); return E_POINTER; } *plTickCount = m_lTickCount; LOG((TL_TRACE, "get_TickCount - exit - return SUCCESS")); return S_OK; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CToneDetectionEvent::get_CallbackInstance // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= STDMETHODIMP CToneDetectionEvent::get_CallbackInstance( long * plCallbackInstance ) { LOG((TL_TRACE, "get_CallbackInstance - enter")); if ( TAPIIsBadWritePtr( plCallbackInstance, sizeof( long ) ) ) { LOG((TL_ERROR, "get_CallbackInstance - bad pointer")); return E_POINTER; } *plCallbackInstance = m_lCallbackInstance; LOG((TL_TRACE, "get_CallbackInstance - exit - return SUCCESS")); return S_OK; }