#include // 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; }