#include "stdafx.h" #include "termevnt.h" HRESULT CASRTerminalEvent::FireEvent( CTAPI * pTapi, ITCallInfo *pCall, ITTerminal * pTerminal, HRESULT hrErrorCode ) { STATICLOG((TL_TRACE, "FireEvent - enter" )); CCall *pCCall = NULL; 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; } if (NULL == pTapi) { STATICLOG((TL_ERROR, "FireEvent - tapi object is NULL" )); return E_POINTER; } // // create the event object // HRESULT hr = E_FAIL; CComObject *p; hr = CComObject::CreateInstance( &p ); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - could not createinstance" )); return E_OUTOFMEMORY; } // // save event information to the event object // hr = p->put_Call(pCall); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - put_Call failed" )); delete p; return hr; } hr = p->put_Terminal(pTerminal); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - put_Terminal failed" )); delete p; return hr; } hr = p->put_ErrorCode(hrErrorCode); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - put_ErrorCode failed" )); delete p; return hr; } // // get the dispatch interface // IDispatch *pDisp = NULL; hr = p->_InternalQueryInterface( IID_IDispatch, (void **)&pDisp ); if (FAILED(hr)) { delete p; STATICLOG((TL_ERROR, "FireEvent - could not get IDispatch %lx", hr)); return hr; } // // fire the event // pTapi->Event( TE_ASRTERMINAL, pDisp ); // // release our reference // pDisp->Release(); STATICLOG((TL_TRACE, "FireEvent - exit - returing SUCCESS" )); return S_OK; } CASRTerminalEvent::CASRTerminalEvent() :m_pCallInfo(NULL), m_pTerminal(NULL), m_hr(S_OK) { LOG((TL_TRACE, "CASRTerminalEvent[%p] - enter", this)); LOG((TL_TRACE, "CASRTerminalEvent - finish")); } CASRTerminalEvent::~CASRTerminalEvent() { LOG((TL_INFO, "~CASRTerminalEvent[%p] - enter", this)); // // remember to release all the references we may hold // if (NULL != m_pCallInfo) { LOG((TL_INFO, "~CASRTerminalEvent - releasing m_pCallInfo %p", m_pCallInfo)); m_pCallInfo->Release(); m_pCallInfo = NULL; } if ( NULL != m_pTerminal) { LOG((TL_INFO, "~CASRTerminalEvent - releasing m_pTerminal %p", m_pTerminal)); m_pTerminal->Release(); m_pTerminal = NULL; } LOG((TL_TRACE, "~CASRTerminalEvent - finish")); } HRESULT STDMETHODCALLTYPE CASRTerminalEvent::get_Call( OUT ITCallInfo **ppCallInfo ) { LOG((TL_TRACE, "get_Call[%p] - enter", this)); // // check arguments // if (TAPIIsBadWritePtr(ppCallInfo, sizeof(ITCallInfo *))) { LOG((TL_ERROR, "get_Call - bad pointer passed in")); return E_POINTER; } // // no garbage out // *ppCallInfo = NULL; // // return call info if we have it // if (NULL != m_pCallInfo) { *ppCallInfo = m_pCallInfo; (*ppCallInfo)->AddRef(); } LOG((TL_TRACE, "get_Call - finish")); return S_OK; } HRESULT STDMETHODCALLTYPE CASRTerminalEvent::get_Terminal( OUT ITTerminal **ppTerminal ) { LOG((TL_TRACE, "get_Terminal[%p] - enter", this)); // // check arguments // if (TAPIIsBadWritePtr(ppTerminal, sizeof(ITTerminal*))) { LOG((TL_ERROR, "get_Terminal - bad pointer passed in")); return E_POINTER; } // // no garbage out // *ppTerminal = NULL; // // return terminal if we have it // if (NULL != m_pTerminal) { *ppTerminal = m_pTerminal; (*ppTerminal)->AddRef(); } LOG((TL_TRACE, "get_Terminal - finish")); return S_OK; } HRESULT STDMETHODCALLTYPE CASRTerminalEvent::get_Error( OUT HRESULT *phrErrorCode ) { LOG((TL_TRACE, "get_Error[%p] - enter", this)); // // check arguments // if (TAPIIsBadWritePtr(phrErrorCode, sizeof(HRESULT))) { LOG((TL_ERROR, "get_Error - bad pointer passed in")); return E_POINTER; } // // return error code // *phrErrorCode = m_hr; LOG((TL_TRACE, "get_Error - finish. hr = [%lx]", m_hr)); return S_OK; } HRESULT STDMETHODCALLTYPE CASRTerminalEvent::put_Terminal( IN ITTerminal *pTerminal ) { LOG((TL_TRACE, "put_Terminal[%p] - enter", this)); // // check the argument // if ((NULL != pTerminal) && IsBadReadPtr(pTerminal, sizeof(ITTerminal))) { LOG((TL_ERROR, "put_Terminal - bad pointer passed in")); // // if we get here, we have a bug. debug to see what happened. // _ASSERTE(FALSE); return E_POINTER; } // // keep the pointer // m_pTerminal = pTerminal; // // keep a reference if not null // if (NULL != m_pTerminal) { m_pTerminal->AddRef(); } LOG((TL_TRACE, "put_Terminal - finished")); return S_OK; } HRESULT STDMETHODCALLTYPE CASRTerminalEvent::put_Call( IN ITCallInfo *pCallInfo ) { LOG((TL_TRACE, "put_Call[%p] - enter", this)); // // check the argument // if ((NULL != pCallInfo) && IsBadReadPtr(pCallInfo, sizeof(ITCallInfo))) { LOG((TL_ERROR, "put_Call - bad pointer passed in")); // // if we get here, we have a bug. debug to see what happened. // _ASSERTE(FALSE); return E_POINTER; } // // keep the pointer // m_pCallInfo = pCallInfo; // // keep a reference if not null // if (NULL != m_pCallInfo) { m_pCallInfo->AddRef(); } LOG((TL_TRACE, "put_Call - finished")); return S_OK; } HRESULT STDMETHODCALLTYPE CASRTerminalEvent::put_ErrorCode( IN HRESULT hrErrorCode ) { LOG((TL_TRACE, "put_ErrorCode[%p] - enter. hr = [%lx]", this, hrErrorCode)); // // keep the value // m_hr = hrErrorCode; LOG((TL_TRACE, "put_ErrorCode - finished")); return S_OK; } HRESULT CFileTerminalEvent::FireEvent( CAddress *pCAddress, CTAPI * pTapi, ITCallInfo *pCall, TERMINAL_MEDIA_STATE tmsTerminalState, FT_STATE_EVENT_CAUSE ftecEventCause, ITTerminal * pTerminal, ITFileTrack * pFileTrack, HRESULT hrErrorCode ) { STATICLOG((TL_TRACE, "FireEvent - enter" )); STATICLOG((TL_INFO, " File Terminal State -------------> %d", tmsTerminalState)); STATICLOG((TL_INFO, " File Terminal Event Cause -------> %d", ftecEventCause)); STATICLOG((TL_INFO, " File Terminal -------------------> %p", pTerminal)); CCall *pCCall = NULL; 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; } if (NULL == pTapi) { STATICLOG((TL_ERROR, "FireEvent - tapi object is NULL" )); return E_POINTER; } // // Check the event filter mask // This are MSP events and are not filtered by // TapiSrv // DWORD dwEventFilterMask = 0; dwEventFilterMask = pCAddress->GetSubEventsMask( TE_FILETERMINAL ); if( !( dwEventFilterMask & GET_SUBEVENT_FLAG(tmsTerminalState))) { STATICLOG((TL_WARN, "FireEvent - filtering out this event [%lx]", tmsTerminalState)); return S_OK; } // // create the event object // HRESULT hr = E_FAIL; CComObject *p; hr = CComObject::CreateInstance( &p ); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - could not createinstance" )); return E_OUTOFMEMORY; } // // save event information to the event object // hr = p->put_Call(pCall); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - put_Call failed" )); delete p; return hr; } hr = p->put_Terminal(pTerminal); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - put_Terminal failed" )); delete p; return hr; } hr = p->put_Track(pFileTrack); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - put_Track failed" )); delete p; return hr; } hr = p->put_State(tmsTerminalState); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - put_State failed" )); delete p; return hr; } hr = p->put_Cause(ftecEventCause); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - put_Cause failed" )); delete p; return hr; } hr = p->put_ErrorCode(hrErrorCode); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - put_ErrorCode failed" )); delete p; return hr; } // // get the dispatch interface // IDispatch *pDisp = NULL; hr = p->_InternalQueryInterface( IID_IDispatch, (void **)&pDisp ); if (FAILED(hr)) { delete p; STATICLOG((TL_ERROR, "FireEvent - could not get IDispatch %lx", hr)); return hr; } // // fire the event // pTapi->Event( TE_FILETERMINAL, pDisp ); // // release our reference // pDisp->Release(); STATICLOG((TL_TRACE, "FireEvent - exit - returing SUCCESS" )); return S_OK; } CFileTerminalEvent::CFileTerminalEvent() :m_pCallInfo(NULL), m_pParentFileTerminal(NULL), m_pFileTrack(NULL), m_tmsTerminalState(TMS_IDLE), m_ftecEventCause(FTEC_NORMAL), m_hr(S_OK) { LOG((TL_TRACE, "CFileTerminalEvent[%p] - enter", this)); LOG((TL_TRACE, "CFileTerminalEvent - finish")); } CFileTerminalEvent::~CFileTerminalEvent() { LOG((TL_TRACE, "~CFileTerminalEvent[%p] - enter", this)); // // remember to release all the references we may hold // if (NULL != m_pCallInfo) { LOG((TL_INFO, "~CFileTerminalEvent - releasing m_pCallInfo %p", m_pCallInfo)); m_pCallInfo->Release(); m_pCallInfo = NULL; } if ( NULL != m_pParentFileTerminal) { LOG((TL_INFO, "~CFileTerminalEvent - releasing m_pParentFileTerminal %p", m_pParentFileTerminal)); m_pParentFileTerminal->Release(); m_pParentFileTerminal = NULL; } if (NULL != m_pFileTrack) { LOG((TL_INFO, "~CFileTerminalEvent - releasing m_pFileTrack %p", m_pFileTrack)); m_pFileTrack->Release(); m_pFileTrack = NULL; } LOG((TL_TRACE, "~CFileTerminalEvent - finish")); } HRESULT STDMETHODCALLTYPE CFileTerminalEvent::get_Call( OUT ITCallInfo **ppCallInfo ) { LOG((TL_TRACE, "get_Call[%p] - enter", this)); // // check arguments // if (TAPIIsBadWritePtr(ppCallInfo, sizeof(ITCallInfo *))) { LOG((TL_ERROR, "get_Call - bad pointer passed in")); return E_POINTER; } // // no garbage out // *ppCallInfo = NULL; // // return call info if we have it // if (NULL != m_pCallInfo) { *ppCallInfo = m_pCallInfo; (*ppCallInfo)->AddRef(); } LOG((TL_TRACE, "get_Call - finish")); return S_OK; } HRESULT STDMETHODCALLTYPE CFileTerminalEvent::get_State( OUT TERMINAL_MEDIA_STATE *pFileTerminallState ) { LOG((TL_TRACE, "get_State[%p] - enter", this)); // // check arguments // if (TAPIIsBadWritePtr(pFileTerminallState, sizeof(TERMINAL_MEDIA_STATE))) { LOG((TL_ERROR, "get_State - bad pointer passed in")); return E_POINTER; } // // return state // *pFileTerminallState = m_tmsTerminalState; LOG((TL_TRACE, "get_State - finish. state = [%lx]", m_tmsTerminalState)); return S_OK; } HRESULT STDMETHODCALLTYPE CFileTerminalEvent::get_Cause( OUT FT_STATE_EVENT_CAUSE *pCause ) { LOG((TL_TRACE, "get_Cause[%p] - enter", this)); // // check arguments // if (TAPIIsBadWritePtr(pCause, sizeof(FT_STATE_EVENT_CAUSE))) { LOG((TL_ERROR, "get_Cause - bad pointer passed in")); return E_POINTER; } // // return cause // *pCause = m_ftecEventCause; LOG((TL_TRACE, "get_Cause - finish. cause = [%lx]", m_ftecEventCause)); return S_OK; } HRESULT STDMETHODCALLTYPE CFileTerminalEvent::get_Terminal( OUT ITTerminal **ppTerminal ) { LOG((TL_TRACE, "get_Terminal[%p] - enter", this)); // // check arguments // if (TAPIIsBadWritePtr(ppTerminal, sizeof(ITTerminal*))) { LOG((TL_ERROR, "get_Terminal - bad pointer passed in")); return E_POINTER; } // // no garbage out // *ppTerminal = NULL; // // return terminal if we have it // if (NULL != m_pParentFileTerminal) { *ppTerminal = m_pParentFileTerminal; (*ppTerminal)->AddRef(); } LOG((TL_TRACE, "get_Terminal - finish")); return S_OK; } HRESULT STDMETHODCALLTYPE CFileTerminalEvent::get_Track( OUT ITFileTrack **ppFileTrack ) { LOG((TL_TRACE, "get_Track[%p] - enter", this)); // // check arguments // if (TAPIIsBadWritePtr(ppFileTrack, sizeof(ITFileTrack*))) { LOG((TL_ERROR, "get_Track - bad pointer passed in")); return E_POINTER; } // // no garbage out // *ppFileTrack = NULL; // // return track terminal if we have it // if (NULL != m_pFileTrack) { *ppFileTrack = m_pFileTrack; (*ppFileTrack)->AddRef(); } LOG((TL_TRACE, "get_Track - finish")); return S_OK; } HRESULT STDMETHODCALLTYPE CFileTerminalEvent::get_Error( OUT HRESULT *phrErrorCode ) { LOG((TL_TRACE, "get_Error[%p] - enter", this)); // // check arguments // if (TAPIIsBadWritePtr(phrErrorCode, sizeof(HRESULT))) { LOG((TL_ERROR, "get_Error - bad pointer passed in")); return E_POINTER; } // // return error code // *phrErrorCode = m_hr; LOG((TL_TRACE, "get_Error - finish. hr = [%lx]", m_hr)); return S_OK; } HRESULT STDMETHODCALLTYPE CFileTerminalEvent::put_Terminal( IN ITTerminal *pTerminal ) { LOG((TL_TRACE, "put_Terminal[%p] - enter", this)); // // check the argument // if ((NULL != pTerminal) && IsBadReadPtr(pTerminal, sizeof(ITTerminal))) { LOG((TL_ERROR, "put_Terminal - bad pointer passed in")); // // if we get here, we have a bug. debug to see what happened. // _ASSERTE(FALSE); return E_POINTER; } // // keep the pointer // m_pParentFileTerminal = pTerminal; // // keep a reference if not null // if (NULL != m_pParentFileTerminal) { m_pParentFileTerminal->AddRef(); } LOG((TL_TRACE, "put_Terminal - finished")); return S_OK; } HRESULT STDMETHODCALLTYPE CFileTerminalEvent::put_Track( IN ITFileTrack *pFileTrack ) { LOG((TL_TRACE, "put_Track[%p] - enter", this)); // // check the argument // if ((NULL != pFileTrack) && IsBadReadPtr(pFileTrack, sizeof(ITFileTrack))) { LOG((TL_ERROR, "put_Track - bad pointer passed in")); // // if we get here, we have a bug. debug to see what happened. // _ASSERTE(FALSE); return E_POINTER; } // // keep the pointer // m_pFileTrack = pFileTrack; // // keep a reference if not null // if (NULL != m_pFileTrack) { m_pFileTrack->AddRef(); } LOG((TL_TRACE, "put_Track - finished")); return S_OK; } HRESULT STDMETHODCALLTYPE CFileTerminalEvent::put_Call( IN ITCallInfo *pCallInfo ) { LOG((TL_TRACE, "put_Call[%p] - enter", this)); // // check the argument // if ((NULL != pCallInfo) && IsBadReadPtr(pCallInfo, sizeof(ITCallInfo))) { LOG((TL_ERROR, "put_Call - bad pointer passed in")); // // if we get here, we have a bug. debug to see what happened. // _ASSERTE(FALSE); return E_POINTER; } // // keep the pointer // m_pCallInfo = pCallInfo; // // keep a reference if not null // if (NULL != m_pCallInfo) { m_pCallInfo->AddRef(); } LOG((TL_TRACE, "put_Call - finished")); return S_OK; } HRESULT STDMETHODCALLTYPE CFileTerminalEvent::put_State( IN TERMINAL_MEDIA_STATE tmsTerminalState ) { LOG((TL_TRACE, "put_State[%p] - enter. State = [%x]", this, tmsTerminalState)); // // keep the value // m_tmsTerminalState = tmsTerminalState; LOG((TL_TRACE, "put_State - finished")); return S_OK; } HRESULT STDMETHODCALLTYPE CFileTerminalEvent::put_Cause( IN FT_STATE_EVENT_CAUSE Cause ) { LOG((TL_TRACE, "put_Cause[%p] - enter. Cause = [%x]", this, Cause)); // // keep the value // m_ftecEventCause = Cause; LOG((TL_TRACE, "put_Cause - finished")); return S_OK; } HRESULT STDMETHODCALLTYPE CFileTerminalEvent::put_ErrorCode( IN HRESULT hrErrorCode ) { LOG((TL_TRACE, "put_ErrorCode[%p] - enter. hr = [%lx]", this, hrErrorCode)); // // keep the value // m_hr = hrErrorCode; LOG((TL_TRACE, "put_ErrorCode - finished")); return S_OK; } HRESULT CToneTerminalEvent::FireEvent( CTAPI * pTapi, ITCallInfo *pCall, ITTerminal * pTerminal, HRESULT hrErrorCode ) { STATICLOG((TL_TRACE, "FireEvent - enter" )); CCall *pCCall = NULL; 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; } if (NULL == pTapi) { STATICLOG((TL_ERROR, "FireEvent - tapi object is NULL" )); return E_POINTER; } // // create the event object // HRESULT hr = E_FAIL; CComObject *p; hr = CComObject::CreateInstance( &p ); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - could not createinstance" )); return E_OUTOFMEMORY; } // // save event information to the event object // hr = p->put_Call(pCall); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - put_Call failed" )); delete p; return hr; } hr = p->put_Terminal(pTerminal); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - put_Terminal failed" )); delete p; return hr; } hr = p->put_ErrorCode(hrErrorCode); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - put_ErrorCode failed" )); delete p; return hr; } // // get the dispatch interface // IDispatch *pDisp = NULL; hr = p->_InternalQueryInterface( IID_IDispatch, (void **)&pDisp ); if (FAILED(hr)) { delete p; STATICLOG((TL_ERROR, "FireEvent - could not get IDispatch %lx", hr)); return hr; } // // fire the event // pTapi->Event( TE_TONETERMINAL, pDisp ); // // release our reference // pDisp->Release(); STATICLOG((TL_TRACE, "FireEvent - exit - returing SUCCESS" )); return S_OK; } CToneTerminalEvent::CToneTerminalEvent() :m_pCallInfo(NULL), m_pTerminal(NULL), m_hr(S_OK) { LOG((TL_TRACE, "CToneTerminalEvent[%p] - enter", this)); LOG((TL_TRACE, "CToneTerminalEvent - finish")); } CToneTerminalEvent::~CToneTerminalEvent() { LOG((TL_TRACE, "~CToneTerminalEvent[%p] - enter", this)); // // remember to release all the references we may hold // if (NULL != m_pCallInfo) { LOG((TL_INFO, "~CToneTerminalEvent - releasing m_pCallInfo %p", m_pCallInfo)); m_pCallInfo->Release(); m_pCallInfo = NULL; } if ( NULL != m_pTerminal) { LOG((TL_INFO, "~CToneTerminalEvent - releasing m_pTerminal %p", m_pTerminal)); m_pTerminal->Release(); m_pTerminal = NULL; } LOG((TL_TRACE, "~CToneTerminalEvent - finish")); } HRESULT STDMETHODCALLTYPE CToneTerminalEvent::get_Call( OUT ITCallInfo **ppCallInfo ) { LOG((TL_TRACE, "get_Call[%p] - enter", this)); // // check arguments // if (TAPIIsBadWritePtr(ppCallInfo, sizeof(ITCallInfo *))) { LOG((TL_ERROR, "get_Call - bad pointer passed in")); return E_POINTER; } // // no garbage out // *ppCallInfo = NULL; // // return call info if we have it // if (NULL != m_pCallInfo) { *ppCallInfo = m_pCallInfo; (*ppCallInfo)->AddRef(); } LOG((TL_TRACE, "get_Call - finish")); return S_OK; } HRESULT STDMETHODCALLTYPE CToneTerminalEvent::get_Terminal( OUT ITTerminal **ppTerminal ) { LOG((TL_TRACE, "get_Terminal[%p] - enter", this)); // // check arguments // if (TAPIIsBadWritePtr(ppTerminal, sizeof(ITTerminal*))) { LOG((TL_ERROR, "get_Terminal - bad pointer passed in")); return E_POINTER; } // // no garbage out // *ppTerminal = NULL; // // return terminal if we have it // if (NULL != m_pTerminal) { *ppTerminal = m_pTerminal; (*ppTerminal)->AddRef(); } LOG((TL_TRACE, "get_Terminal - finish")); return S_OK; } HRESULT STDMETHODCALLTYPE CToneTerminalEvent::get_Error( OUT HRESULT *phrErrorCode ) { LOG((TL_TRACE, "get_Error[%p] - enter", this)); // // check arguments // if (TAPIIsBadWritePtr(phrErrorCode, sizeof(HRESULT))) { LOG((TL_ERROR, "get_Error - bad pointer passed in")); return E_POINTER; } // // return error code // *phrErrorCode = m_hr; LOG((TL_TRACE, "get_Error - finish. hr = [%lx]", m_hr)); return S_OK; } HRESULT STDMETHODCALLTYPE CToneTerminalEvent::put_Terminal( IN ITTerminal *pTerminal ) { LOG((TL_TRACE, "put_Terminal[%p] - enter", this)); // // check the argument // if ((NULL != pTerminal) && IsBadReadPtr(pTerminal, sizeof(ITTerminal))) { LOG((TL_ERROR, "put_Terminal - bad pointer passed in")); // // if we get here, we have a bug. debug to see what happened. // _ASSERTE(FALSE); return E_POINTER; } // // keep the pointer // m_pTerminal = pTerminal; // // keep a reference if not null // if (NULL != m_pTerminal) { m_pTerminal->AddRef(); } LOG((TL_TRACE, "put_Terminal - finished")); return S_OK; } HRESULT STDMETHODCALLTYPE CToneTerminalEvent::put_Call( IN ITCallInfo *pCallInfo ) { LOG((TL_TRACE, "put_Call[%p] - enter", this)); // // check the argument // if ((NULL != pCallInfo) && IsBadReadPtr(pCallInfo, sizeof(ITCallInfo))) { LOG((TL_ERROR, "put_Call - bad pointer passed in")); // // if we get here, we have a bug. debug to see what happened. // _ASSERTE(FALSE); return E_POINTER; } // // keep the pointer // m_pCallInfo = pCallInfo; // // keep a reference if not null // if (NULL != m_pCallInfo) { m_pCallInfo->AddRef(); } LOG((TL_TRACE, "put_Call - finished")); return S_OK; } HRESULT STDMETHODCALLTYPE CToneTerminalEvent::put_ErrorCode( IN HRESULT hrErrorCode ) { LOG((TL_TRACE, "put_ErrorCode[%p] - enter. hr = [%lx]", this, hrErrorCode)); // // keep the value // m_hr = hrErrorCode; LOG((TL_TRACE, "put_ErrorCode - finished")); return S_OK; } HRESULT CTTSTerminalEvent::FireEvent( CTAPI * pTapi, ITCallInfo *pCall, ITTerminal * pTerminal, HRESULT hrErrorCode ) { STATICLOG((TL_TRACE, "FireEvent - enter" )); CCall *pCCall = NULL; 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; } if (NULL == pTapi) { STATICLOG((TL_ERROR, "FireEvent - tapi object is NULL" )); return E_POINTER; } // // create the event object // HRESULT hr = E_FAIL; CComObject *p; hr = CComObject::CreateInstance( &p ); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - could not createinstance" )); return E_OUTOFMEMORY; } // // save event information to the event object // hr = p->put_Call(pCall); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - put_Call failed" )); delete p; return hr; } hr = p->put_Terminal(pTerminal); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - put_Terminal failed" )); delete p; return hr; } hr = p->put_ErrorCode(hrErrorCode); if (FAILED(hr)) { STATICLOG((TL_ERROR, "FireEvent - put_ErrorCode failed" )); delete p; return hr; } // // get the dispatch interface // IDispatch *pDisp = NULL; hr = p->_InternalQueryInterface( IID_IDispatch, (void **)&pDisp ); if (FAILED(hr)) { delete p; STATICLOG((TL_ERROR, "FireEvent - could not get IDispatch %lx", hr)); return hr; } // // fire the event // pTapi->Event( TE_TTSTERMINAL, pDisp ); // // release our reference // pDisp->Release(); STATICLOG((TL_TRACE, "FireEvent - exit - returing SUCCESS" )); return S_OK; } CTTSTerminalEvent::CTTSTerminalEvent() :m_pCallInfo(NULL), m_pTerminal(NULL), m_hr(S_OK) { LOG((TL_TRACE, "CTTSTerminalEvent[%p] - enter", this)); LOG((TL_TRACE, "CTTSTerminalEvent - finish")); } CTTSTerminalEvent::~CTTSTerminalEvent() { LOG((TL_TRACE, "~CTTSTerminalEvent[%p] - enter", this)); // // remember to release all the references we may hold // if (NULL != m_pCallInfo) { LOG((TL_INFO, "~CTTSTerminalEvent - releasing m_pCallInfo %p", m_pCallInfo)); m_pCallInfo->Release(); m_pCallInfo = NULL; } if ( NULL != m_pTerminal) { LOG((TL_INFO, "~CTTSTerminalEvent - releasing m_pTerminal %p", m_pTerminal)); m_pTerminal->Release(); m_pTerminal = NULL; } LOG((TL_TRACE, "~CTTSTerminalEvent - finish")); } HRESULT STDMETHODCALLTYPE CTTSTerminalEvent::get_Call( OUT ITCallInfo **ppCallInfo ) { LOG((TL_TRACE, "get_Call[%p] - enter", this)); // // check arguments // if (TAPIIsBadWritePtr(ppCallInfo, sizeof(ITCallInfo *))) { LOG((TL_ERROR, "get_Call - bad pointer passed in")); return E_POINTER; } // // no garbage out // *ppCallInfo = NULL; // // return call info if we have it // if (NULL != m_pCallInfo) { *ppCallInfo = m_pCallInfo; (*ppCallInfo)->AddRef(); } LOG((TL_TRACE, "get_Call - finish")); return S_OK; } HRESULT STDMETHODCALLTYPE CTTSTerminalEvent::get_Terminal( OUT ITTerminal **ppTerminal ) { LOG((TL_TRACE, "get_Terminal[%p] - enter", this)); // // check arguments // if (TAPIIsBadWritePtr(ppTerminal, sizeof(ITTerminal*))) { LOG((TL_ERROR, "get_Terminal - bad pointer passed in")); return E_POINTER; } // // no garbage out // *ppTerminal = NULL; // // return terminal if we have it // if (NULL != m_pTerminal) { *ppTerminal = m_pTerminal; (*ppTerminal)->AddRef(); } LOG((TL_TRACE, "get_Terminal - finish")); return S_OK; } HRESULT STDMETHODCALLTYPE CTTSTerminalEvent::get_Error( OUT HRESULT *phrErrorCode ) { LOG((TL_TRACE, "get_Error[%p] - enter", this)); // // check arguments // if (TAPIIsBadWritePtr(phrErrorCode, sizeof(HRESULT))) { LOG((TL_ERROR, "get_Error - bad pointer passed in")); return E_POINTER; } // // return error code // *phrErrorCode = m_hr; LOG((TL_TRACE, "get_Error - finish. hr = [%lx]", m_hr)); return S_OK; } HRESULT STDMETHODCALLTYPE CTTSTerminalEvent::put_Terminal( IN ITTerminal *pTerminal ) { LOG((TL_TRACE, "put_Terminal[%p] - enter", this)); // // check the argument // if ((NULL != pTerminal) && IsBadReadPtr(pTerminal, sizeof(ITTerminal))) { LOG((TL_ERROR, "put_Terminal - bad pointer passed in")); // // if we get here, we have a bug. debug to see what happened. // _ASSERTE(FALSE); return E_POINTER; } // // keep the pointer // m_pTerminal = pTerminal; // // keep a reference if not null // if (NULL != m_pTerminal) { m_pTerminal->AddRef(); } LOG((TL_TRACE, "put_Terminal - finished")); return S_OK; } HRESULT STDMETHODCALLTYPE CTTSTerminalEvent::put_Call( IN ITCallInfo *pCallInfo ) { LOG((TL_TRACE, "put_Call[%p] - enter", this)); // // check the argument // if ((NULL != pCallInfo) && IsBadReadPtr(pCallInfo, sizeof(ITCallInfo))) { LOG((TL_ERROR, "put_Call - bad pointer passed in")); // // if we get here, we have a bug. debug to see what happened. // _ASSERTE(FALSE); return E_POINTER; } // // keep the pointer // m_pCallInfo = pCallInfo; // // keep a reference if not null // if (NULL != m_pCallInfo) { m_pCallInfo->AddRef(); } LOG((TL_TRACE, "put_Call - finished")); return S_OK; } HRESULT STDMETHODCALLTYPE CTTSTerminalEvent::put_ErrorCode( IN HRESULT hrErrorCode ) { LOG((TL_TRACE, "put_ErrorCode[%p] - enter. hr = [%lx]", this, hrErrorCode)); // // keep the value // m_hr = hrErrorCode; LOG((TL_TRACE, "put_ErrorCode - finished")); return S_OK; }