//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 2000. // // File: C D Y N A M I C C O N T E N T S O U R C E . C P P // // Contents: // // Notes: // // Author: mbend 17 Aug 2000 // //---------------------------------------------------------------------------- #include "pch.h" #pragma hdrstop #include "uhbase.h" #include "hostp.h" #include "DynamicContentSource.h" #include "uhsync.h" #include "uhcommon.h" CDynamicContentSource::CDynamicContentSource() { } STDMETHODIMP CDynamicContentSource::GetContent( /*[in]*/ REFGUID guidContent, /*[out]*/ long * pnHeaderCount, /*[out, string, size_is(,*pnHeaderCount,)]*/ wchar_t *** parszHeaders, /*[out]*/ long * pnBytes, /*[out, size_is(,*pnBytes)]*/ byte ** parBytes) { CHECK_POINTER(pnHeaderCount); CHECK_POINTER(parszHeaders); CHECK_POINTER(pnBytes); CHECK_POINTER(parBytes); CALock lock(*this); HRESULT hr = E_INVALIDARG; hr = HrIsAllowedCOMCallLocality((CALL_LOCALITY) CALL_LOCALITY_INPROC); if (SUCCEEDED(hr)) { long nCount = m_providerArray.GetCount(); for(long n = 0; n < nCount; ++n) { hr = m_providerArray[n]->GetContent( guidContent, pnHeaderCount, parszHeaders, pnBytes, parBytes); if(FAILED(hr) || S_OK == hr) { break; } } if(S_FALSE == hr) { TraceTag(ttidError, "CDynamicContentSource::GetContent - cannot find content"); // We didn't find anything so convert to an error hr = E_INVALIDARG; } } TraceHr(ttidError, FAL, hr, FALSE, "CDynamicContentSource::GetContent"); return hr; } STDMETHODIMP CDynamicContentSource::RegisterProvider( /*[in]*/ IUPnPDynamicContentProvider * pProvider) { CHECK_POINTER(pProvider); CALock lock(*this); HRESULT hr = S_OK; IUPnPDynamicContentProviderPtr p; p = pProvider; hr = HrIsAllowedCOMCallLocality((CALL_LOCALITY) CALL_LOCALITY_INPROC); if (SUCCEEDED(hr)) { hr = m_providerArray.HrPushBack(p); } TraceHr(ttidError, FAL, hr, FALSE, "CDynamicContentSource::RegisterProvider"); return hr; } STDMETHODIMP CDynamicContentSource::UnregisterProvider( /*[in]*/ IUPnPDynamicContentProvider * pProvider) { CHECK_POINTER(pProvider); CALock lock(*this); HRESULT hr = S_OK; IUPnPDynamicContentProviderPtr p; p = pProvider; long nIndex = 0; hr = HrIsAllowedCOMCallLocality((CALL_LOCALITY) CALL_LOCALITY_INPROC); if (SUCCEEDED(hr)) { hr = m_providerArray.HrFind(p, nIndex); } if(SUCCEEDED(hr)) { hr = m_providerArray.HrErase(nIndex); } TraceHr(ttidError, FAL, hr, FALSE, "CDynamicContentSource::UnregisterProvider"); return hr; }