Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The OnGetContentInformation method is called by the server to respond when a cache plug-in calls IWMSCacheProxyServer::GetContentInformation.
HRESULT OnGetContentInformation(
HRESULT hr,
IWMSContext* pContentInfo,
VARIANT varContext
);
Arguments
hr |
[in] HRESULT indicating whether the call to IWMSCacheProxyServer::GetContentInformation succeeded. |
pContentInfo |
[in] Pointer to an IWMSContextIWMSContext Interface containing a Cache Content Information Context. The context includes a variable named WMS_CACHE_CONTENT_INFORMATION_CONTENT_TYPE, which can be zero to indicate on-demand content, or one of the values in the following table, or a bitwise OR of both values. |
Value |
Description |
|---|---|
WMS_CACHE_CONTENT_TYPE_BROADCAST |
The content is a broadcast. |
WMS_CACHE_CONTENT_TYPE_PLAYLIST |
The content is a playlist. |
varContext |
[in] VARIANT containing a value defined by the plug-in when it called IWMSCacheProxyServer::GetContentInformation. For example, your plug-in can use this parameter to persist state information. The server does not alter this value and passes it back when calling OnGetContentInformation. |
Return Value
If the method succeeds, the plug-in must return S_OK. To report an error, the plug-in can return any HRESULT other than S_OK. If the plug-in uses the IWMSEventLogIWMSEventLog Interface to log error information directly to the Windows Event Viewer, it is recommended that it return NS_E_PLUGIN_ERROR_REPORTED. Typically, the server attempts to make plug-in error information available to the server object model, the Windows Event Viewer, and the troubleshooting list in the details pane of the Windows Media Services MMC. However, if the plug-in uses the IWMSEventLog interface to send custom error information to the Windows Event Viewer, returning NS_E_PLUGIN_ERROR_REPORTED stops the server from also logging to the event viewer. For more information about retrieving plug-in error information, see Identifying Plug-in Errors.
Remarks
Cache proxy plug-ins generally call GetContentInformation when performing any of the following operations:
Rolling over to a different protocol
Establishing a cache-miss policy
Processing a prestuff request
In each case, the plug-in must get more information about the content before it can proceed. For example, to establish a cache-miss policy, the plug-in must determine whether the content is a broadcast, a playlist, or on demand. Also, before prestuffing content, it must determine whether the content can be cached.
Example
HRESULT STDMETHODCALLTYPE
CCachePlugin::OnGetContentInfo(
long lHr,
IWMSContext *pContentInfo,
VARIANT varContext
)
{
HRESULT returnHr = (HRESULT) lHr;
HRESULT hr = S_OK;
long lContentType;
// Quit if the call to GetContentInformation() failed .
if( FAILED( returnHr ) )
{
hr = returnHr;
goto exit;
}
// If the plug-in called GetContentInformation() because the
// requested content was not cached, the plug-in must
// determine a cache-miss policy based on the content
// information sent by the server.
// You can define a local variable that contains the reason
// why the plug-in called GetContentInformation().
if (m_OpState == OP_CACHE_MISS)
{
// pContentInfo is a pointer to a context sent by the server.
// The context contains information about the digital media
// requested by the client.
hr = pContentInfo->GetLongValue(
WMS_CACHE_CONTENT_INFORMATION_CONTENT_TYPE,
WMS_CACHE_CONTENT_INFORMATION_CONTENT_TYPE_ID,
(long *) &lContentType,
0 );
if( WMS_CACHE_CONTENT_TYPE_PLAYLIST & lContentType )
{
// TODO: Process the playlist content type.
}
else if( WMS_CACHE_CONTENT_TYPE_BROADCAST & lContentType )
{
// TODO: Process the broadcast content type.
}
else
{
// TODO: Process the on-demand content type.
}
}
// The plug-in can also call GetContentInformation()if a
// client requested that the cache be prestuffed. The plug-in
// must use information about the content to determine whether
// the content can be downloaded.
if (m_OpState == OP_ADD_ITEM)
{
BOOL fDownload = FALSE;
hr = pContentInfo->GetAndQueryIUnknownValue(
WMS_CACHE_CONTENT_INFORMATION_DATA_CONTAINER_VERSION,
WMS_CACHE_CONTENT_INFORMATION_DATA_CONTAINER_VERSION_ID,
IID_IWMSDataContainerVersion,
(IUnknown **) &pContentVersion,
0 );
hr = pContentVersion->GetCacheFlags((long*) &dwCacheFlags);
// TODO: Use the cache flags to determine whether content
// can be downloaded and, if so, download the content.
}
return S_OK;
}
Requirements
Header: streamcache.h.
Library: WMSServerTypeLib.dll.
Platform: Windows Server 2003, Enterprise Edition; Windows Server 2003, Datacenter Edition; Windows Server 2008.