/*++ 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; typedef struct _STREAM_INFO { DWORD dwSSRC; DWORD dwSendRecv; } STREAM_INFO; 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(IID_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 char * szCName, IN ITStream * pITStream, IN DWORD dwSSRC, IN DWORD dwSendRecv, IN DWORD dwMediaType ); BOOL UpdateInfo( IN int Type, IN DWORD dwLen, IN char * 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 ); int CompareCName(IN const char * szCName) const { return lstrcmpA(m_InfoItems[RTCP_SDES_CNAME - 1], szCName); } 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 RTCP_SDES_TYPE_T - 1, see RTP.h. char * m_InfoItems[RTCP_SDES_LAST - 1]; // 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(char *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(IID_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