247 lines
5.9 KiB
C++
247 lines
5.9 KiB
C++
/*++
|
|
|
|
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<CComMultiThreadModelNoCS>,
|
|
public IDispatchImpl<ITParticipant, &IID_ITParticipant, &LIBID_IPConfMSPLib>,
|
|
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 <ITStream *> m_Streams;
|
|
|
|
// The list of SSRC for the partcipant in each stream.
|
|
CMSPArray <STREAM_INFO> 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<ITParticipant *>
|
|
{
|
|
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<CComMultiThreadModel>,
|
|
public IDispatchImpl<ITParticipantEvent, &IID_ITParticipantEvent, &LIBID_IPConfMSPLib>,
|
|
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
|