126 lines
2.4 KiB
C++
126 lines
2.4 KiB
C++
|
#include <precomp.h>
|
||
|
|
||
|
|
||
|
// IID_IProperty
|
||
|
IID IID_IProperty =
|
||
|
{ /* 4e94d3e0-793e-11d0-8ef0-00a0c90541f4 */
|
||
|
0x4e94d3e0,
|
||
|
0x793e,
|
||
|
0x11d0,
|
||
|
{0x8e, 0xf0, 0x00, 0xa0, 0xc9, 0x05, 0x41, 0xf4}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
// default implementations for SetNetworkInterface
|
||
|
|
||
|
HRESULT STDMETHODCALLTYPE SendMediaStream::SetNetworkInterface(IUnknown *pUnknown)
|
||
|
{
|
||
|
HRESULT hr=S_OK;
|
||
|
IRTPSend *pRTPSend=NULL;
|
||
|
|
||
|
if (m_DPFlags & DPFLAG_STARTED_SEND)
|
||
|
{
|
||
|
return DPR_IO_PENDING; // anything better to return ?
|
||
|
}
|
||
|
|
||
|
if (pUnknown != NULL)
|
||
|
{
|
||
|
hr = pUnknown->QueryInterface(IID_IRTPSend, (void**)&pRTPSend);
|
||
|
}
|
||
|
|
||
|
if (SUCCEEDED(hr))
|
||
|
{
|
||
|
if (m_pRTPSend)
|
||
|
{
|
||
|
m_pRTPSend->Release();
|
||
|
}
|
||
|
m_pRTPSend = pRTPSend;
|
||
|
ZeroMemory(&m_RTPStats,sizeof(m_RTPStats)); // reset network stats
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
HRESULT SendMediaStream::SetFlowSpec()
|
||
|
{
|
||
|
HRESULT hr = DPR_NOT_CONFIGURED;
|
||
|
IRTPSession *pRtpSession;
|
||
|
|
||
|
if (m_pDP->m_bDisableRSVP)
|
||
|
return S_OK;
|
||
|
|
||
|
if ((m_DPFlags & DPFLAG_CONFIGURED_SEND) && (m_pRTPSend))
|
||
|
{
|
||
|
m_pRTPSend->QueryInterface(IID_IRTPSession, (void**)&pRtpSession);
|
||
|
|
||
|
pRtpSession->SetSendFlowspec(&m_flowspec);
|
||
|
pRtpSession->Release();
|
||
|
hr = DPR_SUCCESS;
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|
||
|
HRESULT RecvMediaStream::SetFlowSpec()
|
||
|
{
|
||
|
HRESULT hr = DPR_NOT_CONFIGURED;
|
||
|
IRTPSession *pSession=NULL;
|
||
|
|
||
|
if (m_pDP->m_bDisableRSVP)
|
||
|
return S_OK;
|
||
|
|
||
|
if ((m_DPFlags & DPFLAG_CONFIGURED_RECV) && (m_pIRTPRecv))
|
||
|
{
|
||
|
// the following is bogus for two reasons
|
||
|
// 1. when we go multipoint, we really need to set
|
||
|
// set the WinsockQos based on the total number
|
||
|
// of incoming sessions.
|
||
|
// 2. The RTP interfaces will eventually be made
|
||
|
// so that RTP Session and RTPRecv objects are
|
||
|
// distinct. So QI will fail.
|
||
|
hr = m_pIRTPRecv->QueryInterface(IID_IRTPSession, (void**)&pSession);
|
||
|
if (SUCCEEDED(hr))
|
||
|
{
|
||
|
pSession->SetRecvFlowspec(&m_flowspec);
|
||
|
pSession->Release();
|
||
|
hr = DPR_SUCCESS;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|
||
|
HRESULT STDMETHODCALLTYPE RecvMediaStream::SetNetworkInterface(IUnknown *pUnknown)
|
||
|
{
|
||
|
HRESULT hr=S_OK;
|
||
|
IRTPRecv *pRTPRecv=NULL;
|
||
|
|
||
|
// don't try to do change the RTP interface while in mid-stream
|
||
|
if (m_DPFlags & DPFLAG_STARTED_RECV)
|
||
|
{
|
||
|
return DPR_IO_PENDING; // anything better to return ?
|
||
|
}
|
||
|
|
||
|
if (pUnknown)
|
||
|
{
|
||
|
hr = pUnknown->QueryInterface(IID_IRTPRecv, (void**)&pRTPRecv);
|
||
|
}
|
||
|
if (SUCCEEDED(hr))
|
||
|
{
|
||
|
if (m_pIRTPRecv)
|
||
|
{
|
||
|
m_pIRTPRecv->Release();
|
||
|
}
|
||
|
m_pIRTPRecv = pRTPRecv;
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|