/*++ Copyright (c) 1997 Microsoft Corporation Module Name: Confpart.h Abstract: Definitions for participant related classes.. Author: Mu Han (muhan) 30-September-1998 --*/ #ifndef __CONFPART_H #define __CONFPART_H const DWORD PART_SEND = 0x0001; const DWORD PART_RECV = 0x0002; #define PESTREAM_FULLBITS 0xffffffff typedef enum PESTREAM_STATE { PESTREAM_RECOVER = 0x00000001, PESTREAM_TIMEOUT = 0x00000002 } PESTREAM_STATE; typedef struct _STREAM_INFO { DWORD dwSSRC; DWORD dwSendRecv; DWORD dwState; } STREAM_INFO; #define NUM_SDES_ITEMS (RTPSDES_PRIV - RTPSDES_FIRST) class ATL_NO_VTABLE CParticipant : public CComObjectRootEx, public IDispatchImpl, public CMSPObjectSafetyImpl { public: BEGIN_COM_MAP(CParticipant) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ITParticipant) COM_INTERFACE_ENTRY(IObjectSafety) COM_INTERFACE_ENTRY_AGGREGATE(__uuidof(IMarshal), m_pFTM) END_COM_MAP() DECLARE_GET_CONTROLLING_UNKNOWN() #ifdef DEBUG_REFCOUNT ULONG InternalAddRef(); ULONG InternalRelease(); #endif CParticipant(); // methods of the CComObject virtual void FinalRelease(); // ITParticipant methods, called by the app. STDMETHOD (get_ParticipantTypedInfo) ( IN PARTICIPANT_TYPED_INFO InfoType, OUT BSTR * ppInfo ); STDMETHOD (get_MediaTypes) ( // IN TERMINAL_DIRECTION Direction, OUT long * plMediaTypes ); STDMETHOD (put_Status) ( IN ITStream * pITStream, IN VARIANT_BOOL fEnable ); STDMETHOD (get_Status) ( IN ITStream * pITStream, OUT VARIANT_BOOL * pStatus ); STDMETHOD (get_Streams) ( OUT VARIANT * pVariant ); STDMETHOD (EnumerateStreams) ( OUT IEnumStream ** ppEnumStream ); // methods called by the call object. HRESULT Init( IN WCHAR * szCName, IN ITStream * pITStream, IN DWORD dwSSRC, IN DWORD dwSendRecv, IN DWORD dwMediaType ); BOOL UpdateInfo( IN int Type, IN DWORD dwLen, IN WCHAR * szInfo ); BOOL UpdateSSRC( IN ITStream * pITStream, IN DWORD dwSSRC, IN DWORD dwSendRecv ); BOOL HasSSRC( IN ITStream * pITStream, IN DWORD dwSSRC ); BOOL GetSSRC( IN ITStream * pITStream, OUT DWORD * pdwSSRC ); HRESULT AddStream( IN ITStream * pITStream, IN DWORD dwSSRC, IN DWORD dwSendRecv, IN DWORD dwMediaType ); HRESULT RemoveStream( IN ITStream * pITStream, IN DWORD dwSSRC, OUT BOOL * pbLast ); DWORD GetSendRecvStatus( IN ITStream * pITStream ); HRESULT SetStreamState ( IN ITStream * pITStream, IN PESTREAM_STATE state ); HRESULT GetStreamState ( IN ITStream * pITStream, OUT DWORD * pdwState ); INT GetStreamCount (DWORD dwSendRecv); INT GetStreamTimeOutCount (DWORD dwSendRecv); int CompareCName(IN const WCHAR * szCName) const { return lstrcmpW(m_InfoItems[RTPSDES_CNAME - 1], szCName); } const WCHAR * Name() const { return m_InfoItems[RTPSDES_CNAME - 1]; } protected: // Pointer to the free threaded marshaler. IUnknown * m_pFTM; // The lock that protects the participant object. CMSPCritSection m_lock; // The list of streams that the participant is rendering on. CMSPArray m_Streams; // The list of SSRC for the partcipant in each stream. CMSPArray m_StreamInfo; // the information items for this participant. The index is the // value of RTP_SDES_* - 1, see MSRTP.h. WCHAR * m_InfoItems[NUM_SDES_ITEMS]; // The media types that this participant is sending. DWORD m_dwSendingMediaTypes; // The media types that this participant is receiving. DWORD m_dwReceivingMediaTypes; }; class CParticipantList : public CMSPArray { public: BOOL HasSpace() const { return m_nSize < m_nAllocSize; } BOOL FindByCName(WCHAR *szCName, int *pIndex) const; BOOL InsertAt(int index, ITParticipant *pITParticipant); }; class ATL_NO_VTABLE CParticipantEvent : public CComObjectRootEx, public IDispatchImpl, public CMSPObjectSafetyImpl { public: BEGIN_COM_MAP(CParticipantEvent) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ITParticipantEvent) COM_INTERFACE_ENTRY(IObjectSafety) COM_INTERFACE_ENTRY_AGGREGATE(__uuidof(IMarshal), m_pFTM) END_COM_MAP() DECLARE_GET_CONTROLLING_UNKNOWN() CParticipantEvent(); // methods of the CComObject virtual void FinalRelease(); STDMETHOD (get_Event) ( OUT PARTICIPANT_EVENT * pParticipantEvent ); STDMETHOD (get_Participant) ( OUT ITParticipant ** ppITParticipant ); STDMETHOD (get_SubStream) ( OUT ITSubStream** ppSubStream ); // methods called by the call object. HRESULT Init( IN PARTICIPANT_EVENT Event, IN ITParticipant * pITParticipant, IN ITSubStream * pITSubStream ); protected: // Pointer to the free threaded marshaler. IUnknown * m_pFTM; PARTICIPANT_EVENT m_Event; ITParticipant * m_pITParticipant; ITSubStream * m_pITSubStream; }; class CIPConfMSPCall; HRESULT CreateParticipantEvent( IN PARTICIPANT_EVENT Event, IN ITParticipant * pITParticipant, IN ITSubStream * pITSubStream, OUT IDispatch ** pIDispatch ); HRESULT CreateParticipantEnumerator( IN ITParticipant ** begin, IN ITParticipant ** end, OUT IEnumParticipant ** ppEnumParticipant ); HRESULT CreateParticipantCollection( IN ITParticipant ** begin, IN ITParticipant ** end, IN int nSize, OUT VARIANT * pVariant ); #endif // __CONFPART_H