/*++ Copyright (c) 1998-1999 Microsoft Corporation Module Name: phonemsp.h Abstract: Declaration of the CPhoneMSP class Author: mquinton 09-25-98 Notes: Revision History: --*/ #ifndef __PHONEMSP_H__ #define __PHONEMSP_H__ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= // // CPhoneMSP // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= class CPhoneMSP : public CTAPIComObjectRoot, public CComDualImpl, public CComDualImpl, public ITPhoneMSPAddressPrivate, public CObjectSafeImpl { public: CPhoneMSP() {} void FinalRelease(); DECLARE_MARSHALQI(CPhoneMSP) DECLARE_AGGREGATABLE(CPhoneMSP) DECLARE_QI() DECLARE_TRACELOG_CLASS(CPhoneMSP) BEGIN_COM_MAP(CPhoneMSP) COM_INTERFACE_ENTRY2(IDispatch, ITTerminalSupport) COM_INTERFACE_ENTRY(ITMSPAddress) COM_INTERFACE_ENTRY(ITTerminalSupport) COM_INTERFACE_ENTRY(ITPhoneMSPAddressPrivate) COM_INTERFACE_ENTRY(IObjectSafety) COM_INTERFACE_ENTRY_FUNC(IID_IMarshal, 0, IMarshalQI) COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pFTM) END_COM_MAP() HRESULT InitializeTerminals( HPHONEAPP hPhoneApp, DWORD dwAPIVersion, DWORD dwPhoneDevice, CAddress * pAddress ); HRESULT VerifyTerminal( ITTerminal * pTerminal ); protected: private: // TAPI terminals owned by this address TerminalArray m_TerminalArray; UnknownArray m_CallArray; HANDLE m_hEvent; #if DBG PWSTR m_pDebug; #endif void AddTerminal( ITTerminal * pTerminal ); void AddCall( IUnknown * pCall ); void RemoveCall( IUnknown * pCall ); public: // // itmspaddress methods // STDMETHOD(Initialize)( MSP_HANDLE hEvent ); STDMETHOD(Shutdown)(); STDMETHOD(CreateMSPCall)( MSP_HANDLE hCall, DWORD dwReserved, DWORD dwMediaType, IUnknown * pOuterUnknown, IUnknown ** ppStreamControl ); STDMETHOD(ShutdownMSPCall)( IUnknown * pStreamControl ); STDMETHOD(ReceiveTSPData)( IUnknown * pMSPCall, BYTE * pBuffer, DWORD dwSize ); STDMETHOD(GetEvent)( DWORD * pdwSize, byte * pEventBuffer ); // //ITTerminalSupport methods // STDMETHOD(get_StaticTerminals)(VARIANT * pVariant); STDMETHOD(EnumerateStaticTerminals)(IEnumTerminal ** ppEnumTerminal); STDMETHOD(get_DynamicTerminalClasses)(VARIANT * pVariant); STDMETHOD(EnumerateDynamicTerminalClasses)( IEnumTerminalClass ** ppTerminalClassEnumerator); STDMETHOD(CreateTerminal)( BSTR TerminalClass, long lMediaType, TERMINAL_DIRECTION TerminalDirection, ITTerminal ** ppTerminal ); STDMETHOD(GetDefaultStaticTerminal)( long lMediaType, TERMINAL_DIRECTION, ITTerminal ** ppTerminal ); }; typedef enum { PHONEMSP_CONNECTED, PHONEMSP_DISCONNECTED } PhoneMSPCallState; class CPhoneMSPCall : public CTAPIComObjectRoot, public CComDualImpl, public ITPhoneMSPCallPrivate, public CObjectSafeImpl { public: CPhoneMSPCall() : m_State(PHONEMSP_DISCONNECTED) {} void FinalRelease(); DECLARE_MARSHALQI(CPhoneMSPCall) DECLARE_AGGREGATABLE(CPhoneMSPCall) DECLARE_QI() DECLARE_TRACELOG_CLASS(CPhoneMSPCall) BEGIN_COM_MAP(CPhoneMSPCall) COM_INTERFACE_ENTRY2(IDispatch, ITStreamControl) COM_INTERFACE_ENTRY(ITStreamControl) COM_INTERFACE_ENTRY(IObjectSafety) COM_INTERFACE_ENTRY(ITPhoneMSPCallPrivate) COM_INTERFACE_ENTRY_FUNC(IID_IMarshal, 0, IMarshalQI) COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pFTM) END_COM_MAP() protected: StreamArray m_StreamArray; TerminalPrivateArray m_TerminalArray; PhoneMSPCallState m_State; T3PHONE m_t3Phone; CPhoneMSP * m_pPhoneMSP; void AddStream( ITStream * pStream ); void AddTerminal( ITTerminalPrivate * pTerminal ); void RemoveTerminal( ITTerminalPrivate * pTerminal ); public: void static HandlePrivateHookSwitch( PASYNCEVENTMSG pParams ); STDMETHOD(CreateStream)( long lMediaType, TERMINAL_DIRECTION td, ITStream ** ppStream ); STDMETHOD(RemoveStream)(ITStream * pStream); STDMETHOD(EnumerateStreams)(IEnumStream ** ppEnumStream); STDMETHOD(get_Streams)(VARIANT * pVariant); // // ITPhoneMSPCallPrivate // STDMETHOD(Initialize)( CPhoneMSP * pPhoneMSP ); STDMETHOD(OnConnect)(); STDMETHOD(OnDisconnect)(); STDMETHOD(SelectTerminal)( ITTerminalPrivate * ); STDMETHOD(UnselectTerminal)( ITTerminalPrivate * ); STDMETHOD(GetGain)(long *pVal, DWORD dwHookSwitch); STDMETHOD(PutGain)(long newVal, DWORD dwHookSwitch); STDMETHOD(GetVolume)(long *pVal, DWORD dwHookSwitch); STDMETHOD(PutVolume)(long newVal, DWORD dwHookSwitch); }; #endif