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

189 lines
4.3 KiB
C++

/*
Copyright (c) 1998-1999 Microsoft Corporation
Module Name:
blbmedia.h:
Abstract:
Definition of the MEDIA class
Author:
*/
#if !defined(AFX_MEDIA_H__0CC1F057_CAEB_11D0_8D58_00C04FD91AC0__INCLUDED_)
#define AFX_MEDIA_H__0CC1F057_CAEB_11D0_8D58_00C04FD91AC0__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "resource.h" // main symbols
#include "blbcoen.h"
#include "blbsdp.h"
#include "blbconn.h"
#include "blbatt.h"
/////////////////////////////////////////////////////////////////////////////
// MEDIA
const USHORT MAX_PORT_STRLEN = 5;
template <class T>
class ITMediaVtbl : public ITMedia
{
};
class ATL_NO_VTABLE MEDIA :
public ENUM_ELEMENT<SDP_MEDIA>,
public CComObjectRootEx<CComObjectThreadModel>,
public CComDualImpl<ITMediaVtbl<MEDIA>, &IID_ITMedia, &LIBID_SDPBLBLib>,
public ITConnectionImpl,
public ITAttributeListImpl,
public CObjectSafeImpl
{
protected:
friend class MY_COLL_IMPL<MEDIA>;
public:
typedef ITMedia ELEM_IF;
typedef IEnumMedia ENUM_IF;
typedef ITMediaCollection COLL_IF;
typedef SDP_MEDIA SDP_TYPE;
typedef SDP_MEDIA_LIST SDP_LIST;
static const IID &ELEM_IF_ID;
public:
inline MEDIA();
inline ~MEDIA();
inline HRESULT FinalConstruct();
HRESULT Init(
IN CSdpConferenceBlob &ConfBlob
);
inline void SuccessInit(
IN CSdpConferenceBlob &ConfBlob,
IN SDP_MEDIA &SdpMedia
);
inline void ClearSdpBlobRefs();
BEGIN_COM_MAP(MEDIA)
COM_INTERFACE_ENTRY2(IDispatch, ITMedia)
COM_INTERFACE_ENTRY(ITMedia)
COM_INTERFACE_ENTRY(ITConnection)
COM_INTERFACE_ENTRY(ITAttributeList)
COM_INTERFACE_ENTRY(IObjectSafety)
COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pFTM)
END_COM_MAP()
DECLARE_NOT_AGGREGATABLE(MEDIA)
DECLARE_GET_CONTROLLING_UNKNOWN()
// ITMedia
STDMETHOD(get_MediaTitle)(/*[out, retval]*/ BSTR *ppMediaTitle);
STDMETHOD(put_MediaTitle)(/*[in]*/ BSTR pMediaTitle);
STDMETHOD(get_FormatCodes)(/*[out, retval]*/ VARIANT /*SAFEARRAY (BSTR)*/ *pVal);
STDMETHOD(put_FormatCodes)(/*[in]*/ VARIANT /*SAFEARRAY (BSTR)*/ NewVal);
STDMETHOD(get_TransportProtocol)(/*[out, retval]*/ BSTR *ppProtocol);
STDMETHOD(put_TransportProtocol)(/*[in]*/ BSTR pProtocol);
STDMETHOD(get_NumPorts)(/*[out, retval]*/ LONG *pNumPorts);
STDMETHOD(get_StartPort)(/*[out, retval]*/ LONG *pStartPort);
STDMETHOD(get_MediaName)(/*[out, retval]*/ BSTR *ppMediaName);
STDMETHOD(put_MediaName)(/*[in]*/ BSTR pMediaName);
STDMETHOD(SetPortInfo)(/*[in]*/ LONG StartPort, /*[in]*/ LONG NumPorts);
//
// IDispatch methods
//
STDMETHOD(GetIDsOfNames)(REFIID riid,
LPOLESTR* rgszNames,
UINT cNames,
LCID lcid,
DISPID* rgdispid
);
STDMETHOD(Invoke)(DISPID dispidMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS* pdispparams,
VARIANT* pvarResult,
EXCEPINFO* pexcepinfo,
UINT* puArgErr
);
protected:
CSdpConferenceBlob * m_ConfBlob;
IUnknown * m_pFTM; // pointer to the free threaded marshaler
virtual CSdpConferenceBlob *GetConfBlob();
};
inline
MEDIA::MEDIA(
)
: m_ConfBlob(NULL),
m_pFTM(NULL)
{
}
inline
MEDIA::~MEDIA()
{
if ( m_pFTM )
{
m_pFTM->Release();
}
}
inline
HRESULT MEDIA::FinalConstruct()
{
HRESULT HResult = CoCreateFreeThreadedMarshaler( GetControllingUnknown(),
& m_pFTM );
if ( FAILED(HResult) )
{
return HResult;
}
return S_OK;
}
inline void
MEDIA::SuccessInit(
IN CSdpConferenceBlob &ConfBlob,
IN SDP_MEDIA &SdpMedia
)
{
m_ConfBlob = &ConfBlob;
ENUM_ELEMENT<SDP_MEDIA>::SuccessInit(SdpMedia, FALSE);
ITConnectionImpl::SuccessInit(SdpMedia);
ITAttributeListImpl::SuccessInit(SdpMedia.GetAttributeList());
}
inline void
MEDIA::ClearSdpBlobRefs(
)
{
m_ConfBlob = NULL;
}
#endif // !defined(AFX_MEDIA_H__0CC1F057_CAEB_11D0_8D58_00C04FD91AC0__INCLUDED_)