windows-nt/Source/XPSP1/NT/net/tapi/skywalker/confmsp/confpart.h
2020-09-26 16:20:57 +08:00

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