IWMSCacheProxyServerCallback::OnGetContentInformation
.gif)
| Previous | Next |
IWMSCacheProxyServerCallback::OnGetContentInformation
The OnGetContentInformation method is called by the server to respond when a cache plug-in calls IWMSCacheProxyServer::GetContentInformation.
Syntax
HRESULT OnGetContentInformation( HRESULT hr , IWMSContext* pContentInfo , VARIANT varContext );
Parameters
hr
[in] HRESULT indicating whether the call to IWMSCacheProxyServer::GetContentInformation succeeded.
pContentInfo
[in] Pointer to an IWMSContext 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 Values
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 IWMSEventLog 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 Code
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.
See Also
| Previous | Next |