/*++ Copyright (c) 1997-1999 Microsoft Corporation Module Name: privobj.cpp Abstract: Author: mquinton - 11/13/97 Notes: Revision History: --*/ #include "stdafx.h" extern CHashTable * gpCallHubHashTable; extern CHashTable * gpLineHashTable; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // CPrivateEvent - // implementation of the ITPrivateEvent interface // This object is given to applications for Private events // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // CPrivateEvent::FireEvent // static function to create and fire a new CPrivateEvent // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HRESULT CPrivateEvent::FireEvent( CTAPI * pTapi, ITCallInfo * pCall, ITAddress * pAddress, ITCallHub * pCallHub, IDispatch * pEventInterface, long lEventCode ) { CComObject< CPrivateEvent > * p; IDispatch * pDisp; HRESULT hr = S_OK; STATICLOG((TL_TRACE, "FireEvent - enter" )); STATICLOG((TL_INFO, " pCall -----------> %p", pCall )); STATICLOG((TL_INFO, " pAddress --------> %p", pAddress )); STATICLOG((TL_INFO, " pCallHub --------> %p", pCallHub )); STATICLOG((TL_INFO, " pEventInterface -> %p", pEventInterface )); STATICLOG((TL_INFO, " EventCode -------> %lX", lEventCode )); // // Check the event filter mask // These events are MSP events and are filter by // TapiSrv // DWORD dwEventFilterMask = 0; CAddress* pCAddress = (CAddress*)pAddress; if( pCAddress ) { dwEventFilterMask = pCAddress->GetSubEventsMask( TE_PRIVATE ); if( dwEventFilterMask == 0) { STATICLOG((TL_ERROR, "This private event is filtered")); return S_OK; } } CCall* pCCall = (CCall*)pCall; if( pCCall ) { dwEventFilterMask = pCCall->GetSubEventsMask( TE_PRIVATE ); if( dwEventFilterMask == 0) { STATICLOG((TL_ERROR, "This private event is filtered")); return S_OK; } } // // create the event object // hr = CComObject< CPrivateEvent >::CreateInstance( &p ); if ( SUCCEEDED(hr) ) { // // save event info // p->m_pCall = pCall; p->m_pAddress = pAddress; p->m_pCallHub = pCallHub; p->m_pEventInterface = pEventInterface; p->m_lEventCode = lEventCode; #if DBG p->m_pDebug = (PWSTR) ClientAlloc( 1 ); #endif // AddRef pointers if(pCall) { pCall->AddRef(); } if(pAddress) { pAddress->AddRef(); } if(pEventInterface) { pEventInterface->AddRef(); } if(pCallHub) { pCallHub->AddRef(); } // // get the dispatch interface // hr = p->_InternalQueryInterface( IID_IDispatch, (void **)&pDisp ); if (SUCCEEDED(hr)) { // // fire the event // if(pTapi) { pTapi->Event(TE_PRIVATE, pDisp); } // release our reference pDisp->Release(); } else // couldn't get IDispatch { delete p; STATICLOG((TL_ERROR, "FireEvent - could not get IDispatch ")); } } else // Couldn't create instance { STATICLOG((TL_ERROR, "FireEvent - could not createinstance" )); } STATICLOG((TL_TRACE, hr, "FireEvent - exit " )); return hr; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // FinalRelease // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void CPrivateEvent::FinalRelease() { if(m_pCall) { m_pCall->Release(); } if(m_pAddress) { m_pAddress->Release(); } if(m_pCallHub) { m_pCallHub->Release(); } if(m_pEventInterface) { m_pEventInterface->Release(); } #if DBG ClientFree( m_pDebug ); #endif } // ITPrivateEvent methods //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_Address // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HRESULT CPrivateEvent::get_Address( ITAddress ** ppAddress ) { HRESULT hr = S_OK; LOG((TL_TRACE, "get_Address - enter" )); LOG((TL_TRACE, " ppAddress ---> %p", ppAddress )); if (TAPIIsBadWritePtr( ppAddress, sizeof( ITAddress * ) ) ) { LOG((TL_ERROR, "get_Address - bad pointer")); hr = E_POINTER; } else { *ppAddress = m_pAddress; if(m_pAddress) { m_pAddress->AddRef(); } } LOG((TL_TRACE,hr, "get_Address - exit ")); return hr; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_Call // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HRESULT CPrivateEvent::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")); hr = E_POINTER; } else { *ppCallInfo = m_pCall; if(m_pCall) { m_pCall->AddRef(); } } LOG((TL_TRACE,hr, "get_Call - exit ")); return hr; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_CallHub // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HRESULT CPrivateEvent::get_CallHub( ITCallHub ** ppCallHub ) { HRESULT hr = S_OK; LOG((TL_TRACE, "get_CallHub - enter" )); LOG((TL_TRACE, " ppCallHub ---> %p", ppCallHub )); if (TAPIIsBadWritePtr( ppCallHub, sizeof( ITCallHub * ) ) ) { LOG((TL_ERROR, "get_CallHub - bad pointer")); hr = E_POINTER; } else { *ppCallHub = m_pCallHub; if(m_pCallHub) { m_pCallHub->AddRef(); } else { LOG((TL_WARN, "get_CallHub - no callhub")); hr = TAPI_E_WRONGEVENT; } } LOG((TL_TRACE,hr, "get_CallHub - exit ")); return hr; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_EventInterface // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HRESULT CPrivateEvent::get_EventInterface( IDispatch ** pEventInterface ) { HRESULT hr = S_OK; LOG((TL_TRACE, "get_EventInterface - enter" )); LOG((TL_TRACE, " pEventInterface ---> %p", pEventInterface )); if (TAPIIsBadWritePtr( pEventInterface, sizeof( IDispatch * ) ) ) { LOG((TL_ERROR, "get_EventInterface - bad pointer")); hr = E_POINTER; } else { *pEventInterface = m_pEventInterface; if(m_pEventInterface) { m_pEventInterface->AddRef(); } } LOG((TL_TRACE,hr, "get_EventInterface - exit ")); return hr; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // get_EventCode // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HRESULT CPrivateEvent::get_EventCode( long * plEventCode ) { HRESULT hr = S_OK; LOG((TL_TRACE, "get_EventCode - enter" )); LOG((TL_TRACE, " pEventInterface ---> %p", plEventCode )); if (TAPIIsBadWritePtr( plEventCode, sizeof( long ) ) ) { LOG((TL_ERROR, "get_EventCode - bad pointer")); hr = E_POINTER; } else { *plEventCode = m_lEventCode; } LOG((TL_TRACE,hr, "get_EventCode - exit ")); return hr; }