viewsrc.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:5k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #include "hxcom.h"
  36. #include "hxtypes.h"
  37. #include "hxresult.h"
  38. #include "hxslist.h"
  39. #include "chxpckts.h"
  40. #include "hxstrutl.h"
  41. #include "hxvsrc.h"
  42. #include "viewsrc.h"
  43. HXViewSource::HXViewSource(IUnknown* pContext)
  44. : m_lRefCount(0)
  45. , m_pViewSourceHdlr(NULL)
  46. , m_pViewRightsHdlr(NULL)
  47. , m_pContext(NULL)
  48. {    
  49.     if (pContext)
  50.     {
  51. m_pContext = pContext;
  52. m_pContext->AddRef();
  53.     }
  54. }
  55. HXViewSource::~HXViewSource()
  56. {
  57.     HX_RELEASE(m_pContext);
  58.     HX_RELEASE(m_pViewSourceHdlr);
  59.     HX_RELEASE(m_pViewRightsHdlr);
  60. }
  61. STDMETHODIMP
  62. HXViewSource::QueryInterface(REFIID riid, void**ppvObj)
  63. {
  64.     QInterfaceList qiList[] =
  65.         {
  66.             { GET_IIDHANDLE(IID_IUnknown), (IUnknown*)(IHXClientViewSource*)this },
  67.             { GET_IIDHANDLE(IID_IHXClientViewSource), (IHXClientViewSource*)this },
  68.             { GET_IIDHANDLE(IID_IHXClientViewRights), (IHXClientViewRights*)this },
  69.             { GET_IIDHANDLE(IID_IHXClientViewSourceSink), (IHXClientViewSourceSink*)this },
  70.         };
  71.     
  72.     return ::QIFind(qiList, QILISTSIZE(qiList), riid, ppvObj);
  73. }
  74. /////////////////////////////////////////////////////////////////////////
  75. //  Method:
  76. // IUnknown::AddRef
  77. //  Purpose:
  78. // Everyone usually implements this the same... feel free to use
  79. // this implementation.
  80. //
  81. STDMETHODIMP_(ULONG32) 
  82. HXViewSource::AddRef()
  83. {
  84.     return InterlockedIncrement(&m_lRefCount);
  85. }
  86. /////////////////////////////////////////////////////////////////////////
  87. //  Method:
  88. // IUnknown::Release
  89. //  Purpose:
  90. // Everyone usually implements this the same... feel free to use
  91. // this implementation.
  92. //
  93. STDMETHODIMP_(ULONG32) 
  94. HXViewSource::Release()
  95. {
  96.     if (InterlockedDecrement(&m_lRefCount) > 0)
  97.     {
  98.         return m_lRefCount;
  99.     }
  100.     delete this;
  101.     return 0;
  102. }
  103. /************************************************************************
  104.  *  IHXClientViewSource
  105.  */
  106. STDMETHODIMP
  107. HXViewSource::DoViewSource (
  108. IUnknown*       /*IN*/ pPlayerContext,
  109. IHXStreamSource*       /*IN*/ pSource)
  110. {
  111.     if ( m_pViewSourceHdlr == NULL )
  112.     {
  113. return HXR_NOT_INITIALIZED;
  114.     }
  115.     return m_pViewSourceHdlr->DoViewSource(pPlayerContext, pSource);
  116. }
  117. STDMETHODIMP_(BOOL)
  118. HXViewSource::CanViewSource(
  119. IHXStreamSource*     /*IN*/  pSource)
  120. {
  121.     if ( m_pViewSourceHdlr == NULL )
  122.     {
  123. return FALSE;
  124.     }
  125.     return m_pViewSourceHdlr->CanViewSource(pSource);
  126. }
  127. STDMETHODIMP
  128. HXViewSource::GetViewSourceURL(IUnknown* pPlayerContext,
  129. IHXStreamSource* pSource,
  130. IHXViewSourceURLResponse* pResp)
  131. {
  132.     if ( m_pViewSourceHdlr == NULL )
  133.     {
  134. return HXR_NOT_INITIALIZED;
  135.     }
  136.     return m_pViewSourceHdlr->GetViewSourceURL(pPlayerContext, pSource, pResp);
  137. }
  138. /************************************************************************
  139.  *  IHXClientViewRights
  140.  */
  141. STDMETHODIMP
  142. HXViewSource::ViewRights(IUnknown* pContext)
  143. {
  144.     if (m_pViewRightsHdlr == NULL)
  145.     {
  146. return HXR_NOT_INITIALIZED;
  147.     }
  148.     return m_pViewRightsHdlr->ViewRights(pContext);
  149. }
  150. STDMETHODIMP_(BOOL)
  151. HXViewSource::CanViewRights()
  152. {
  153.     if (m_pViewRightsHdlr == NULL)
  154.     {
  155. return FALSE;
  156.     }
  157.     return m_pViewRightsHdlr->CanViewRights();
  158. }
  159. /************************************************************************
  160.  *  IHXClientViewSourceSink
  161.  */
  162. STDMETHODIMP
  163. HXViewSource::RegisterViewSourceHdlr(IHXClientViewSource* pViewSourceHdlr)
  164. {
  165.     HX_ASSERT(pViewSourceHdlr);
  166.     if ( pViewSourceHdlr )
  167.     {
  168. HX_RELEASE(m_pViewSourceHdlr);
  169. m_pViewSourceHdlr = pViewSourceHdlr;
  170. m_pViewSourceHdlr->AddRef();
  171. pViewSourceHdlr->QueryInterface(IID_IHXClientViewRights, 
  172.     (void**)&m_pViewRightsHdlr);
  173.     }
  174.     return HXR_OK;
  175. }